5
私はこのようなコードを見かけます。cのパラメータでの動的型キャスト
function((dynamic) param1, param2);
なぜ、この種の動的型キャストがパラメータに必要なのですか?例えば、実行時に動的param1
の種類に基づいてfunction(...)
の過負荷を選択するために使用することができ
私はこのようなコードを見かけます。cのパラメータでの動的型キャスト
function((dynamic) param1, param2);
なぜ、この種の動的型キャストがパラメータに必要なのですか?例えば、実行時に動的param1
の種類に基づいてfunction(...)
の過負荷を選択するために使用することができ
:
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);
}
のでx
がobject
への参照であっても、それが何を実行時に決定します呼び出すためにSomething()
のオーバーロード。適切なオーバーロードがない場合、例外がスローされることに注意してください。
// ...
x = 3.14;
// No overload of Something(double) exists, so this throws at runtime.
Something((dynamic)x);
もっと詳しく見てみましょう。一般に、関数があなたが*キャストすることができる動的変数を取る場合、それは必要ではありません。 – scottm
@scottm:これは私が最初に考えていたことですが、実行時にメソッドの正しいオーバーロードを選択するためにも使用できることを思い出しました。 –
@JamesMichaelHare非常に小さなユースケースです。これは、意図的に使用するために以前の開発者を叱ることのようなものです。 – scottm