委托也称指代、代表、代理,与函数指针不同,委托是面向对象的,并且是类型安全的。
委托可以看作是对象的一种新类型,使用委托可以将方法引用封装在委托对象内,然后可以将该委托对象传递给可以调用所引用方法的代码,而不必在编译时知道将调用哪个方法。
委托的声明格式如下:
[访问修饰符] delegate 返回类型 委托名(参数列表);
举例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test2
{
public delegate void Mydelegate(string str);
class Program
{
static void Methode1(string str)
{
Console.WriteLine("这是方法1:"+str);
}
static void Methode2(string str)
{
Console.WriteLine("这是方法2:" + str);
}
static void Methode3(string str)
{
Console.WriteLine("这是方法3:" + str);
}
static void Methode4(string str)
{
Console.WriteLine("这是方法4:" + str);
}
static void Main(string[] args)
{
Mydelegate D1,D2,D3,D4;
D1 = Methode1;
D2 = Methode2;
D3 = Methode3;
D4 = Methode4;
D1("1");
D2("2");
D3("3");
Console.WriteLine("*************************");
Mydelegate D;
D = D1;
D += D2;
D += D3;
D += D4;
D("3");
}
}
}
运行结果:
这是方法1:1
这是方法2:2
这是方法3:3
这是方法1:3
这是方法2:3
这是方法3:3
这是方法4:3
请按任意键继续. . .
在如上代码中D不能+=D1,因为D实例还未被初始化!
注意:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。