作用
委托作用:1.事件
2.多线程
3.对象之间的逆向传递
为了简化在类中互相调用方法乱套
委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
委托(Delegate)特别用于实现事件和回调方法。
所有的委托(Delegate)都派生自 System.Delegate 类。
声明委托(Delegate)
委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。
public delegate int MyDelegate (string s); //引用任何一个带有一个单一的 string 参数的方法,并返回一个 int 类型变量。
语法
delegate <return type> <delegate-name> <parameter list>
实例化委托(Delegate)
声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数。
public delegate void printString(string s);
...
printString ps1 = new printString(WriteToScreen);
委托的多播(Multicasting of a Delegate)
委托对象可使用 "+" 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。"-" 运算符可用于从合并的委托中移除组件委托。
使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。这被称为委托的 多播(multicasting),也叫组播。下面的程序演示了委托的多播:
// 创建委托实例
NumberChanger nc;
NumberChanger nc1 = new NumberChanger(AddNum);
NumberChanger nc2 = new NumberChanger(MultNum);
nc = nc1;
nc += nc2;
// 调用多播
nc(5);
委托(Delegate)的用途
下面的实例演示了委托的用法。委托 printString 可用于引用带有一个字符串作为输入的方法,并不返回任何东西。
using System;
delegate int NumberChanger(int n);
namespace Appliction{
class TestDelegate{
static int num=10;
public static int Add(int n){
num+=n;
return num;
}
public static int Mult(int n){
num*=n;
return num;
}
public static int GetNum(){
return num;
}
static void Main(string[] args){
NumberChanger a1=new NumberChanger(Add);
NumberChanger a2=new NumberChanger(Mult);
a1(5);
Console.WriteLine("进行加法后的结果为:{0}",GetNum());
a2(10);
Console.WriteLine("进行乘法后的结果位:{0}",GetNum());
Console.ReadLine();
}
}
}