実行時にプロパティを動的に追加することは、さまざまなプログラミング シナリオにおける一般的な要件です。辞書やコレクションを使用するようなアプローチは、特定の状況では十分ですが、すべてのユースケースに適しているわけではありません。 ExpandoObject を活用した代替ソリューションを検討してみましょう。
ExpandoObject は、実行時にメンバーを動的に追加および削除できるようにする .NET の組み込みクラスであり、メンバーの割り当てと取得を可能にします。標準のドット構文による値。このアプローチは、その場で決定されるプロパティを持つ動的オブジェクトを作成する便利な方法を提供します。
ExpandoObject を使用するには、新しいインスタンスを作成し、必要に応じてプロパティを割り当てるだけです。
dynamic dynObject = new ExpandoObject(); dynObject.SomeDynamicProperty = "Hello!";
動的オブジェクトの動作に特定の要件がある場合は、DynamicObject クラスを拡張してカスタムを実装できます。メンバーのアクセスと変更を処理するためのロジック。以下に例を示します。
sealed class MyDynObject : DynamicObject { private readonly Dictionary<string, object> _properties; public MyDynObject(Dictionary<string, object> properties) { _properties = properties; } public override IEnumerable<string> GetDynamicMemberNames() { return _properties.Keys; } public override bool TryGetMember(GetMemberBinder binder, out object result) { return _properties.TryGetValue(binder.Name, out result); } public override bool TrySetMember(SetMemberBinder binder, object value) { _properties[binder.Name] = value; return true; } }
このカスタム動的オブジェクトを使用すると、プロパティを含む動的オブジェクトを作成し、実行時にそれらを動的に変更できます。
var dyn = GetDynamicObject(new Dictionary<string, object>() { { "prop1", 12 } }); Console.WriteLine(dyn.prop1); dyn.prop1 = 150;
DynamicObject を使用すると、柔軟性と使いやすさが提供され、いくつかの可能性も生まれます。欠点:
したがって、開発ニーズに最適なアプローチを選択する際には、動的オブジェクト操作の利点とこれらの考慮事項のバランスをとることが重要です。
以上がExpandoObject と DynamicObject を使用して実行時に C# プロパティを動的に追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。