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つ持つことはできないことを意味します。
はい、できます。 C#4.0仕様で述べられているように、文法はtypeが期待される場所ではどこでもdynamic
をサポートするように拡張されています。
タイプ:
...dynamic
もちろん、これにはパラメータの定義も含まれます。
はい;たとえば、.
http://blogs.msdn.com/cburrows/archive/2008/11/14/c-dynamic-part-vi.aspx
またはクリスの他のブログ。または、VS2010 Beta2を入手して試してみてください。