using System;
namespace EventAndDelegateExample
{
// 定义一个委托类型,它表示一个无参数且返回 void 的方法。
public delegate void NotifyHandler();
// 定义一个发布者类,它包含事件。
public class Publisher
{
// 声明一个事件,使用上面定义的委托类型。
public event NotifyHandler NotifyEvent;
// 触发事件的方法。
public void TriggerEvent()
{
Console.WriteLine("Publisher: Triggering the event.");
// 检查是否有订阅者注册了该事件。
if (NotifyEvent != null)
{
NotifyEvent(); // 调用所有订阅者的回调方法。
}
}
}
// 定义一个订阅者类,它将处理事件。
public class Subscriber
{
private string _name;
public Subscriber(string name, Publisher publisher)
{
_name = name;
// 订阅 Publisher 类的事件。
publisher.NotifyEvent += HandleNotification;
}
// 处理事件的方法。
private void HandleNotification()
{
Console.WriteLine($"Subscriber {_name}: Received notification.");
}
}
class Program
{
static void Main(string[] args)
{
// 创建 Publisher 实例。
Publisher publisher = new Publisher();
// 创建多个 Subscriber 实例,并订阅 Publisher 的事件。
Subscriber subscriber1 = new Subscriber("One", publisher);
Subscriber subscriber2 = new Subscriber("Two", publisher);
// 触发事件。
publisher.TriggerEvent();
}
}
}
委托(Delegate):
public delegate void NotifyHandler();
定义了一个名为 NotifyHandler
的委托类型,它表示一个无参数且返回 void
的方法。委托是 C# 中的一种类型安全的函数指针,用于引用具有相同签名的方法。事件(Event):
public event NotifyHandler NotifyEvent;
在 Publisher
类中声明了一个事件 NotifyEvent
,该事件使用前面定义的委托类型 NotifyHandler
。事件是一种特殊的委托,用于在对象之间传递通知。发布者(Publisher):
Publisher
类包含一个事件 NotifyEvent
和一个触发事件的方法 TriggerEvent
。当调用 TriggerEvent
方法时,会检查是否有订阅者注册了该事件,并调用所有订阅者的回调方法。订阅者(Subscriber):
Subscriber
类在构造函数中订阅了 Publisher
类的事件,并定义了一个处理事件的方法 HandleNotification
。每当 Publisher
触发事件时,所有订阅者的 HandleNotification
方法都会被调用。主程序(Program):
Main
方法中,创建了一个 Publisher
实例和两个 Subscriber
实例。然后调用 Publisher
的 TriggerEvent
方法来触发事件,所有订阅者都会收到通知并执行相应的处理逻辑。通过这个示例,你可以看到如何使用委托和事件来实现发布-订阅模式,从而实现对象之间的解耦和通信。
上一篇:c#格式化字符串
下一篇:c#获取路径中的文件名
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站