委托和事件介绍
来源:microsoft learn
委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。 你可以通过委托实例调用方法。
和委托类似,事件是后期绑定机制。 实际上,事件是建立在对委托的语言支持之上的。
事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式。 任何其他组件都可以订阅事件,并在事件引发时得到通知。
委托的使用
public delegate void MyDelegate(string name);
声明了一个带有单一的 string 参数的委托,定义委托的方法是加上delegate修饰。接下来将委托进行实例化,首先创建两个方法。
private static void EnglishMyname(string name)
{
Console.WriteLine("Myname is " + name);
}
private static void ChineseMyname(string name)
{
Console.WriteLine("我的名字是 " + name);
}
创建委托实例。
MyDelegate a = new MyDelegate(EnglishMyname);
MyDelegate b = new MyDelegate(ChineseMyname);
使用委托对象调用方法
a("LiHua");
b("李华");
委托可以进行多播,+=。
事件的使用
首先声明该事件的委托类型。
public delegate void MyDelegate(string str);
实例化后的委托对象叫做事件,声明事件本身,使用 event 关键字。
public event MyDelegate MyEvent;
通过事件使用委托
首先定义一个事件相应类和事件处理器,可以理解为回调方法。
/// <summary>
/// 事件响应类
/// </summary>
public class EventResponse{
//事件处理器
private void OnTest()
{
Console.WriteLine("被调用一次");
}
}
其次声明一个事件本身。声明事件有两种方式:
完整的声明:
- 先声明委托
- 再声明事件
简单声明:
- 自动生成了委托字段,事件是委托字段的包装器
简单声明如下:
public delegate void MyDelegate();
public class EventTest
{
public event MyDelegate MyEnvent;
}
使用 += 运算符订阅事件,使用 -= 运算符取消订阅,处理程序方法通常为前缀“On”,后跟事件名称。
EventTest.MyEvent += EventResponse.OnTest
最后触发事件。
EventTest.MyEvent?.Invoke();