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;

posted @ 2013-01-08 11:51  【唐】三三  阅读(857)  评论(0编辑  收藏  举报