如何在我班级的所有对象中引发事件?

时间:2015-10-07 14:23:56

标签: c# winforms events methods raiseevent

我有C#类,我正在为该类创建多个对象。

现在,我有一个事件,该类的所有对象都需要执行操作(换句话说,我需要调用该事件的所有对象的特定函数)。

该活动在课堂外。

当我从其他B类或C类的某些外部输入接收数据时,会导致事件,我必须使用方法或事件将该数据发送到A类的所有对象。

我需要在A组中从多个B / C / D类中提出事件。

1 个答案:

答案 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?