在运行时动态添加 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中文网其他相关文章!