引数に渡したインスタンスの実際の型に応じて呼び出すメソッドを切り替える
C#のdynamicにこんな使い方あるのか!?と、、ちょっと目からウロコだったので試してみました。
下記ページの、dynamicを使ったマルチディスパッチの方法を参考にしてます。
[雑記] 多重ディスパッチ (C# によるプログラミング入門)
サンプル
あるクラスの派生型のインスタンスを基底クラスの型で保持しておき、その変数の実際の型に応じてメソッドを呼び分けたいとします。
以下のに書くと、常にBaseクラスを引数にとるメソッドのオーバーロードが呼び出され、インスタンスの実際の型に応じた呼び分けはできません。
class Base { } class DerivedA : Base { } class DerivedB : Base { } class Program { static void Main(string[] args) { Base obj = new DerivedA(); Invoke(obj); } static void Invoke(Base obj) { Console.WriteLine("Invoke(Base obj)"); } static void Invoke(DerivedA obj) { Console.WriteLine("Invoke(DerivedA obj)"); } static void Invoke(DerivedB obj) { Console.WriteLine("Invoke(DerivedB obj)"); } }