一、前言
刚开始工作的时候,你觉得委托和事件有些神秘,但当你理解的时候,你觉得并没有你想象的那么难。当你在项目中使用它们时,你会发现委派和事件是非常好的。这篇博文可以看作是对代表团和事件的梳理和总结。
二.委托
C#中的委托相当于C++中的指针函数,但是委托是面向对象的、安全的,并且是一个特殊的类。当然,它们也是引用类型,委托将引用传递给方法。
2.1、代表
要声明委托,必须使用关键字“delegate”。首先声明委托,然后实例化委托。至少0个参数,最多32个参数
格式如下:
privatedelegatestringetasstring;
委托是一个类,所以它的实例化与类的实例化相同,只是它总是接受一个构造函数,该构造函数将委托方法作为参数。有两种方法可以调用委托方法,如下所示:
inti = 10
var方法= NewGetastring(I . ToString);
//调用方法一
控制台。WriteLine($“method method { method }”);
//调用方法2
console . write line($ " method . invoke method { method。invoke }”;
运行结果:
事件发布代码:
publicclass bookinfoeventargs:EventArgs
{
publicBookInfoEventArgs(stringbookName)
{
BookName = bookName
}
publicstringBookName { get设置;}
}
publicclassBookDealer经销商
{
//泛型委托,定义了两个参数,一个是对象发送者,一个是泛型TEventArgs的e
//简化以下定义
//public delegate void new bookinfoeventhandler(object sender,BookInfoEventArgs e);
//公共事件new bookinfoeventhandler new bookinfo;
publiceventEventHandler<。BookInfoEventArgs>。NewBookInfo
public void new book(stringbookName)
{
RaiseNewBookInfo(bookName);
}
publicationvoitraisenewbookinfo(stringbookName)
{
NewBookInfo?。Invoke( this,new bookinfoeventargs(bookName));
}
}
事件订阅者
publicclassConsumer
{
publicConsumer( stringname)
{
Name = name
}
publicstringName { get设置;}
public void new bookhere(object sender,BookInfoEventArgs e)
{
控制台。WriteLine($ "用户:{Name},收到标题:{ e . BookName } ";
}
}
var经销商= new book经销商;
var consumer 1 = new consumer(" user a ");
经销商。NewBookInfo += consumer1。NewBookHere
经销商。new book(" book 112 ");
var consumer 2 = new consumer(" user b ");
经销商。NewBookInfo += consumer2。NewBookHere
经销商。new book(" book _ ABC ");
经销商。NewBookInfo -= consumer1。NewBookHere
经销商。new book(" book _ all ");
运行结果
通过这个例子,我们可以知道Object sender参数代表事件发布者本身,EventArgs e是监控对象。深入了解后,你觉得没有想象中那么难吗?
四.总结
在这里,我们谈论代表和事件。在中使用委托和事件。Net开发可以减少依赖和层耦合,开发出可重用性更高的组件。
版权声明:本文收集自网友或由网友提供。如有侵权,请告知版主或留言,微信官方账号立即删除。
https://www . cn blogs . com/snail blog/archive/2019/09/14/11520438 . html
1.《func 面试常考:C#委托和事件》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《func 面试常考:C#委托和事件》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/fangchan/754015.html