关于event和delegate,我想很多像我这样的初学者都会有一些困惑,到底为什么会出现两个这么相近的东西。从语法上来讲,反复论证发现只有一个区别,可以说是对event的限制那就是1.event所声名的成员变量在类的外面使用时,"仅且只能" 出现在+=,-=的左边,其他和普通delegate相同。至于在网上出现的其他的所谓区别
1.event可以不用初始化
2.event所委托的方法不能有返回值关于1,其实delegate也可以不用初始化。
关于2,可以有返回值,只不过对于多个委托事件,只能返回最后一个事件的返回值,这一点感觉和多播委托没什么区别。希望大家可以做补充,和指正。
1.event可以不用初始化
2.event所委托的方法不能有返回值关于1,其实delegate也可以不用初始化。
关于2,可以有返回值,只不过对于多个委托事件,只能返回最后一个事件的返回值,这一点感觉和多播委托没什么区别。希望大家可以做补充,和指正。
解决方案 »
- 算法~计算一组没有分割的罗马数字的所有可能性
- 关于dirextx播放音频SecondaryBuffer请问如何暂停,恢复,什么时候完成
- 对于周期性执行的操作除了用timer别的用什么好?
- 推荐学习C#的好书
- c# 窗体上控件如何多选并且可移动
- 提取矩阵中各元素的值,并计算各列均值
- 用C#建WEB程序时,取不到应用程序的路径,报错!
- 这段代码,在Windows应用程序模板下可以连接到数据库,但在ASP.NET Web应用程序模板下却不能连接到数据库,请问应如和修改?谢了
- 通过C#编写一个监控程序,对一个perl脚本进行实时监控,有没有好的方案思路
- 100分~!!!C#怎么操作Word文档呢?
- 在托盘程序中,在显示窗体时,能否让任务栏上的窗体任务不显示?
- 故意把标题取这么长就是为了让大家进来看,哇好长啊……能有多长啊~
这句话我不能够接受,我的认为是,即使interface里面能够放置event,那也是event的特殊意义所决定的,而不是说它就已经实例好了,它放在interface里面,也只是一个特殊的property。如果你不给它实例化,它照样指向null的。
那是对内而言,对外你可以不实例化就能+=
delegate int fp(int a,int b);class A
{public void example()
{fp fp1=+fn;
//fp fp1=new fp(fn);
//上面这两句应该是等效的吧?
} private int fn(int a,int b){....};
}
那是对内而言,对外你可以不实例化就能+=------------------如果说,不实例化就能+=,那下面这段程序怎么解释 delegate void MyDelegate();
class MyClass
{
public MyDelegate myDelegate;
}
MyClass myClass = new MyClass();
myClass.myDelegate += mycls_myDelegate;
myClass.myDelegate(); void mycls_myDelegate()
{
MessageBox.Show("Test");
}这只是一个delegate,这不是照样可以执行,和是不实例化有什么关系?
还不都是编译器动的手脚。在这一点上,delegate和event没有区别另:我用的是2005,没用过2003,不知道是不是有区别
但是为了不因为版本问题引起争论,特此声名。
但是event可以作为接口成员这个特性倒是比较有用,如果用委托的话,势必要做成属性的。
先吃饭,然后再对委托进行更多测试……
你可以根据自己的需要重写event的 += 和 -= 方法,而对delegate不行。
Jeffery richard的那本 .net框架设计里讲了一些
嗯……我错了,委托的确可以在null的情况下进行+=操作,这倒是很奇怪。
但是event可以作为接口成员这个特性倒是比较有用,如果用委托的话,势必要做成属性的。
先吃饭,然后再对委托进行更多测试……
--------------------------------我前面也说过,其实,event就是一个特殊的property,因为如果不是自己去实现他的add和romove的话,那么这里面隐藏着一个基础数据保存字段(不知道这样说准不准确),也就是还有一个默认的,在代码期看不见的delegate呢。等编译了以后才能看的见。