簡體   English   中英

在運行時更改Class Attribute中的值

[英]Change values in Class Attribute at runtime

如果我有這樣的課程

[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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM