一、前言
委托其实是一个很简单的内容,就是声明一个委托,然后把与委托参数个数和参数类型相同的若干个方法注册到委托里面,最后直接用委托来调用注册进去的若干个方法。
要去除已经注册到委托里面的方法,则相应地减一下就可以了。
所以,delegate--委托 (可以把委托看成用来执行方法的一个东西)
多路广播委托也就是往委托里面注册多个方法。
二、为什么使用委托
使用委托,程序员可以将方法的引用封装到委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必再编译时知道将调用哪些方法。
与C/C++的函数指针不同的是,委托是面向对象,而且是类型安全的。
三、代码示例
class Program
{
public delegate void DelegateFunc<T>(T arg0);
public static void Main(string[] args)
{
DelegateFunc<string> delegateFunc = null;
delegateFunc += PrintStr1;
delegateFunc += PrintStr2;
string str = " print";
delegateFunc(str);
}
public static void PrintStr1(string str)
{
Console.WriteLine("PrintStr1" + str);
}
public static void PrintStr2(string str)
{
Console.WriteLine("PrintStr2" + str);
}
}
四、其他
C#的System命名空间下的Action是一个包括最多16个泛型参数的委托,UnityEngine的UnityAction是一个包括最多4个泛型参数的委托。