2013-03-13 57 views
4

属性如果我有这样的变化值在运行时

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

一类是有办法,我可以在运行时更改类的实例的属性值?例如,在伪代码

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

(我有我想改变的属性,投它延伸类的类的实例)

+0

可能重复http://stackoverflow.com/questions/51269/ change-attributes-parameter-at-runtime) – 2013-03-13 00:39:06

+0

我已经看过,那些是方法属性,类属性看起来不一样。至少这个问题并没有帮助我。 – UberMouse 2013-03-13 00:51:52

+0

我很肯定你可以在运行时改变它们,因为它们被嵌入到程序集的元数据中。 – 2013-03-13 01:03:03

回答

2

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

+0

不可能。好吧。 – UberMouse 2013-03-13 02:52:54

0

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

var attr = TypeDescriptor.GetProperties(typeof(UserContact))["UserName"].Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute; 
attr.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(attr, username_readonly); 
[更改属性的运行时参数(的
+0

这是设置属性的属性,如果类(“UserName”),而不是在类(“UserContact”)。 问题是设置类属性的值。 – 2015-09-30 11:54:05