在哪里使用活动和代表?

时间:2010-12-02 12:25:58

标签: c# delegates

我在我的许多项目中都使用了事件和代理,但我仍然怀疑在项目中使用事件和代理的地方和有什么区别 代表和活动。任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:8)

Delegate是一种可以封装方法调用的类型。如果要将方法视为对象并将其传递,则应使用委托。

Event只是一种将委托作为属性公开的方法,类之外的任何代码都可以附加其处理程序但不能调用委托。如果将委托公开为公共属性,则类外部的代码不仅可以附加其处理程序,还可以调用委托。

此外,事件还允许您添加删除方法,这些方法在处理程序附加\分离时调用,就像公共属性的getter和setter一样,允许您更好地控制进程。

当您希望其他课程订阅您班级中的某个活动时,您应该使用活动,并在活动发生时收到通知。

public delegate void MyMessageHandlerType(string message);

public class EventTest
{
    public event MyMessageHandlerType MessageEvent
    {
        add { } // invoked when MessageEvent += SomeMethod
        remove { } // invoked when MessageEvent -= SomeMethod
    }
}

答案 1 :(得分:2)

委托和事件都提供了回调机制。事件提供的回调机制比delagate的连接少,因为它可能有任意数量的附加处理程序,并且代码通常以相同的方式工作,而不管处理程序的数量(如果任何)。一个很好的例子可能是窗口的Resized事件;无论是否连接任何事件处理程序,窗口大小调整都将起作用;该事件是一种通知机制。

代表在许多方面更具联系。通常,您可以将恰好一个方法与委托成员关联,并且通常是预期的;例如,采用LINQ扩展方法(例如Where):除非为委托参数提供一种方法,否则它们将无法工作。