2011-02-10 2 views
20

です:?C#の - 私が持っている場合は、動的パラメータ箱入り

void Foo(dynamic X) { 
} 

そして:

Foo(12); 

を考え12箱入りの取得私はそれが想像できません、私はちょうど専門家に尋ねたいと思います。

+2

なぜそれはないと思いますか?ランタイムがオブジェクトとしてではない場合、*未知のコンパイル時の型*の値を格納しているとはどう思いますか? (これは修辞的な質問ではありません;私は人々の直観によって、なぜ言語機能に関する誤ったことを信じて、今後より良い機能を設計できるようになるのかを学ぶことに興味があります) –

+0

C#チームにいますか?私のところでは正当な前提ではありませんでした。 C#に追加された驚くほどクールな機能をすべて備えているので、C#が静的に型付けされた言語であることを時々忘れることは簡単です。あなたがC#チームにいるなら、ラムダ式に感謝します。最高の言語機能 –

+2

@Adam:どうぞよろしくお願いいたします。私はラムダ式を非常によく実装して楽しんでおり、あなたがそれらを使って楽しんでいることをうれしく思います! –

答えて

14

はい、そうです。

dynamicタイプは、一部のメタデータを含むobjectであるため、値タイプは、変数、フィールド、またはタイプdynamicのパラメータに入れるとボックス化されます。

方法は、実際にこのようにコンパイルされます。

void Foo([Dynamic] object X) 
{ 
} 

DynamicAttribute hereについては、こちらをご覧ください。それを呼び出すコードの

IL:

.method private hidebysig static void Main(string[] args) cil managed 
{ 
    .entrypoint 
    .maxstack 8 
    L_0000: nop 
    L_0001: ldc.i4.s 12 
    L_0003: box int32 
    L_0008: call void ConsoleApplication13.Program::Foo(object) 
    L_000d: nop 
    L_000e: ret 
} 
+0

私は答えになる沈没感がありました。ありがとうございました。 –

1

はい。チェックを入力するには、値型を囲む必要があります。

0

はい!

値型であるため、ボックス化されます。

関連する問題