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;