在C#中,是否可以不使用helper方法将一个事件注册到另一个事件?
我在不同的班级有两个相同的活动:在C#中,是否可以不使用helper方法将一个事件注册到另一个事件?,c#,wpf,events,C#,Wpf,Events,我在不同的班级有两个相同的活动: A.eventA B.eventB 这两个事件:eventA和eventB是通过同一委托定义的,因此这些事件具有相同的返回值和参数。当B.eventB被触发时,有可能触发A.eventA吗 我可以写一个方法: void return-value-of-delegate connect(parameters of delegate) { if (A.eventA != null) { A.eventA(parameters of del
A.eventA
B.eventB
这两个事件:eventA和eventB是通过同一委托定义的,因此这些事件具有相同的返回值和参数。当B.eventB被触发时,有可能触发A.eventA吗
我可以写一个方法:
void return-value-of-delegate connect(parameters of delegate)
{
if (A.eventA != null)
{
A.eventA(parameters of delegate);
}
}
我只是想知道我是否可以缩短我的代码
谢谢
(注意:我的代码是WPF项目,因此是WPF标记。)
编辑:在类A中是对类B的引用。不,您不能,除非代码在声明事件的类中。只能从声明类触发事件。您可能必须使用两个类中的参数来使用事件,并反过来触发事件,但您不能保证它们将同时触发,仅在大约相同的时间触发,这取决于注册到每个事件的方法,因为它们将在同一线程中执行。您不能在类之外引发事件。只有类本身才能引发自己的事件。另一方面,您可以公开一个公共方法,该方法接受内部引发指定事件的相同参数
使用
反射
也不是一个仅允许您订阅和删除另一类事件订阅的选项。事件在不同类中定义的事实意味着它们不是相同的事件,即使它们可能具有相同的签名。不能同时从两个不同的类触发事件
除此之外,考虑事件通常是从类的实例中触发的。当发生
A.eventA
时,您会触发哪个B.eventB
实例?每当eventB
触发时,eventA
也会触发:
class A {
private B b;
public event EventHandler EventA {
add {
b.EventB += value;
}
remove {
b.EventB -= value;
}
}
public A() {
b = new B();
}
// ...
}
现在所有的事件侦听器都注册在B类中。我在A类中引用了B类。对不起,我忘了提到它。似乎这就是我要找的。它看起来比一种新方法方便得多!谢谢@丹·普泽伊:一个公正的观察。但如果是这样的话,取决于问题的具体情况,以及A和B之间的关系。这在现实中是非常有意义的。