私は次のことをしようとしています:
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 ステートメントを使用したくない場合に最適です。基本クラスがフォールバックメソッドを保持し、派生クラスがより具体的なすべてのメソッドを保持する継承でこれを実装できるかどうか疑問に思っています。