一、基本介绍
委托(Delegate)是一种特殊的类型,它定义了方法的类型,使得可以将方法作为参数传递。事件(Event)是基于委托的一种特殊用途,用于实现事件驱动的编程模型。
委托
委托可以看作是对方法的一种引用,它允许你将方法作为参数传递给其他方法。委托可以指向任何返回类型和参数列表与委托类型匹配的方法。
委托的声明
public delegate int Operation(int x, int y); // 声明一个委托,用于执行加法操作
委托的实例化和使用
public class Program
{
public static void Main()
{
Operation op = new Operation(Add); // 实例化委托
int result = op(5, 3); // 调用方法
Console.WriteLine("结果是:{0}", result);
op = new Operation(Subtract); // 改变委托引用的方法
result = op(5, 3);
Console.WriteLine("结果是:{0}", result);
}
public static int Add(int x, int y)
{
return x + y;
}
public static int Subtract(int x, int y)
{
return x - y;
}
}
事件
事件是一种特殊的多播委托,用于在对象间发布和订阅消息。事件的发布者(发布事件的对象)和订阅者(对事件感兴趣的对象)通过事件进行通信。
事件的声明
public class Publisher
{
public event EventHandler OnChange; // 声明事件
protected virtual void OnChangeEventHandler(EventArgs e)
{
OnChange?.Invoke(this, e);
}
public void Change()
{
// 触发事件
OnChangeEventHandler(new EventArgs());
}
}
事件的订阅和取消订阅
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
publisher.OnChange += OnChangeHandler; // 订阅事件
}
public void Unsubscribe(Publisher publisher)
{
publisher.OnChange -= OnChangeHandler; // 取消订阅事件
}
private void OnChangeHandler(object sender, EventArgs e)
{
Console.WriteLine("事件被触发!");
}
}
使用事件
public class Program
{
public static void Main()
{
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
subscriber.Subscribe(publisher); // 订阅事件
publisher.Change(); // 触发事件
subscriber.Unsubscribe(publisher); // 取消订阅
publisher.Change(); // 再次触发事件,但不会有输出
}
}
标签:publisher,浅谈,委托,C#,void,int,事件,public
From: https://blog.csdn.net/a876106354/article/details/141818888