2013-03-13 76 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