了解委托,从其定义开始,通常一个委托被声明为:
public delegate void CalculateDelegate(Int32 x, Int32 y);
关键字 delegate 用于声明一个委托类型 CalculateDelegate,可以对其添加访问修饰符,默认其
返回值类型为 void,接受两个 Int32 型参数 x 和 y,但是委托并不等同与方法,而是一个引用类型,
类似于 C++中的函数指针,稍后在委托本质里将对此有所交代。
下面的示例将介绍如何通过委托来实现一个计算器模拟程序,在此基础上来了解关于委托的
定义、创建和应用:
class DelegateEx
{
//声明一个委托
public delegate void CalculateDelegate(Int32 x, Int32 y);
//创建与委托关联的方法,二者具有相同的返回值类型和参数列表
public static void Add(Int32 x, Int32 y)
{
Console.WriteLine(x + y);
}
//定义委托类型变量
private static CalculateDelegate myDelegate;
public static void Main()
{
//进行委托绑定
myDelegate = new CalculateDelegate(Add);
//回调 Add 方法
myDelegate(100, 200);
}
}
上述示例,在类 DelegateEx 内部声明了一个 CalculateDelegate 委托类型,它具有和关联方法
Add 完全相同的返回值类型和参数列表,否则将导致编译时错误。将方法 Add 传递给 CalculateDel
egate 构造器,也就是将方法 Add 指派给 CalculateDelegate 委托,并将该引用赋给 myDelegate 变
量,也就表示 myDeleage 变量保存了指向 Add 方法的引用,以此实现对 Add 的回调。
由此可见,委托表示了对其回调方法的签名,可以将方法当作参数进行传递,并根据传入的
方法来动态的改变方法调用。只要为委托提供相同签名的方法,就可以与委托绑定,例如:
public static void Subtract(Int32 x, Int32 y)
{
Console.WriteLine(x - y);
}
同样,可以将方法 Subtract 分配给委托,通过参数传递实现方法回调,例如:
public static void Main()
{
//进行委托绑定
myDelegate = new CalculateDelegate(Subtract);
myDelegate(100, 200);
}
|