【发布时间】:2011-11-17 08:38:59
【问题描述】:
public Class A
{
public A()
{
someotherclass.someevent += new EventHandler(HandleEvent);
}
private void HandleEvent(object sender,CustomEventArgs e)
{
if(e.Name == "Type1")
Method1();
else if(e.Name == "Type2")
Method2();
}
protected virtual void Method1(){}
protected virtual void Method2(){}
}
public class B: A
{
public B()
{ /*Something*/}
protected override void Method1(){/*some logic*/}
protected override void Method2(){/*some other logic*/}
}
public class C: A
{
public C()
{ /*Something*/}
protected override void Method1(){/*some logic*/}
protected override void Method2(){/*some other logic*/}
}
public class Main
{
private A;
public Main(){/*Something*/}
private void StartB()
{
A = new B();
}
private void StartC()
{
A = new C();
}
}
现在,发生的情况是,在我经历了一个循环,其中方法 StartB(第一次调用)和 StartC(第二次调用)都被调用时,当someevent 被触发,代码尝试执行 B 类 中的方法(希望以后还有 C 类。我无法到达那里,因为它在它调用 B 类中的方法),而不是我希望它只调用 C 类中的方法。
我认为,由于事件是在构造函数中订阅的,因此 B 类方法仍然会被触发,因为它最初是在 StartB 调用时订阅的。
问题:
我只想执行最新实例化的类的方法。
例如:如果依次调用StartB和StartC,当someevent被触发时Class C中的方法 strong> 应该只被执行。反之亦然。该怎么做?
我知道我做错了什么。非常感谢任何帮助。
【问题讨论】:
-
有什么问题?你说的是对的,但你没有问任何问题
标签: c# events inheritance custom-event