zoukankan      html  css  js  c++  java
  • C#4.0图解教程 第15章 委托

    15.2 声明委托类型

    15.3 创建委托对象

    15.4 赋值委托

    15.6 为委托增加方法

    15.8 调用委托

    15.10 调用列表有返回值的委托

    15.12 匿名方法

    15.3 Lambda表达式

    15.2 声明委托类型

    image


    15.3 创建委托对象

    myDel delVar;

    delVar = new myDel(Elx.StandAndUp);

    注意

    方法具有和委托相匹配的返回类型签名

    image

    快捷语法:

    delVar = Elx.StandAndUp;


    15.4 赋值委托

    image

    Elx.StandAndUp 不再被变量delVal引用。它会被垃圾回收器回收。

    delVal引用新方法,TNT.Bang。


    15.6 为委托增加方法

    image

    在实用+=运算符时,实际上是创建一个新委托,调用列表为左边的委托加上右边的委托,赋值给变量delVal.


    15.8 调用委托

    实用参数调用委托就会实用相同的参数值(例如55),调用列表里的每一个成员。

    显示行号 复制代码 这是一段程序代码。
    1. delegate void myDel(int x);
    2. class Elx
    3. {
    4. public static void StandAndUp(int xI)
    5.     {
    6.         Console.WriteLine("{0}让我我坐着又起来", xI);
    7.     }
    8. }
    9. class TNT
    10. {
    11. public static void Bang(int xI)
    12.     {
    13.         Console.WriteLine("{0}炸弹爆炸", xI);
    14.     }
    15. }
    16. class Program
    17. {
    18. static void Main(string[] args)
    19.     {
    20. myDel delVar;
    21.         delVar = new myDel(Elx.StandAndUp);
    22.         delVar = Elx.StandAndUp;
    23.         delVar += TNT.Bang;
    24.         delVar(55);
    25.     }
    26. }

    image

    delVar(55);


    15.10 调用列表有返回值的委托

    △调用列表中最后一个方法返回的值就是委托调用返回的值。

    △调用列表中所有其他方法的返回值都会被忽略。

    显示行号 复制代码 这是一段程序代码。
    1. using System;
    2. namespace Examples
    3. {
    4. delegate int MyDel();                 // Declare method with return value.
    5. class MyClass
    6. {
    7. int IntValue = 5;
    8. public int Add2() { IntValue += 2; return IntValue; }
    9. public int Add3() { IntValue += 3; return IntValue; }
    10.     }
    11. class Program
    12. {
    13. static void Main()
    14.         {
    15. MyClass mc = new MyClass();
    16. MyDel mDel = mc.Add2;          // Create and initialize the delegate.
    17. mDel += mc.Add3;               // Add a method.
    18. mDel += mc.Add2;               // Add a method.
    19. Console.WriteLine("Value: {0}", mDel());
    20.         }
    21.     }
    22. }
    23. 
      

    image


    15.12 匿名方法

    image

    delegate(int x)

    {

        return x+20;
    }

    关键字       参数列表              语句块

    delegate ( Paranmenter ) { ImplementationCode }


    15.3 Lambda表达式

    删除delegate方法

    在参数列表和匿名方法主体之间放入=>。

    MyDel del = delegate( int x )      { return x+20 };  //匿名方法

    MyDel del =             ( int x ) => { return x+20 };  //Lambda表达式

    显示行号 复制代码 这是一段程序代码。
    1. delegate double MyDel(int par);
    2. 
      
    3. class Program
    4. {
    5. static void Main()
    6.         {
    7. MyDel del = delegate(int x) { return x + 1; };  // Anonymous method
    8. 
      
    9. MyDel le1 = (int x) => { return x + 1; };  // Lambda expression
    10. MyDel le2 = (x) => { return x + 1; };
    11. MyDel le3 = x => { return x + 1; };
    12. MyDel le4 = x => x + 1;
    13. 
      
    14. Console.WriteLine("{0}", del(12));
    15. Console.WriteLine("{0}", le1(12));
    16. Console.WriteLine("{0}", le2(12));
    17. Console.WriteLine("{0}", le3(12));
    18. Console.WriteLine("{0}", le4(12));
    19.         }
    20.     }

    下面le1~le4都是相等的。

    MyDel le1 = (int x) => { return x + 1; };  // Lambda expression
    MyDel le2 = (x) => { return x + 1; };
    MyDel le3 = x => { return x + 1; };
    MyDel le4 = x => x + 1;

  • 相关阅读:
    Linux学习之路3-HelloWorld
    Linux学习之路2-linux系统烧写
    Linux学习之路1
    linux常用命令总结
    禅道配置发邮件功能
    SHELVE模块
    PICKLE模块
    JSON_dump和load
    json.dumps和loads方法
    模块调用
  • 原文地址:https://www.cnblogs.com/tangge/p/2850833.html
Copyright © 2011-2022 走看看