我正在尝试将两个事件订阅到一个对象。但是在我尝试添加事件之前,没有实例化对象。有没有办法可以订阅这两个事件并事后实例化?我已经有了委托,事件,事件参数和事件处理程序。
示例代码:
Ares a;
public B()
{
a.up += new upEventHandler(doUp);
a.down += new downEventHandler(doDown);
a = new Ares();
}
答案 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
}