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# から呼び出すことをお勧めします。