将方法传递为参数,并让其订阅函数内部的事件?

时间:2018-08-27 15:50:39

标签: c#

我是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);
    }
}

1 个答案:

答案 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;
    }
}