在运行时更改Class Attribute中的值

如果我有这样的课程

[Attr("Blah", Data = "Blah")] public class Test : SuperClass{} 

有没有办法可以在运行时更改类的实例的属性值? 例如在伪代码中

 SuperClass test = new Test(); test.Attr.Value = "blah1"; test.Attr.Data = "blah2"; 

(我有一个类的实例,我想更改属性,作为它扩展的类强制转换)

属性和对象实例之间没有隐式连接。 仅在类和属性之间。 最好的办法是在构造函数中查找属性并“缓存”对象属性中的值。 当然,如果您只查看Test类,那就没有意义,但是如果SuperClass的构造函数在使用“this.GetType()”检索的类型上查找自定义属性,那么它确实有意义。

您可以在类级别(而不是对象实例级别)在运行时更改属性值:

 var attr = TypeDescriptor.GetProperties(typeof(UserContact))["UserName"].Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute; attr.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(attr, username_readonly);