0

C# 4.0 の新しい 'dynamic' キーワードは、動的 .NET 言語とのやり取りを容易にし、リフレクションの代わりに使用することでコードを削減できることを理解しています。そのため、使用法は非常に特定の状況向けです。

ただし、IronXXX 言語などの他の動的言語で得られるすべての動的な利点を C# に与えるかどうかを知りたいですか? つまり、アプリケーション全体を C# で動的言語スタイルで作成することは可能でしょうか?

また、可能であれば、推奨されますか。そして、それぞれなぜ、またはなぜそうではないのですか?

別の言語に切り替えなくても、動的言語の利点をすべて享受できますか?

4

2 に答える 2

5

C# が第一級の動的言語であるとは言いません。

まず、静的型付け機能の一部は動的型付けではうまく機能しません。例えば:

public void ShowListCount(IList foo)
{
    dynamic d = foo;
    Console.WriteLine(d.Count);
}

IListを公​​開しているため、常に機能するはずCountですよね?これで試してみてください:

ShowListCount(new int[10]);

バン。配列IList.Countは明示的なインターフェイス実装で実装されるため、動的型付けでオブジェクトが配列として「認識」される場合、プロパティは認識されないように見えCountます。など、さまざまな落とし穴があります。

また、C# で動的な動作を実装する(つまり、動的に呼び出される) 場合、明示的な言語サポートはありません。自分で派生させDynamicObjectたり実装したりすることはできますIDynamicMetaObjectProviderが、その言語は役に立ちません。

C# での動的型付けは、IronPython や弱い型付けの COM API などの既存の動的プラットフォームと相互運用する場合に主に使用されるものだと考えています。純粋な C# 内で役立つ場所がいくつかありますが、それらは比較的まれです。

基本的に、C# は静的型付けを念頭に置いて設計された言語であることは明らかです。必要な場所で動的型付けを慎重に使用できることは素晴らしいことですが、コードベースの 1 つの領域で動的型付けを広範囲に使用したい場合は、IronPython でその部分を記述してから、C# から呼び出すことをお勧めします。

于 2010-03-25T10:18:45.337 に答える
1

キーワードはdynamic間違いなく C# を動的な世界に近づけますが、動的言語にはならないため、実行時に既存の型にメソッドを追加するなどの動的言語の利点はありません...

于 2010-03-25T10:15:25.110 に答える