Re: программно изменить значение атрибута
От: _FRED_ Черногория
Дата: 01.06.11 13:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>public class A
А>{
А>  [DisplayName(Name = "aaaaa")]
А>  public object Value {get; set;}
А>}

А>Как программно изменить значение атрибута?

Атрибут — это метаданные. Сами метаданные изменить в рантайме нельзя.

Но некоторые методы доступа к метаданным позволяют вмешаться в процесс получения метаданных и управлять им.

А>Получится ли для этих целей использовать PropertyDescriptor или ICustomTypeDescriptor, что бы при запросе атрибутов — возвращались программно сгенерированные?


Ключёвое тут — это как происходит "запросе атрибутов". В дотнете есть несколько способов для этого: CustomAttributeData::GetCustomAttributes, MemberInfo::GetCustomAttributes и TypeDescriptor::GetAttributes/MemberDescriptor::Attributes. Последний способ расширяем, но и ограничен — атрибутами уровня типа/свойства/события.

Если вы "переедете" этот способ и будете возвращать что-то своё, то те, кто получают доступ к атрибутам другими путями, ваших изменений "не увидят".

Кто и каким образом будет запрашивать интересующие вас атрибуты?
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.