其他功能事件提供了委托

rah*_*wan 1 c# events

据我了解,事件是类允许客户将事件的发生时应调用的方法委托给类的一种方法。事件发生时,将调用由其客户赋予它的委托。

但是如上面的以下代码所示,也可以仅通过委托(即不使用委托)来实现所述功能。

class Program
{
    static void Main(string[] args)
    {
        ListWithChangedEvent lwce = new ListWithChangedEvent();
        lwce.delegateVariable = DelegateTestMethod;
        lwce.Add("test");

        Console.ReadLine();
    }

    public static void DelegateTestMethod(object sender, object e)
    {

    }
}

public delegate void ChangedEventHandler(object sender, object e);

public class ListWithChangedEvent : System.Collections.ArrayList
{
    public override int Add(object value)
    {
        int result = base.Add(value);
        if (delegateVariable != null)
            delegateVariable(this, "");
        return result;
    }

    public ChangedEventHandler delegateVariable;

}
Run Code Online (Sandbox Code Playgroud)

因此,我想知道事件提供什么附加功能?

Ree*_*sey 5

因此,我想知道事件提供什么附加功能?

与公开代表相比,活动提供了两个截然不同的优势:

  1. 您的意图很明确。代表通常以与“事件”不同的目的在公共场合公开显示-通过使用事件,您可以很清楚地说“这是在特定时刻提出的”。公开委托通常具有不同的含义-公共API中的委托通常是该API的必需输入-即:方法直接使用的某种东西,而不是方法触发的可选通知机制。
  2. 从技术上讲,事件不一定只是委托。事件实际上具有允许自定义添加和删​​除访问器的选项,该选项允许您手动确定订阅者订阅或取消订阅该事件时发生的情况。例如,许多ICommand.CanExecuteChanged实现实际上根本不包括自己的委托-而是静默路由到CommandManager的RequerySuggested事件。