在運行時動態添加C# 屬性
基於前面的討論,本文探討了一種在運行時動態向對象添加屬性的替代方法,而無需訴諸集合或字典。
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中文網其他相關文章!