Я пытаюсь сделать следующее:
public abstract BaseClass {
public virtual void ReceiveEvent(Event evt)
{
ProcessEvent(evt as dynamic);
}
private void ProcessEvent(object evt)
{
LogManager.Log(@"Received an event that is not being processed!
Dispatch fallback");
}
}
public DerivedClass: BaseClass {
private void ProcessEvent(SpecificEvent evt)
{
LogManager.Log("Processing Event");
}
}
SpecificEvents попадает в резервный метод, а не в производный класс. Я все время использую динамическую диспетчеризацию в одном и том же классе и считаю ее действительно полезной/чистой. Не будет ли это работать с производными классами, как показано в примере выше?
РЕДАКТИРОВАТЬ: Какая-то путаница в ответах. В основном я все время использую следующий дизайн:
public class SomeClass{
public void DoSomethingDispatcher(SomeObject obj)
{
ProcessObject(obj as dynamic);
}
private void DoSomething(SomeObjectType1 obj)
{
}
private void DoSomething(SomeObjectType2 obj)
{
}
private void DoSomething(SomeObjectType3 obj)
{
}
private void DoSomething(object obj) //fallback
{
}
}
Прекрасно работает, когда вы не знаете точный тип заранее и не хотите использовать большой оператор switch. Просто интересно, можно ли это реализовать с наследованием, когда базовый класс содержит резервный метод, а производный класс содержит все более конкретные методы.