我有C#类,我正在为该类创建多个对象。
现在,我有一个事件,该类的所有对象都需要执行操作(换句话说,我需要调用该事件的所有对象的特定函数)。
该活动在课堂外。
当我从其他B类或C类的某些外部输入接收数据时,会导致事件,我必须使用方法或事件将该数据发送到A类的所有对象。
我需要在A组中从多个B / C / D类中提出事件。
答案 0 :(得分:2)
现代,干净的方法是使用Reactive Extensions。
假设您的事件参数的类型为EArg
。
在您的A类中放置一个静态Subject<EArg>
。
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
,例如参见Why are Subjects not recommended in .NET Reactive Extensions?