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

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

DDD
DDD原創
2024-12-29 22:34:18490瀏覽

How Can I Dynamically Add Properties to C# Objects at Runtime?

在運行時動態添加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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn