2010-07-12 2 views
0

Мне нужно добавить атрибут некоторого свойства во время выполнения (для целей разработки). Я знаю, что могу это сделать для занятий:Добавление атрибута свойства во время выполнения (для целей времени разработки)

TypeDescriptor.AddAttributes(typeof(MyType), new MyRuntimeAttribute());

Но я не могу найти способ сделать то же самое для свойств.

Любые предложения?

UPD: именно задача заключается в следующем:

public class BaseClass { 
    public BaseClass(string name) { Name = name; } 
    public Name { get; set; } 
} 
public class Descendant1: BaseClass { 
    public Descendant1() : base("Default Name 1") { } 
} 
... 
public class DescendantN: BaseClass { 
    public DescendantN() : base("Default Name N") { } 
}

Я хочу, чтобы каждый из потомков, чтобы каждый собственный DefaultValueAttribute в свойстве Name с соответствующим именем по умолчанию. И я не хочу hardcode DefaultValueAttribute на каждом descentand :)

+0

Beresta berestnul! – amartynov

ответ

1

Вы не можете динамически добавлять или удалять атрибуты. Обратите внимание, что TypeDescriptor фактически не добавляет атрибут в класс: Если вы проверите массив, который возвращает typeof(MyType).GetCustomAttributes(false) после того, как вы присоедините свой атрибут MyRuntimeAttribute, вы заметите, что он не является его частью.

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

Смотрите также:

+0

Извините, но нет. Я только что немного разобрался, и теперь я думаю, что реализация TypeConverter с переопределением GetProperties - это то, что мне нужно (PropertyDescriptorAdaptor вернет измененный атрибутCollection; на основе http://msdn.microsoft.com/en-us/library/system. componentmodel.propertydescriptor.aspx). Я опубликую здесь результаты после некоторых тестов. Однако, спасибо за вторую ссылку, ответ опубликован там очень интересно. – Beresta

0

Вы также можете предоставить дизайнеру управления и в том, что дизайнер вы можете переопределить PreFilterProperties. Хотя обычно это используется для скрытия свойств, его также можно использовать для их добавления.

http://www.codeproject.com/KB/webforms/HidingProperties.aspx

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