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 запущен, код пытается выполнить метод в Class B ( и более поздних классах C, я надеюсь. Я не смог туда попасть, поскольку он выдает ошибки при вызове метода в Класс B ), вместо которого я хочу, чтобы он вызывал только метод в Класс C .
Я думаю, что, поскольку событие подписано в конструкторе, методы класса B по-прежнему запускаются, поскольку оно подписано изначально при вызове StartB.
Вопрос:
Я хочу, чтобы выполнялись только методы класса, для которого был создан экземпляр.
Например: если StartB и StartC вызываются по порядку, когда someevent запускается, методы в Class C должны только быть казненным. Та же и наоборот. Как это сделать?
Я знаю, что делаю что-то ужасно неправильно. Любая помощь очень ценится.