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 (2 番目に呼び出される)の両方が呼び出されるサイクルを経た後、 someeventがトリガーされると、コードはクラス Bでメソッドを実行しようとします(そしてそれ以降)。クラス C のメソッドを呼び出すとエラーが発生するため、そこに到達できませんでした) 代わりに、クラス Cのメソッドのみを呼び出します。
イベントはコンストラクターでサブスクライブされるため、StartB の呼び出しで最初にサブスクライブされるため、クラス B メソッドはまだ起動されていると思います。
質問:
最新のインスタンス化されたクラスのメソッドのみを実行する必要があります。
例: StartBとStartCが順番に呼び出された場合、何らかのイベントがトリガーされたときに、クラス Cのメソッドのみが実行されます。逆も同じ。どうやってするか?
私は何かひどく間違ったことをしていることを知っています。どんな助けでも大歓迎です。