Мы используем его для определения того, какой графический дизайнер должен быть загружен для настройки экземпляра определенного типа.
То есть у нас есть своего рода конструктор рабочего процесса, который загружает все возможные команды из сборки. Эти типы команд имеют свойства, которые необходимо настроить, , поэтому для каждого типа команд требуется другой конструктор (usercontrol).
Например, рассмотрим следующий тип команды (так называемый композит в нашем решении)
[CompositeMetaData("Delay","Sets the delay between commands",1)]
[CompositeDesigner(typeof(DelayCompositeDesigner))]
public class DelayComposite : CompositeBase
{
// code here
}
Это используется информация, содержащаяся в двух местах
1) Когда дизайнер создает список команд, он использует CompositeMetaData для отображения дополнительной информации о команде.
2) Когда пользователь добавляет команду дизайнера и дизайнер создает экземпляр этого класса, он смотрит на имущество CompositeDesigner, создает новый экземпляр указанного типа (UserControl) и добавляет его к визуальный дизайнер.
Рассмотрим следующий код, который мы используем для загрузки команд в нашей панели инструментов «»:
Как вы можете видеть, для каждого типа в сборке которого имя заканчивается «Композит», мы получаем пользовательские атрибуты и используем эту информацию для заполнения нашего экземпляра ToolboxListItem.
Что касается загрузки дизайнера, атрибут retreived так:
var designerAttribute = (CompositeDesignerAttribute)item.CompositType.GetCustomAttributes(false)
.Where(a => a.GetType() == typeof(CompositeDesignerAttribute)).FirstOrDefault();
Это только один пример того, как вы могли бы быть в состоянии использовать пользовательские атрибуты,
Я надеюсь, что это дает вам место для начала.
Они также используются в дизайнере Visual Studio. – 2008-10-16 14:08:18
И важно отметить, что они просто подсказки: вам все равно нужно установить значение MyPoperty по умолчанию 100 в коде, например, или вы окажетесь лёгкому потребителю вашей собственности. – 2008-10-16 14:09:20