C#中委托也叫代理,委托提供了后期绑定机制(官方解释),功能类似于C++中的函数指针,它存储的就是一系列具有相同签名和返回类型的方法的地址,调用委托的时候,它所包含的所有方法都会被执行。
语法:修饰符 delegate <函数返回类型> <委托名> (<函数参数>)
a.像调用函数一样调用委托
b.通过Invoke调用委托
namespace Console0719
{
class Program
{
public class DelegateTest
{
public static int add10(int a)
{
return 10 + a;
}
public static int add5(int a)
{
return 5 + a;
}
}
//step1:声明委托(类似函数签名,无需实现)
public delegate int Cal(int a);
static void Main(string[] args)
{
//step2.声明委托实例,将实例化一样签名的函数名作为参数传进小括号
Cal cal1 = new Cal(DelegateTest.add10);
//step3.像调用函数一样调用委托
Console.WriteLine(cal1(3)); //输出13
cal1 = new Cal(DelegateTest.add5);
//step3.通过Invoke()调用委托
Console.WriteLine(cal1.Invoke(3)); //输出8
}
}
}
step1:函数中将委托的实例作为参数
step2:函数中调用委托
step3:将恰当的回调函数作为实参
namespace Console0719
{
class Program
{
delegate void DelegateDone();
static void Main(string[] args)
{
Program test = new Program();
//step3:将恰当的回调函数作为实参
test.Work(CallBack);
}
//step1:函数中将委托的实例作为参数
void Work(DelegateDone callBack)
{
Console.WriteLine("回调执行之前");
//step2:函数中调用委托
callBack();
}
static void CallBack()
{
Console.WriteLine("回调执行成功");
}
}
}
委托可以调用多个方法,这被称为多播。 若要向委托的方法列表(调用列表)添加其他方法,只需使用加法运算符或加法赋值运算符(“+”或“+=”)添加两个委托,“-=”撤销委托。 例如:
namespace Console0719
{
class Program
{
public delegate void DelTest();
static void Main(string[] args)
{
Program test = new Program();
DelTest del1 = new DelTest(work1);
DelTest del2 = new DelTest(work2);
DelTest del3 = del1 + del2;
Console.WriteLine("+=结果:");
del1 += work3;
del1();
Console.WriteLine("");
//输出work1 work3
Console.WriteLine("+结果:");
del3();
Console.WriteLine("");
//输出work1 work2
Console.WriteLine("-=结果:");
del3 -= work1;
del3();
Console.WriteLine("");
//输出work2
}
//step1:函数中将委托的实例作为参数
static void work1()
{
Console.WriteLine("work1");
}
static void work2()
{
Console.WriteLine("work2");
}
static void work3()
{
Console.WriteLine("work3");
}
}
}