是的,C# 中的 DynamicObject
类可以动态添加属性。DynamicObject
是 System.Dynamic
命名空间下的一个类,它允许你在运行时创建和操作对象,而无需在编译时知道对象的确切类型。
要使用 DynamicObject
动态添加属性,你需要重写 TrySetMember
和/或 TryGetMember
方法。这两个方法允许你定义如何为对象的属性设置值和获取属性值。下面是一个简单的示例:
using System;
using System.Dynamic;
public class MyDynamicObject : DynamicObject
{
private readonly Dictionary _properties = new Dictionary();
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
。我们重写了 TrySetMember
和 TryGetMember
方法,以便在运行时为对象动态添加和获取属性。然后,我们创建了一个 MyDynamicObject
实例,并为其添加了一个名为 NewProperty
的属性。最后,我们尝试获取并输出该属性的值。