在C#中,我们可以想象在不编写代理的情况下编写自己的事件吗?

Bas*_*mme 5 c# java delegates

我在Java中学习了面向对象.现在在C#中开发.这意味着我从未真正理解过时间的功能,但我知道如何使用它们.

最近我发现了这个页面http://java.sun.com/docs/white/delegates.html.

如果Java能够创建没有delagates的事件,那么可以在C#中做同样的事情吗?我们可以想象在没有写一个代表的情况下编写自己的事件吗?

(问题已经在法语中提到了这里)

Jon*_*eet 8

是的,您可以使用单方法接口而不是委托.您还需要在添加/删除和调用方面实现委托的多播特性.然而,由于接口具有不同数量和类型的参数,因此单个类实现多播并且还Invoke以类型安全的方式实现将是困难的.你可以有当然的一群人:Multicast<T>,Multicast<T1, T2>等(同一个类会处理异步执行也可能.)

颈部的另一个痛苦是你每个类只能实现一次接口,即使你想要几个不同的处理程序 - 所以你有很多嵌套类.

对代表来说几乎没有什么特别神奇的东西- 它们只是一个非常有用的抽象,并且使用lambda表达式,匿名方法和表达式树的语法糖,它们甚至更好.


jas*_*son 7

不,你不能在没有代表的情况下在C#中做事.在C#中,事件被定义为委托:

An event是一个允许类或对象提供通知的成员.的event声明如下不同之处在于声明包含的字段event的关键字和类型必须是委托类型.

但是,您可以使用Observer模式模仿事件.

微软对Sun白皮书的回答值得一读.