是的,C# 中的 DynamicObject 类可以动态添加属性。DynamicObject 是 System.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。我们重写了 TrySetMember 和 TryGetMember 方法,以便在运行时为对象动态添加和获取属性。然后,我们创建了一个 MyDynamicObject 实例,并为其添加了一个名为 NewProperty 的属性。最后,我们尝试获取并输出该属性的值。