web-dev-qa-db-ja.com

C#でメソッドパラメーターを動的にすることはできますか

C#4.0では、次のコードのように、動的メソッドのパラメーターは可能ですか?

public string MakeItQuack(dynamic duck)
{
  string quack = duck.Quack();
  return quack;
}

C#4.0の動的キーワードのクールな例はたくさんありますが、上記は好きではありません。この質問は、もちろんpythonの仕組みに触発されています。

はい、あなたは絶対にそれを行うことができます。静的オーバーロードの解決のために、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");
    }
}

「動的はオブジェクトのようである」という性質は、objectパラメーターのみのオーバーロードとdynamicパラメーターのみのオーバーロードを1つ持つことはできないことを意味します。

44
Jon Skeet
4

はい、できます。 C#4.0仕様で述べられているように、文法はtypeが期待される場所ではどこでもdynamicをサポートするように拡張されています。

タイプ
...
dynamic

もちろん、これにはパラメータの定義も含まれます。

2
Mehrdad Afshari

はい;たとえば、.

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

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

0
Brian