我正在尝试为一个对象订阅两个事件。但是在我尝试添加事件之前,该对象没有被实例化。有没有办法可以订阅这两个事件并在之后实例化?我已经让委托、事件、事件参数和事件处理程序工作了。
示例代码:
Ares a;
public B()
{
a.up += new upEventHandler(doUp);
a.down += new downEventHandler(doDown);
a = new Ares();
}
我正在尝试为一个对象订阅两个事件。但是在我尝试添加事件之前,该对象没有被实例化。有没有办法可以订阅这两个事件并在之后实例化?我已经让委托、事件、事件参数和事件处理程序工作了。
示例代码:
Ares a;
public B()
{
a.up += new upEventHandler(doUp);
a.down += new downEventHandler(doDown);
a = new Ares();
}
我正在尝试为一个对象订阅两个事件。但是在我尝试添加事件之前,该对象没有被实例化。有没有办法可以订阅这两个事件并在之后实例化?
不,绝对不是。这就像在对象存在之前尝试在对象上设置属性一样。试着想想它是如何工作的——然后意识到订阅的事件处理程序是对象状态的一部分,就像属性一样。
显然,您可以将事件处理程序存储在其他地方并稍后订阅它们,但如前所述,答案是否定的。它在概念层面或实际层面上没有任何意义。
这是不可能的。您必须先实例化对象。
您可以做的最接近您所描述的事情就是使事件静态化。
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();
}
我假设事件是在构造函数中触发的,并且您想要捕获它。
尝试将构造函数中的事件触发代码重构为单独的 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
}