委托、事件概念

一、委托
       委托为安全的函数指针,提供了程序回调指定方法的机制;思想在于将工作委派给其他特定的类型、组件、方法或程序集,委托的使用者可以理解为工作的分派者,在通常情况下使用者清楚地知道哪些工作需要执行、执行的结果又是什么,但是他不会亲自地去做这些工作,而是恰当地把这些工作分派出去。

二、事件
      事件是一种使对象或类能够提供通知的成员,客户端可以通过提供事件处理程序为相应的事件添加可执行代码。

三、事件和委托有神马联系
      1、委托本质是一个类型,而事件本质是一个特殊的委托类型的实例,事件提供了两个供订阅事件和取消订阅的方法:add_event和remove_event,其本质都是基于委托链来实现。
      2、EventHandler是.NET框架中提供的一种标准的事件模式,它是一个特殊的泛型委托类型;

[Serializable]
    public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

      3、订阅事件的本质是调用Delegate的Combine方法将事件处理方法绑定到委托链中。

    L_0000: ldarg.0
    L_0001: ldfld class [mscorlib]System.EventHandler`1<class ConsoleEventDemo.ConsoleEventArgs> ConsoleEventDemo.ConsoleManager::ConsoleEvent
    L_0006: stloc.0
    L_0007: ldloc.0
    L_0008: stloc.1
    L_0009: ldloc.1
    L_000a: ldarg.1
    L_000b: call class [mscorlib]System.Delegate [mscorlib]System.Delegate::Combine(class [mscorlib]System.Delegate, class [mscorlib]System.Delegate)
    L_0010: castclass [mscorlib]System.EventHandler`1<class ConsoleEventDemo.ConsoleEventArgs>
    L_0015: stloc.2
    L_0016: ldarg.0
    L_0017: ldflda class [mscorlib]System.EventHandler`1<class ConsoleEventDemo.ConsoleEventArgs> ConsoleEventDemo.ConsoleManager::ConsoleEvent

摘抄自:https://www.cnblogs.com/edisonchou/p/4827578.html

posted @ 2022-02-09 17:06  年近40学编程  阅读(203)  评论(0编辑  收藏  举报