我有 C# 类,我正在为该类创建多个对象。
现在,我有一个事件,该类的所有对象都需要对其执行操作(换句话说,我需要为该事件调用所有对象的特定函数)。
该事件在课堂之外。
当我从其他 B 类或 C 类中的某些外部输入接收数据并且我必须使用方法或事件将这些数据发送到 A 类的所有对象时,会引发事件。
我需要从 A 类的多个 B/C/D 类中引发事件。
我有 C# 类,我正在为该类创建多个对象。
现在,我有一个事件,该类的所有对象都需要对其执行操作(换句话说,我需要为该事件调用所有对象的特定函数)。
该事件在课堂之外。
当我从其他 B 类或 C 类中的某些外部输入接收数据并且我必须使用方法或事件将这些数据发送到 A 类的所有对象时,会引发事件。
我需要从 A 类的多个 B/C/D 类中引发事件。
处理此问题的一种现代、干净的方法是使用 Reactive Extensions。
假设您的事件参数是类型EArg
。
Subject<EArg>
在您的 A 类中放置一个静态对象。
private static readonly Subject<EArg> subject = new Subject<EArg>();
A 的每个实例都可以观察到这一点IObservable<T>
并对其采取行动。
public ClassA() // Constructor
{
subject.Subscribe(HandleEvent);
}
private void HandleEvent(EArg arg)
{
// ...
}
当任何外部类调用(可能通过类 A 上的静态方法)该OnNext
方法时,类 A 的所有实例都可以响应它。
public static void RaiseEvent(EArg arg)
{
subject.OnNext(arg);
}
本质上,您正在寻找一种 pub-sub 机制,而 Reactive Extensions 是实现这一目标的最简洁方式。
注意,不要Subject
对外公开,例如为什么在 .NET Reactive Extensions 中不推荐主题?