c#4.0では、次のコードのように動的メソッドのパラメータを使用できますか?C#でメソッドパラメータを動的にすることができます
私はC#4.0ではダイナミックキーワードの多くの優れた例を持っていますが、上記のようなものはありません。この質問はもちろん、Pythonの仕組みに触発されています。
c#4.0では、次のコードのように動的メソッドのパラメータを使用できますか?C#でメソッドパラメータを動的にすることができます
私は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");
}
}
「動的オブジェクトのようなものです」性質は、あなただけのdynamic
パラメータを持つだけobject
パラメータと1と1つの過負荷を持っていないことを意味します。
はい、できます。 C#4.0の仕様をで述べたようにタイプが期待されるところはどこでも、文法はdynamic
をサポートするように拡張されています
タイプ:
...
dynamic
これにはもちろんパラメータ定義が含まれています。
はい。例えば、
http://blogs.msdn.com/cburrows/archive/2008/11/14/c-dynamic-part-vi.aspx
やクリスの他のブログ。またはVS2010 Beta2を手に入れて試してみてください。
この記事は非常に非効率的なレイトバインディングを意味することに注意してください。強いタイピングはあなたの友人です! –
@David:DLRの動的挙動は、可能な限り効率的であるようにきれいに行われます。はい、それは遅いですが、期待するほど非効率ではありません。 –
この投稿には本当にありがとうございます! – Darren
私がChrisB(http://blogs.msdn.com/b/cburrows/archive/2010/04/01/errata-dynamic-conversions-andoverload-resolution.aspx)によってこの最新の記事を正しく理解している場合この動作は変更されているようです。コールのようなサウンドは、常に動的に送出され、実行時に決定されたパラメータのタイプに応じて過負荷が選択されます。 – BitMask777
@ BitMask777:*引数*(またはターゲット)の1つが動的な場合のみ。したがって、私の答えのコードでは、 'Foo(" hello ")'は動的引数を持たないので、 'Foo(dyanmic)'は静的にバインドされています。 –