传统事件与简单委托分配之间的界限在哪里?

时间:2015-10-14 20:44:29

标签: c# events delegates

我一直在玩匿名函数和代理。这让我想知道宣传事件的传统方式有哪些优点。

在课堂内考虑这个。

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图标? : - )

2 个答案:

答案 0 :(得分:2)

使用您的方法,任何对象都可以清除代理:

MyClass.OnSomethingHappens = null;

或调用它:

MyClass.OnSomethingHappens();

事件只允许其他对象添加/删除委托。

答案 1 :(得分:-1)

如果您将OnSomethingHappens声明为公共活动

public MyHandler OnSomethingHappens;

您只能执行+=-=个操作员 如果你公开它,你可以从类外面将它指定为空