我将尝试完成以下操作:
特定事件应该使用派生类中的方法而不是回退方法。我一直在同一个类中使用动态分派,发现这非常有用/干净。就像上面的示例中所示,它不能与派生类一起使用吗?
编辑: 答案似乎存在一些混淆。基本上,我一直使用以下设计:
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");
}
}
特定事件应该使用派生类中的方法而不是回退方法。我一直在同一个类中使用动态分派,发现这非常有用/干净。就像上面的示例中所示,它不能与派生类一起使用吗?
编辑: 答案似乎存在一些混淆。基本上,我一直使用以下设计:
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语句时,这种方法非常有效。我想知道是否可以使用继承来实现,其中基类保存回退方法,派生类保存所有更具体的方法。
public override void ReceiveEvent(Event evt)
。这里有更多关于虚方法的信息:http://msdn.microsoft.com/en-us/library/aa645767%28v=vs.71%29.aspx - Davio