我一直在玩匿名函数和代理。这让我想知道宣传事件的传统方式有哪些优点。
在课堂内考虑这个。
public delegate void MyHandler(string input);
public MyHandler OnSomethingHappens;
// ...then, somewhere else
OnSomethingHappens("The thing that happened...");
从方法外部......
MyClass.OnSomethingHappens += (input) => { Console.WriteLine("Do something"; };
MyClass.OnSomethingHappens += (input) => { Console.WriteLine("Do something else"; };
这与传统的事件处理情况有什么不同,我编写SomethingHappensEventArgs
类,将其连接到实际事件等等?
通过上面的代码,我可以分配代码来在类发生某些事情时执行......这实质上就是事件的作用。
为什么我会遇到创建“真实”事件的所有麻烦?敢说我... Intellisense图标? : - )
答案 0 :(得分:2)
使用您的方法,任何对象都可以清除代理:
MyClass.OnSomethingHappens = null;
或调用它:
MyClass.OnSomethingHappens();
事件只允许其他对象添加/删除委托。
答案 1 :(得分:-1)
如果您将OnSomethingHappens
声明为公共活动
public MyHandler OnSomethingHappens;
您只能执行+=
和-=
个操作员
如果你公开它,你可以从类外面将它指定为空