実行時に、、またはo
の 3 つのタイプのいずれかであることが保証されているオブジェクトがあります。これらはすべて、共通のインターフェイスを実装しています。を制御できますが、 、、またはは制御できません。(したがって、空のマーカー インターフェイスを使用するか、インターフェイスを使用して型の類似性を利用することはできますが、新しいメソッドを追加したり、型の既存のメソッドを変更したりすることはできません。)A
B
C
I
I
A
B
C
また、一連のメソッドMethodA
、MethodB
、および がありMethodC
ます。のランタイム タイプo
が検索され、これらのメソッドのパラメータとして使用されます。
public void MethodA(A a) { ... }
public void MethodB(B b) { ... }
public void MethodC(C c) { ... }
この戦略を使用すると、現時点では、o
どのメソッドを呼び出す必要があるかを判断するために、の型に対してチェックを実行する必要があります。代わりに、単純に 3 つのオーバーロードされたメソッドを使用したいと思います。
public void Method(A a) { ... } // these are all overloads of each other
public void Method(B b) { ... }
public void Method(C c) { ... }
今では、自分で手動でディスパッチする代わりに、C# にディスパッチを任せています。これはできますか?もちろん、素朴で簡単なアプローチは機能しません。
メソッド 'Method(object)' を解決できません。候補者は次のとおりです。
- void メソッド(A)
- void メソッド(B)
- void メソッド(C)