委托

  • 是一种类型,代表对某个方法的引用。
  • 可以让方法成为参数,可以像传递值一样传递方法。
  • 使用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 委托名 事件名;
  • 由发送者发布,由接收者通过+=-=运算符订阅与取消订阅。
  • 发送者通过调用事件来触发,接收者的方法会被自动调用。