2009-11-12 10 views

答えて

41

はい、あなたは絶対にそうすることができます。静的な過負荷解決のために、それはobjectパラメータとして扱われます(静的に呼び出されます)。メソッド内で行うことは、動的になります。たとえば:

using System; 

class Program 
{ 
    static void Foo(dynamic duck) 
    { 
     duck.Quack(); // Called dynamically 
    } 

    static void Foo(Guid ignored) 
    { 
    } 

    static void Main() 
    { 
     // Calls Foo(dynamic) statically 
     Foo("hello"); 
    } 
} 

「動的オブジェクトのようなものです」性質は、あなただけのdynamicパラメータを持つだけobjectパラメータと1と1つの過負荷を持っていないことを意味します。

+0

この投稿には本当にありがとうございます! – Darren

+0

私がChrisB(http://blogs.msdn.com/b/cburrows/archive/2010/04/01/errata-dynamic-conversions-andoverload-resolution.aspx)によってこの最新の記事を正しく理解している場合この動作は変更されているようです。コールのようなサウンドは、常に動的に送出され、実行時に決定されたパラメータのタイプに応じて過負荷が選択されます。 – BitMask777

+2

@ BitMask777:*引数*(またはターゲット)の1つが動的な場合のみ。したがって、私の答えのコードでは、 'Foo(" hello ")'は動的引数を持たないので、 'Foo(dyanmic)'は静的にバインドされています。 –

2

はい、できます。 C#4.0の仕様をで述べたようにタイプが期待されるところはどこでも、文法はdynamicをサポートするように拡張されています

タイプ
            ...
          dynamic

これにはもちろんパラメータ定義が含まれています。

0

はい。例えば、

http://blogs.msdn.com/cburrows/archive/2008/11/14/c-dynamic-part-vi.aspx

やクリスの他のブログ。またはVS2010 Beta2を手に入れて試してみてください。

+0

この記事は非常に非効率的なレイトバインディングを意味することに注意してください。強いタイピングはあなたの友人です! –

+1

@David:DLRの動的挙動は、可能な限り効率的であるようにきれいに行われます。はい、それは遅いですが、期待するほど非効率ではありません。 –

関連する問題