我是B类,我想使用我的方法Foo()订阅A中的事件。但是,我希望A管理订阅。我的想法是将我的方法发送给A并让A在那里订阅,但是我无法找到在线进行此操作的模式。我什至想得到吗?
请注意,在下面的示例中我知道我可以使用以下方式直接订阅A的事件:
this._A.MyEvent += (s, e) => this.MyFunction();
但这不是我想要做的。请不要提供此建议,因为我知道这是可能的。
(预想的模式。)
public class A
{
public event EventHandler MyEvent;
public void SubscribeToEvent(Func function)
{
this.MyEvent += (s, e) => function;
}
public void UnsubscribeToEvent(Func function)
{
this.MyEvent -= (s, e) => function;
}
}
public class B
{
public A _A;
public B()
{
this._A = new A();
}
public void MyFunction(object sender, EventArgs e)
{
// Do things
}
public void Subscribe()
{
this._A.SubscribeToEvent(this.MyFunction);
}
public void Unsubscribe()
{
this._A.UnsubscribeEvent(this.MyFunction);
}
}
答案 0 :(得分:3)
更改类A
中的方法签名后,您建议的模式将起作用。
public class A
{
public event EventHandler MyEvent;
public void SubscribeToEvent(EventHandler function)
{
this.MyEvent += function;
}
public void UnsubscribeToEvent(EventHandler function)
{
this.MyEvent -= function;
}
}