実行時に C# プロパティを動的に追加する
この記事では、これまでの議論を発展させて、実行時にオブジェクトにプロパティを動的に追加するための別のアプローチを検討します。コレクションに頼ったり、 Dictionaries.
ExpandoObject
ExpandoObject は、メンバーを動的に追加および削除する便利な方法を提供します。 .NET の動的バインディングのサポートを活用し、標準構文を使用してプロパティにアクセスして設定できるようにします。
dynamic dynObject = new ExpandoObject(); dynObject.SomeDynamicProperty = "Hello!"; dynObject.SomeDynamicAction = (msg) => { Console.WriteLine(msg); }; dynObject.SomeDynamicAction(dynObject.SomeDynamicProperty);
カスタマイズされた動的オブジェクト
より具体的なシナリオについては、独自のカスタム DynamicObject 実装を作成できます。これには、DynamicObject から継承するクラスの定義、メンバー アクセスの処理、およびオーバーライドされたメソッドでの設定が含まれます。
public static dynamic GetDynamicObject(Dictionary<string, object> properties) { return new MyDynObject(properties); } public sealed class MyDynObject : DynamicObject { private readonly Dictionary<string, object> _properties; public MyDynObject(Dictionary<string, object> properties) { _properties = properties; } // Overridden methods for member access and setting }
使用法:
var dyn = GetDynamicObject(new Dictionary<string, object>() { { "prop1", 12 }, }); Console.WriteLine(dyn.prop1); dyn.prop1 = 150;
考慮事項:
ExpandoObject とカスタム DynamicObject の間実装は柔軟性を提供しますが、潜在的な落とし穴も伴います。パフォーマンスへの影響、開発者のエクスペリエンス、実行時例外の可能性を考慮して、慎重に使用してください。
以上が実行時に C# オブジェクトにプロパティを動的に追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。