C# 在哪里使用事件和委托?

C# 在哪里使用事件和委托?,c#,delegates,C#,Delegates,我在许多项目中使用了事件和委托,但我仍然有一些疑问,在项目中在哪里使用事件和委托,以及它们之间的区别是什么 一个委托和一个事件。有人能解释一下吗?a是一种可以封装方法调用的类型。当您想将方法作为对象处理并传递它时,应该使用委托 是一种将委托公开为属性的方法,类外的任何代码都可以将其处理程序附加到该属性,但不能调用委托。如果将委托公开为公共属性,则类外部的代码不仅可以附加它们的处理程序,还可以调用委托 此外,事件还允许您添加移除方法,这些方法在处理程序附加\分离到它时被调用,就像公共属性的gett

我在许多项目中使用了事件和委托,但我仍然有一些疑问,在项目中在哪里使用事件和委托,以及它们之间的区别是什么 一个委托和一个事件。有人能解释一下吗?

a是一种可以封装方法调用的类型。当您想将方法作为对象处理并传递它时,应该使用委托

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

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

当希望其他类订阅类中的事件并在事件发生时收到通知时,应该使用event

public delegate void MyMessageHandlerType(string message);

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

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


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

这里的解释很好:事件只是委托的一种特殊形式。可能是