在運行時動態添加屬性是各種程式設計場景中的常見需求。雖然使用字典或集合等方法在某些情況下就足夠了,但它們可能不適合所有用例。讓我們來探索利用 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中文網其他相關文章!