C#编程语言二:委托 Lambda表达式 事件

  委托是寻址的.NET版本,在C++中,函数指针只不过是内存位置的指针,它不是类型安全

的。我们无法判断这个指针实际指向什么,像参数和返回类型等项更就无从知晓了

  而委托是类型安全的类,它定义了返回类型和参数类型,委托类不仅包含对方法的引用,也可

以包含对多个方法的引用。

  Lambda表达式与委托直接相关,当参数是委托类型时,就可以使用Lambda表达式实现委托

引用的方法。

  如果要传递方法,就必须要把方法的细节封装在一种新类型的对象中,即委托,委托只是一种

特殊的对象,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是一个或多

个方法的地址。

 

  用法:分两个阶段  

  deledate string GetAString( );

  定义了一个委托GetAString,并指定该委托的每个实例都可以包含一个方法的引用,该方法

无参数,并返回string,理解委托的一个要点是它们的类型安全性非常高,在定义委托时,必须给

出它所表示的方法的签名和返回类型等全部细节;

  实际上,定义一个委托是指定义一个新类,委托实现为派生自基类

System.MulticastDelegate的类,System.MulticastDelegate又派生自基类

System.Delegate。

  定义好委托后,就可以创建一个实例,从而用它存储特定的方法的细节。

  int  x = 40;

  GetAString str = new GetAString(x.ToString);

  Console.WriteLine(GetAString());

或者 GetAString.Invoke();

  为了减少输入量,只要需要委托实例,就可以只传送地址的名称,这称为委托推断;

    GetAString str = new GetAString(x.ToString);

等价于:GetAString str = x.ToString;

 

 

 

  

 

 

 

 

  

posted on 2012-11-01 21:15  紫雨心  阅读(168)  评论(0编辑  收藏  举报

导航