C#委托
1. 委托
委托就是一个函数模板,或者你也可以理解为是一个变量,不同的是一般的变量是存储值的,而委托存储的是方法。
1.1 委托的定义和简单使用
在C#中,委托是使用delegate来定义的,它看起来像一个虚方法,但是却不是。
委托的定义格式:
delegate 返回类型 委托名();//委托明遵循变量名定义规则
在简单的使用就是需要声明委托,赋值,再使用
public delegate int OneNum(int a);//定义一个委托,表示只能给这个委托赋值的方法的返回值是int类型,有一个int类型的参数 private static int DoubleNum(int a) { //这个方法是让指定的数字变成二倍,随便定义的 return a*2; } static void Main(string[] args) { //声明 OneNum oneNum = null; //赋值 oneNum = DoubleNum; //或者直接声明+赋值 //OneNum oneNum = DoubleNum; //或者 //OneNum oneNum = new OneNum(DoubleNum); //使用 Console.WriteLine(oneNum(10)); }
输出的结果就是:20
1.3 多播委托
委托分为多播委托和单播委托,单播委托就是我们上面所说的,里面只含有一个方法,所以我们通过委托调用的时候,也是只调用那一个方法。
而多播委托其实就是一个方法集合,放你调用多播委托的时候,就会将多播委托这个集合遍历,挨个调用里面的方法。
其实单播委托也可以看成是只有一个成员的多播委托。
使用多播委托的方法就是:委托变量 += 方法;
static void Test1()
{
Console.WriteLine("Test1");
}
static void Test2()
{
Console.WriteLine("Test2");
}
static void Main(string[] args)
{
Action action = null;
action += Test1;//也可以action = Test1;但是最好使用+=。
action += Test2;
action();
}
就是这样使用。
多播委托最好使用返回类型为void的,因为多播委托只能返回最后一个方法的返回类型。
而将方法从多播委托中移除的方法就是使用-=符号。
static void Test1()
{
Console.WriteLine("Test1");
}
static void Test2()
{
Console.WriteLine("Test2");
}
static void Main(string[] args)
{
Action action = Test1;
action += Test2;
Console.WriteLine("未移除时:");
action();
Console.WriteLine("移除后:");
action -= Test1;
action();
}
浙公网安备 33010602011771号