我在 A 类中有一个 SelectionChanged
事件,我想通过 B 类中继。我假设在 B 类中声明一个 SelectionChanged
事件并将此事件处理程序分配给 A.SelectionChanged
会导致 B.SelectionChanged
在 A.SelectionChanged
被触发时触发 - 结果是错误的。
为了更清楚,一些代码:
class A
{
public event EventHandler SelectionChanged;
public void TriggerSelectionChanged()
{
if (SelectionChanged != null) SelectionChanged(this, EventArgs.Empty);
}
}
class B
{
private A _a = new A();
public A A { get { return _a; } }
public event EventHandler SelectionChanged;
public B()
{
A.SelectionChanged += SelectionChanged;
}
public static void Test()
{
B relayer = new B();
bool wasRelayed = false;
relayer.SelectionChanged += delegate { wasRelayed = true; };
relayer.A.TriggerSelectionChanged();
System.Console.WriteLine("Relayed: {0}", wasRelayed);
}
}
这会打印出“Relayed: false”。
将一个 EventHandler 添加到另一个 EventHandler 有什么影响?
编辑: 笔记!我知道解决此问题的方法是通过委托(delegate)、函数等传递事件,但我主要想知道这段代码的效果是什么。
最佳答案
您的代码中没有任何内容将 B.SelectionChanged
的调用“连接”到 A.SelectionChanged
。因此,当您在 A
上触发 SelectionChanged
时,不会调用处理 B
上的 SelectionChanged
的委托(delegate)。
我认为您希望 B 上的事件充当 A 公开的事件的适配器?如果是这种情况,您将需要编写自己的 add
/remove
逻辑。请参阅以下内容:
添加/删除的另一个例子:
关于c# - 添加EventHandler += EventHandler有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623004/