2013-03-13 4 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) –

+0

Я уже посмотрел на это, это атрибуты метода, атрибуты класса кажутся разными. По крайней мере, этот вопрос мне не помог. – UberMouse

+0

Я уверен, что вы можете изменить их во время выполнения, поскольку они встроены в метаданные сборки. –

ответ

2

Там нет неявной связи между атрибутами и объектами экземпляров. Только между классом и атрибутом. Лучше всего было бы искать атрибут в конструкторе и «кэшировать» значения в свойствах объекта. Конечно, это не имеет смысла, если вы смотрите только на класс Test, но имеет смысл, если конструктор SuperClass ищет пользовательские атрибуты типа, полученного с помощью «this.GetType()».

+0

Невозможно тогда. Ну что ж. – UberMouse

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"). Вопрос заключается в установке значения атрибута класса. –

Смежные вопросы