2011-10-12 6 views
5

私はこのようなコードを見かけます。cのパラメータでの動的型キャスト

function((dynamic) param1, param2); 

なぜ、この種の動的型キャストがパラメータに必要なのですか?例えば、実行時に動的param1の種類に基づいてfunction(...)の過負荷を選択するために使用することができ

+0

もっと詳しく見てみましょう。一般に、関数があなたが*キャストすることができる動的変数を取る場合、それは必要ではありません。 – scottm

+0

@scottm:これは私が最初に考えていたことですが、実行時にメソッドの正しいオーバーロードを選択するためにも使用できることを思い出しました。 –

+0

@JamesMichaelHare非常に小さなユースケースです。これは、意図的に使用するために以前の開発者を叱ることのようなものです。 – scottm

答えて

5

public static void Something(string x) 
{ 
    Console.WriteLine("Hello"); 
} 

public static void Something(int x) 
{ 
    Console.WriteLine("Goodbye"); 
} 
public static void Main() 
{ 
    object x = "A String"; 

    // This will choose string overload of Something() and output "Hello" 
    Something((dynamic)x); 

    x = 13; 

    // This will choose int overload of Something() and output "Goodbye" 
    Something((dynamic)x); 
} 

のでxobjectへの参照であっても、それが何を実行時に決定します呼び出すためにSomething()のオーバーロード。適切なオーバーロードがない場合、例外がスローされることに注意してください。

// ... 
    x = 3.14; 

    // No overload of Something(double) exists, so this throws at runtime. 
    Something((dynamic)x); 
関連する問題