2011-10-19 6 views
23

動的パラメータを持つ場合、コンパイラは戻り値の型を破棄して動的だと思うようです。例えば動的パラメータは、コンパイラにメソッドの戻り値が動的であると考えるようにします。

public MethodResult IsValid(object userLogin) 
{  
    return new MethodResult(); 
} 

あなたはと思うだろう:

var isValidResult = IsValid(someObject()); 

dynamic -> MethodResult 

として読み取る必要がありますが、それはそれがあると考えている:

dynamic -> dynamic 

シグネチャに動的パラメータを追加すると、コンパイラは戻り値が強く型付けされているにもかかわらず、戻り値を知ることを完全に停止しますか?

答えて

19

はい、コンパイラは、パラメータ、プロパティ、またはメソッドの戻り値の型の型をコンパイラが知ることを動的に停止します。

ここでの理由は、ダイナミックな世界をC#に入力すると、レイトバインディングになるということです。コンパイラは、このコードを検証することができません。スタティック型の分析を使用できなくなるためです。だからそれは後になるまで待つ。コンパイラのガイドとして静的キャストを提供することで、これを克服できます。

+1

詳細については、[MSDN - ダイナミック型の使用](http://msdn.microsoft.com/en-us/library/dd264736.aspx)を参照してください。 - "オーバーロードの解決は、コンパイル時ではなく実行時に発生しますメソッド呼び出しの引数の型がdynamic型であるか、またはメソッド呼び出しの受信者が型の動的型である場合に発生します。 - その結果、ランタイムまでにどのメソッドが呼び出されるかはわかりません。 –

関連する問題