C#事件订阅方法

时间:2012-07-31 17:23:01

标签: c#

我正在尝试将两个事件订阅到一个对象。但是在我尝试添加事件之前,没有实例化对象。有没有办法可以订阅这两个事件并事后实例化?我已经有了委托,事件,事件参数和事件处理程序。

示例代码:

Ares a;

public B()
{
    a.up += new upEventHandler(doUp);
    a.down += new downEventHandler(doDown);
    a = new Ares();
}

4 个答案:

答案 0 :(得分:3)

  

我正在尝试将两个事件订阅到一个对象。但是在我尝试添加事件之前,没有实例化对象。有没有办法可以订阅这两个事件并事后实例化?

不,绝对没有。这就像在对象存在之前尝试在对象上设置属性一样。尝试考虑 将如何工作 - 然后意识到订阅的事件处理程序是属性的一部分,就像属性一样。

显然你可以将事件处理程序存储在其他地方并稍后订阅它们,但正如所述,答案是否定的。它在概念层面或实际层面上没有任何意义。

答案 1 :(得分:1)

这是不可能的。您必须首先实例化该对象。

答案 2 :(得分:0)

你能对你所描述的内容做的最接近的事情就是让事件变得静止。

class Ares {
    public static event upEventHandler up;
    public static event downEventHandler down;
    // ...
}

然后将B()修改为:

public B() {
    Ares.up += new upEventHandler(doUp);
    Ares.down += new downEventHandler(doDown);
    a = new Ares();
}

答案 3 :(得分:0)

我假设事件是在构造函数中触发的,你想捕获它。

尝试将构造函数中的事件触发代码重构为单独的Initialize()方法,这样您就可以拥有以下内容:

Ares a;

public B()
{
    a = new Ares();
    a.up += new upEventHandler(doUp);
    a.down += new downEventHandler(doDown);

    a.Initialize(); //do all init of the ares object here, not in constructor
}