.NET 里delegate和event的区别
2017-10-19 14:33
387 查看
最近一朋友找工作面试遇到这么个题目,正好我也对此有点模糊,遂进行了一番资料查询,找到了这个文章:
http://www.cnblogs.com/chengxingliang/archive/2013/05/21/3051912.html
然而爱动手的我,觉得只看文章是不行的,决定动手一试,发现...文章内容并非全对!
文章中说event不能直接用"="赋值,然而经过我的实验,在某些情况下,这其实是可以的.
以下代码就能运行通过:
动手结果令我大为吃惊,居然和文章中说的不同!
后来我将代码改成了这样,才得以论证文章说的结果:
可以看到class里的event确实是不能直接用=赋值,而且也不能在class外面直接调用,而delegate可以
后续我还做了相关小实验,实验过程就不描述了,以下列出实验收获:
通过这次动手,我得到了比文章上更详细的知识:
1:event在事件发行者class里面是可以通过"="赋值的.
2:delegate可以在声明它的class外部被调用.
3:delegate也可以用"+="添加多个订阅者(文章中没说不行,但也没直接说行,我起初误会为不行,实验证明可以)
4:如果你调用的委托(event也是委托的一种)有返回值,并且有多个订阅者,那么你收到的返回值是最后一个订阅者返回的(一个疑点:为何不返回array呢...)
http://www.cnblogs.com/chengxingliang/archive/2013/05/21/3051912.html
然而爱动手的我,觉得只看文章是不行的,决定动手一试,发现...文章内容并非全对!
文章中说event不能直接用"="赋值,然而经过我的实验,在某些情况下,这其实是可以的.
以下代码就能运行通过:
public delegate int di(int a); public static event di e3; static void Main(string[] argv) { e3 = (x) => { Console.WriteLine(x); return x; }; Console.WriteLine($"ret={e3(1)}"); Console.ReadKey(true); }
动手结果令我大为吃惊,居然和文章中说的不同!
后来我将代码改成了这样,才得以论证文章说的结果:
public class MyClass { public di d1; public event di e1; public static event di e2; } static void Main(string[] argv) { e3 = (x) => { Console.WriteLine(x); return x; }; var MC = new MyClass(); MyClass.e2 = (x) => { Console.WriteLine(1); return 1; }; MC.e1 = (x) => { Console.WriteLine(1); return 1; }; MC.e1 += (x) => { Console.WriteLine(2); return 2; }; Console.WriteLine($"ret={MC.e1(1)}"); Console.WriteLine($"ret={MC.d1(1)}"); Console.WriteLine($"ret={e3(1)}"); Console.WriteLine($"ret={MyClass.e2(1)}"); Console.ReadKey(true); }
可以看到class里的event确实是不能直接用=赋值,而且也不能在class外面直接调用,而delegate可以
后续我还做了相关小实验,实验过程就不描述了,以下列出实验收获:
通过这次动手,我得到了比文章上更详细的知识:
1:event在事件发行者class里面是可以通过"="赋值的.
2:delegate可以在声明它的class外部被调用.
3:delegate也可以用"+="添加多个订阅者(文章中没说不行,但也没直接说行,我起初误会为不行,实验证明可以)
4:如果你调用的委托(event也是委托的一种)有返回值,并且有多个订阅者,那么你收到的返回值是最后一个订阅者返回的(一个疑点:为何不返回array呢...)
相关文章推荐
- 我对.NET中delegate和event区别的理解
- delegate和event的区别 (zz)
- C#中Delegate和Event以及它们的区别(转载)
- Delegate成员变量和Event的区别
- event与delegate 区别
- .net中的delegate和event
- .Net: delegate(委托)、event(事件) 应用
- C#中Delegate和Event以及它们的区别
- delegate和event的区别
- Delegate与Event的区别
- delegate和Event区别
- c#中delegate和event之间的区别
- event与delegate的区别
- C#知识点总结系列:3、C#中Delegate和Event以及它们的区别
- delegate与event的区别
- delegate和event的区别
- 复习一下 .Net: delegate(委托)、event(事件) 的基础知识,从头到尾实现事件!
- WPF--event、delegate、EventHandler、RoutedEventHandler的区别
- Delegate与Event的区别[转]
- delegate和event的区别