介绍
委托是C#中的一种类型,允许将方法作为参数传递给其他方法,实现回调、事件处理和动态调用等功能。
官方网址:
https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/delegates/
一句话解释
相当于 JavaScript 的回调函数
例子
由于写法比较与众不同,所以这里用简单例子说明写法、用法,没有实际意义
声明委托类型(在类的内部、外部声明都行)
public delegate void StdDel();
定义委托方法1
在类内部定义
关键:委托方法的 形参、返回值 必须与委托类型相同
public static void Std()
{
Console.WriteLine("学习委托1");
}
实例化委托
实例化委托,传入 Std,不带 ()
static void Main(string[] args)
{
StdDel del = new StdDel(Std);// 实例化委托,传入std
}
使用委托方式1
使用委托对象调用方法
static void Main(string[] args)
{
StdDel del = new StdDel(Std);// 实例化委托,传入std
del(); // 使用委托对象调用方法
Console.ReadKey();
}
委托的多播(Multicasting of a Delegate)
委托对象可使用 + 运算符进行合并,这被称为委托的 多播(multicasting),也叫组播。
注意:只有相同类型的委托可被合并。
应用场景
调用委托时,可以执行多个方法
合并委托例子
定义委托方法2
在类内部定义
关键:委托方法的 形参、返回值 必须与委托类型相同
public static void Std2()
{
Console.WriteLine("学习委托2");
}
执行
使用委托对象调用方法
static void Main(string[] args)
{
StdDel del = new StdDel(Std);// 实例化委托,传入std
del += Std2
del(); // 使用委托对象调用方法Std()、Std2()
Console.ReadKey();
}
移除委托
委托对象可使用 - 运算符可用于从合并的委托中移除组件委托
例子
static void Main(string[] args)
{
StdDel del = new StdDel(Std);// 实例化委托,传入std
del += Std2
del(); // 使用委托对象调用方法Std()、Std2()
del -= Std2 // 移除 Std2
del(); // 使用委托对象调用方法Std()
Console.ReadKey();
}
使用委托方式2
委托作为参数,传入另一个函数
定义执行函数
在类内部定义
关键: 形参 是上面声明的 委托类型
public static void Test(StdDel del)
{
del();// 执行委托
}
执行
调用 Test() 方法,传入 委托实例
static void Main(string[] args)
{
StdDel sd = new StdDel(Std);// 实例化委托,传入std
Test(sd); // 委托作为参数,传入另一个函数
Console.ReadKey();
}
使用委托方式3
委托方法作为参数,传入另一个函数(不需要实例化委托)
执行
static void Main(string[] args)
{
Test(Std);// 执行时,将委托方法作为参数传进去
Console.ReadKey();
}
匿名委托
详见:
https://www.malaoshi.top/show_1GWjLNYvhaS.html