あまり参考にならないので、このような「つまらない」回答をするのは嫌いですが、これは実際には「必要な場合は知っている」というケースです。
アプリケーションやほとんどのライブラリ コードで動的オブジェクトを実装する必要があることは非常にまれです。このインターフェースは、動的オブジェクトとしてのみ使用できるクラスを実装する人々を対象としています。たとえば、オブジェクトに Javascript のような動作を実装したい場合などです。そのようなオブジェクトで必要な任意のプロパティまたはメソッドを呼び出すことができ、コンパイルされます。特定の呼び出しが機能するかどうかを判断するのは、実行時の実装次第です。
まったく無意味ですが、説明的な例は、曜日に基づいて有効なプロパティを決定するクラスです。
public class WeekendObject : DynamicObject
{
Dictionary<string, object> propertybag = new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (DateTime.Now.DayOfWeek == DayOfWeek.Sunday)
{
if (name.StartsWith("Sunday"))
{
return propertybag.TryGetValue(name, out result);
}
}
else
{
if (!name.StartsWith("Sunday"))
{
return propertybag.TryGetValue(name, out result);
}
}
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
if (DateTime.Now.DayOfWeek == DayOfWeek.Sunday)
{
if (name.StartsWith("Sunday"))
{
propertybag[binder.Name.ToLower()] = value;
return true;
}
}
else
{
if (!name.StartsWith("Sunday"))
{
propertybag[binder.Name.ToLower()] = value;
return true;
}
}
return false;
}
}