zoukankan      html  css  js  c++  java
  • .Net中的委托

    一、什么是委托?

    委托类型声明的格式如下:

      //申明委托
       public delegate void TestDelegate(string message);

    1.delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。委托是类型安全和可靠的。

    2.委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:

    3.委托具有以下特点:

    • 委托类似于 C++ 函数指针,但它是类型安全的。

    • 委托允许将方法作为参数进行传递。

    • 委托可用于定义回调方法。

    • 委托可以链接在一起;例如,可以对一个事件调用多个方法。

    • 方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变

    • C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。

    二、委托在.net中的几种写法

    1.在.net 1.0中的写法如下:

    View Code
     //申明委托签名
     public delegate void TestDelegate(string message);
    //委托的匹配方法
      public static void TestMethod(string msg)
            {
                Console.WriteLine(
    string.Format(".net 委托:{0}", msg));
            }

      
    static void Main(string[] args)
            {
                
    #region .net 1.x写法
                TestDelegate dele1 
    = TestMethod;
                dele1(
    ".net 1.x写法");

                TestDelegate dele2 
    = new TestDelegate(TestMethod);
                dele2(
    ".net 1.x写法");
                
    #endregion
         }

    2.在.net 2.0中的写法,.net 2.0中重要的是引入了匿名方法,  当然也可以使用.net1.0中的写法。


    View Code
    #region .net2.x写法
    static void Main(string[] args)
    {
      
    //申明委托对象的时候直接指向一个方法(匿名)的实现
       TestDelegate dele3 = delegate(string msg)
                 {
                     Console.WriteLine(
    string.Format(".Net委托:{0}", msg));
                 };
                 dele3(
    ".net2.x写法--匿名方法");
    }

    3.在.net 3.x中的写法,引入Lambda 表达式,我们来看微软给Lambda 表达式的定义:      

    “Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。

    所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda 表达式 x => x * x 读作“x goes to x times x”。


    View Code
      //该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块
        TestDelegate dele4 = msg => Console.WriteLine(string.Format(".Net委托:{0}", msg));
        dele4(
    ".net 3.x写法中可以引入Lambda 表达式");

    三、委托的应用场景:

    只调用单个方法时.
    当一个类需要方法说明的多重执行时.
    期望使用静态方法执行规范时.
    期望得到一个类似事件的模式时.
    调用者无需知道无需获取定义方法的对象时
    只想给少数既定组件分发执行规范时.
    想要简单的组成结构时.

  • 相关阅读:
    Python开发之路-多进程、进程队列、事件驱动模型、IO模型前戏
    Python开发之路
    cookies,sessionstorage,localstorage的区别?
    Linux的nmon监控结果分析文件中网络分析NET
    长字符串写法
    go中语句为什么不用加分号;结束
    %v的使用
    设计模式--装饰器模式
    第一类值VS第二类值
    闭包
  • 原文地址:https://www.cnblogs.com/guanjie20/p/2040690.html
Copyright © 2011-2022 走看看