zoukankan      html  css  js  c++  java
  • 委托

    概念:委托是方法的容器,是类。跟JavaScript的回调函数一样,把方法作为参数传入方法执行;

    一、简单例子

    /// <summary>
        /// 声明一个委托,需要与执行的方法的前面一样
        /// </summary>
        public delegate void TestDelegate();
        class Program
        {
            static void Main(string[] args)
            {
                //实例一个委托对象,相当于指针指向M1
                TestDelegate td = new TestDelegate(M1);
                //调用委托,相当于调用M1
                td.Invoke();//td();
    
           }
    
     /// <summary>
     /// 声明委托装的这个方法
     /// </summary> 
    static void M1()
     { 
       Console.WriteLine("委托执行这个方法,方法签名跟委托一样"); 
     }
    }
    

      

    二、反编译

    查看IL代码,可以看到本质就是一个类。继承MulticastDelegate

    翻译一下:
    public class TestDelegate.MulticastDelegate{ public TestDelegate(object @object, IntPtr method); public virtual IAsyncResult BeginInvoke(string name, AsyncCallback callback, object @object); public virtual void EndInvoke(IAsyncResult result); public virtual void Invoke(string name); }

    三、匿名方法和lambda表达式

    A:方法只用一次,但是却要声明,我们可以用匿名方法解决。顾名思义,就是没有名字的方法。代替上面的M1方法
                TestDelegate td = new TestDelegate(delegate() {
                    Console.WriteLine("委托执行这个方法,方法签名跟委托一样");
                });
    B:匿名方法写个delegate看起来不太友好,可以用lambda表达式
       TestDelegate td = new TestDelegate(() => Console.WriteLine("委托执行这个方法,方法签名跟委托一样"));
    
    C:lambda注意点
    有参数的话,我们直接在前面的括号写,不用写类型,因为是传的方法指针,执行委托的时候才是执行方法,才有参数填入。其二,参数类型跟委托跟对应的,委托定义好了。
    只有一句语句,可以省略大括号() =>{ Console.WriteLine("委托执行这个方法,方法签名跟委托一样");}. 是返回值,只有一句语句,也可以省略return
    

      

  • 相关阅读:
    随机数
    ASP .NET下的301重定向如何做
    网站外部链接建设方案
    解析ASP.NET WebForm和Mvc开发的区别
    委托、匿名委托和lambda表达式
    图片垂直居中
    jquery函数写法
    [转]函数方法常用的动词
    CSS Hack
    富文本编辑器
  • 原文地址:https://www.cnblogs.com/entclark/p/7932681.html
Copyright © 2011-2022 走看看