首頁 > 後端開發 > C++ > 如何使用 ExpandoObject 和 DynamicObject 在運行時動態新增 C# 屬性?

如何使用 ExpandoObject 和 DynamicObject 在運行時動態新增 C# 屬性?

Susan Sarandon
發布: 2024-12-30 15:31:10
原創
489 人瀏覽過

How to Dynamically Add C# Properties at Runtime Using ExpandoObject and DynamicObject?

如何在運行時動態添加 C# 屬性

簡介

在運行時動態添加屬性是各種程式設計場景中的常見需求。雖然使用字典或集合等方法在某些情況下就足夠了,但它們可能不適合所有用例。讓我們來探索利用 ExpandoObject 的替代方案。

使用 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提供了靈活性和易用性,它還引入了一些潛在的缺點:

  • 運行時驗證:編譯器無法驗證動態調用,因此可能會出現運行時錯誤並降低調試能力。
  • Intellisense 支援: 動態物件在開發環境中不提供智慧感知支持,這使得導航和探索可用屬性變得更加困難

因此,在選擇最適合您的開發需求的方法時,必須平衡動態物件操作的好處與這些注意事項。

以上是如何使用 ExpandoObject 和 DynamicObject 在運行時動態新增 C# 屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板