zoukankan      html  css  js  c++  java
  • C#的Delegate和Event


    参考:

    C# 中的委托和事件

    C# 中的委托和事件(续)

    我的总结如下: 

    1)实例:

    namespace Test
    {
        
    public delegate void ProcessEventHandler(string name);
        
    public class MyTest
        {
            
    public event ProcessEventHandler myProcessEvent;
        }
    }


    2) IL代码:

    .namespace Test
    {
        .
    class public auto ansi beforefieldinit MyTest
            extends [mscorlib]System.Object
        {

            .method 
    public hidebysig specialname rtspecialname instance void .ctor() cil managed
            {
            }

            .field 
    private class Test.ProcessEventHandler myProcessEvent
            .event Test.ProcessEventHandler myProcessEvent
            {
                .addon instance 
    void Test.MyTest::add_myProcessEvent(class Test.ProcessEventHandler)
                .removeon instance 
    void Test.MyTest::remove_myProcessEvent(class Test.ProcessEventHandler)
            }

        }
     
        .
    class public auto ansi sealed ProcessEventHandler
            extends [mscorlib]System.MulticastDelegate
        {
            .method 
    public hidebysig specialname rtspecialname instance void .ctor(object 'object', native int 'method') runtime managed
            {
            }
            .method 
    public hidebysig newslot virtual instance class [mscorlib]System.IAsyncResult BeginInvoke(string name, 
               class
     [mscorlib]System.AsyncCallback callback, object 'object') runtime managed
            {
            }
            .method 
    public hidebysig newslot virtual instance void EndInvoke(class [mscorlib]System.IAsyncResult result) runtime managed
            {
            }
            .method 
    public hidebysig newslot virtual instance void Invoke(string name) runtime managed
            {
            }
        }
    }



    3)总结:

    委托关键字delegate定义了一种类型;

    事件关键字event的定义其实包含两部分,第一定义一个私有的委托的实例,使得外部用户不能直接访问此委托(不管此事件是public或private,此委托总是private),第二通过在IL层增加add和remove方法来对外公开委托的+=和-=从而使外部的用户对此委托赋值或取消赋值;

    完!


    作者:iTech
    微信公众号: cicdops
    出处:http://itech.cnblogs.com/
    github:https://github.com/cicdops/cicdops

  • 相关阅读:
    C\C++\Java字符串拼接比较
    Visual Assist X支持VS2010高亮显示CUDA代码(Windows 7)
    相似字符串(编程之美2013初赛题2)
    linux mdadm raid阵列重建加速bitmaps文件
    Pig Grunt之简单命令及实例说明
    error: device not found解决
    Spring配置文件错误
    Java贪吃蛇游戏(坐标方法)
    java增强型for循环(三种遍历集合方式)
    酸菜鱼的简单做法
  • 原文地址:https://www.cnblogs.com/itech/p/1773911.html
Copyright © 2011-2022 走看看