关于event和delegate,我想很多像我这样的初学者都会有一些困惑,到底为什么会出现两个这么相近的东西。从语法上来讲,反复论证发现只有一个区别,可以说是对event的限制那就是1.event所声名的成员变量在类的外面使用时,"仅且只能" 出现在+=,-=的左边,其他和普通delegate相同。至于在网上出现的其他的所谓区别
1.event可以不用初始化
2.event所委托的方法不能有返回值关于1,其实delegate也可以不用初始化。
关于2,可以有返回值,只不过对于多个委托事件,只能返回最后一个事件的返回值,这一点感觉和多播委托没什么区别。希望大家可以做补充,和指正。
1.event可以不用初始化
2.event所委托的方法不能有返回值关于1,其实delegate也可以不用初始化。
关于2,可以有返回值,只不过对于多个委托事件,只能返回最后一个事件的返回值,这一点感觉和多播委托没什么区别。希望大家可以做补充,和指正。
解决方案 »
- 关于浏览器选项卡可拖拽到程序外面并实例化的问题~ 多进程浏览器~
- 想用C#做个论坛刷帖工具,高手们能给我讲点思路或者方法吗?
- 请教aspx代码与生成的静态代码之间的关系
- 请问一个C#调用PHP Webservice的问题
- 100分求助!!!!!我的网站在本地能运行,传到空间里面就不能运行了,www.wosaibiz.com
- 菜鸟请教一个简单数据连接问题。
- 程序员联盟 群号:3546259 欢迎it界从事计算机程序的加盟
- C/S有没有表单控件啊??
- 如何提取出指定字符?
- 如何在水晶报表运行时修改报表字段的布局(坐标)、字体、是否抑制显示?
- 在托盘程序中,在显示窗体时,能否让任务栏上的窗体任务不显示?
- 故意把标题取这么长就是为了让大家进来看,哇好长啊……能有多长啊~
这句话我不能够接受,我的认为是,即使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呢。等编译了以后才能看的见。