温馨提示×

c# dynamicobject能动态添加属性吗

c#
小樊
81
2024-12-01 05:25:01
栏目: 编程语言

是的,C# 中的 DynamicObject 类可以动态添加属性。DynamicObjectSystem.Dynamic 命名空间下的一个类,它允许你在运行时创建和操作对象,而无需在编译时知道对象的确切类型。

要使用 DynamicObject 动态添加属性,你需要重写 TrySetMember 和/或 TryGetMember 方法。这两个方法允许你定义如何为对象的属性设置值和获取属性值。下面是一个简单的示例:

using System;
using System.Dynamic;

public class MyDynamicObject : DynamicObject
{
    private readonly Dictionary<string, object> _properties = new Dictionary<string, object>();

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        _properties[binder.Name] = value;
        return true;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (_properties.TryGetValue(binder.Name, out result))
        {
            return true;
        }
        return base.TryGetMember(binder, out result);
    }
}

class Program
{
    static void Main()
    {
        dynamic obj = new MyDynamicObject();
        obj.NewProperty = "Hello, World!";

        Console.WriteLine(obj.NewProperty); // 输出: Hello, World!
    }
}

在这个示例中,我们创建了一个名为 MyDynamicObject 的类,它继承自 DynamicObject。我们重写了 TrySetMemberTryGetMember 方法,以便在运行时为对象动态添加和获取属性。然后,我们创建了一个 MyDynamicObject 实例,并为其添加了一个名为 NewProperty 的属性。最后,我们尝试获取并输出该属性的值。

0