У меня есть событие SelectionChanged
в классе A, которое я хочу передать через класс B. Я предполагал, что объявление события SelectionChanged
в классе B и назначение этого EventHandler для 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?
РЕДАКТИРОВАТЬ: Примечание!Мне известно, что решением этой проблемы является передача события через делегата, функцию и т. Д. И т. Д., Но я в основном заинтересован в том, чтобы узнать, каков эффект этого кода.