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

如何在運行時動態新增 C# 屬性?

Patricia Arquette
發布: 2024-12-30 20:09:16
原創
927 人瀏覽過

How Can I Add C# Properties Dynamically at Runtime?

使用 ExpandoObject 在運行時動態添加 C# 屬性

在運行時向物件添加動態屬性是許多應用程式中的常見要求。實現此目的的常見方法是使用字典或參數集合。但是,對於事先未知屬性數量和名稱的情況,這種方法就不夠了。

使用 ExpandoObject

.NET Framework 為這個問題提供了一個內建的解決方案:ExpandoObject。此類別可讓您建立動態對象,您可以在執行時新增和刪除屬性。

// Create a dynamic object
dynamic dynObject = new ExpandoObject();

// Add dynamic properties
dynObject.SomeDynamicProperty = "Hello!";

// Execute dynamic actions
dynObject.SomeDynamicAction = (msg) =>
{
    Console.WriteLine(msg);
};

dynObject.SomeDynamicAction(dynObject.SomeDynamicProperty);
登入後複製

自訂動態物件

對於更複雜的場景,您可能需要建立自己的動態物件實作 DynamicObject 類別的物件。這使您可以更好地控制動態成員請求的處理方式。

public sealed class MyDynObject : DynamicObject
{
    // Member dictionary
    private readonly Dictionary<string, object> _properties;

    public MyDynObject(Dictionary<string, object> properties)
    {
        _properties = properties;
    }

    // Get dynamic member names
    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return _properties.Keys;
    }

    // Try to get a dynamic member
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            result = _properties[binder.Name];
            return true;
        }
        else
        {
            result = null;
            return false;
        }
    }

    // Try to set a dynamic member
    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            _properties[binder.Name] = value;
            return true;
        }
        else
        {
            return false;
        }
    }
}
登入後複製

使用此方法,您可以建立具有任何所需屬性的動態物件:

var dyn = GetDynamicObject(new Dictionary<string, object>()
{
    { "prop1", 12 }
});

Console.WriteLine(dyn.prop1);
dyn.prop1 = 150;
登入後複製

警告: 使用動態物件時,請注意編譯器將無法驗證您的動態調用,並且您可能會遇到運行時錯誤或缺乏智慧感知支援。

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

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