委托
- 是一种类型,代表对某个方法的引用。
- 可以让方法成为参数,可以像传递值一样传递方法。
- 使用
delegate
关键字定义,格式为:delegate
返回值类型委托名(参数列表); - 可以创建委托的实例,绑定到具体的方法。
- 允许在运行时将方法与事件动态关联。
delegate void Notify(string message);
class Program
{
static void Main()
{
Notify notify = DisplayMessage;
notify += DisplayMessage2;
notify("Hello");
}
static void DisplayMessage(string message)
{
Console.WriteLine(message);
}
static void DisplayMessage2(string message)
{
Console.WriteLine("Message: " + message);
}
}
泛型委托
委托是一个对象类型,因此在使用委托时需要使用delegate关键字先声明才可使用。介于此,dotnet
框架提供了泛型委托:
-
Action<T1,T2>
委托,它代表的的是参数为T1、T2
返回值为void
的委托,使用它无需声明委托类型即可使用,需要注意的是它和delegate
声明的类型不等同public delegate void SayHello(); [AllowNull] public Action SayHello1 { get; set; } [AllowNull] public SayHello SayHello2 { get; set; } //SayHello1和SayHello2为不同的类型,即使声明的方法、参数一致
-
Func(T1,T2,T3)
委托,它代表参数为T1、T2
,返回值为T3
为的委托
事件
- 基于委托实现,用于连接发送者和接收者。
- 使用
event
关键字定义,格式为:event
委托名 事件名; - 由发送者发布,由接收者通过
+=
和-=
运算符订阅与取消订阅。 - 发送者通过调用事件来触发,接收者的方法会被自动调用。