C # свойства (атрибут)
Характеристики (Атрибут) представляет собой программу для передачи различных элементов (например, классов, методов, структур, перечислений, компонентов и т.д.) в время выполнения поведения декларативной информации тега.Вы можете добавить информацию о декларативной программе с помощью функции. Метка оператора применяется, поместив его в передней части элементов в квадратных скобках ([]), чтобы описать.
Характеристики (атрибутов), чтобы добавить метаданные, такие как инструкции компилятора и комментарии, описания методов, дополнительной информации и так далее. .Net Framework предоставляет два типа функций:заданнымисвойствами ипользовательскихсвойств.
Заданные свойства (атрибут)
Заданные свойства (атрибут) следующий синтаксис:
[Атрибут (positional_parameters, name_parameter = значение, ...)] элемент
Характеристики (атрибутов) имена и значения указываются в квадратных скобках, помещается перед элементом, к которому он относится. positional_parameters предопределили необходимую информацию, name_parameter предопределили дополнительную информацию.
Предварительно определенные атрибуты (атрибут)
.Net Framework предоставляет три предопределенных атрибутов:
- AttributeUsage
- условный
- устарелый
AttributeUsage
Предварительно определенные атрибутыAttributeUsage описывает , как использовать пользовательский класс атрибута.Он определяет тип свойств может быть применен к проекту.
Положения этой функции имеет следующий синтаксис:
[AttributeUsage ( validon, AllowMultiple = AllowMultiple, Наследственные = наследуется )]
где:
- Validon предопределили параметры характерные элементы языка могут быть размещены. Она представляет собой сочетание переписчиковAttributeTargetsзначения. Значение по умолчаниюAttributeTargets.All.
- ПараметрAllowMultiple (опция)обеспечивает логическое значение для свойства свойствоAllowMultiple(свойство). Если это правда, то эта функция является более полезным. Значение по умолчанию является ложным (одноразового использования).
- Параметрынаследуется (опция)обеспечивает логическое значение для свойстванаследуемогоимущества (имущества). Если это правда, это свойство является производный класс может быть унаследован. Значение по умолчанию является ложным (не передается по наследству).
Например:
[AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = истина)]
условный
Эта функция отмечает предопределенный метод состояние, его реализация зависит от его верхнего идентификатора предварительной обработки.
Это приведет к условной компиляции вызовов методов, в зависимости от указанного значения , такие какотладки или трассировки.Например, значение переменной отображается при отладке кода.
Положения этой функции имеет следующий синтаксис:
[Условное ( conditionalSymbol )]
Например:
[Условное ( "DEBUG")]
Следующий пример демонстрирует эту особенность:
#define DEBUG с помощью системы; используя System.Diagnostics; общественного класса Myclass { [Условное ( "DEBUG")] государственной статической силы Message (строка тзд) { Console.WriteLine (MSG); } } класс испытаний { статической силы функция1 () { Myclass.Message ( "Функции 1."); function2 (); } статической силы function2 () { Myclass.Message ( "В функции 2."); } государственной статической силы Main () { Myclass.Message ( "В главной функции."); функция1 (); Console.ReadKey (); } }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
В главной функции В функции 1 В функции 2
устарелый
Предварительно определенные атрибуты помеченных программные объекты не должны использоваться. Она позволяет сообщить компилятору, чтобы отменить конкретный целевой элемент. Например, когда новый метод используется в классе, но вы все еще хотите сохранить класс в старом методе, вы можете отобразить новый метод следует использовать вместо старого метода сообщения, чтобы пометить его как устаревший (устаревший а).
Положения этой функции имеет следующий синтаксис:
[Вышло из употребления ( сообщение )] [Вышло из употребления ( сообщение, ISERROR )]
где:
- Сообщение Параметр,является строкой , которая описывает проект, а также причины , по которым устарели , что использует альтернативный.
- ПараметрыISERROR,логическое значение. Если это правда, то компилятор должен использовать проект как ошибка. Значение по умолчанию является ложным (компилятор генерирует предупреждение).
Следующий пример демонстрирует эту особенность:
с помощью системы; общественного класса MyClass { [Устаревшие ( "Не используйте OldMethod, используйте вместо NewMethod", правда)] статической силы OldMethod () { Console.WriteLine ( "Это старый метод"); } статической силы NewMethod () { Console.WriteLine ( "Это новый метод"); } государственной статической силы Main () { OldMethod (); } }
При попытке компиляции программы, компилятор выдаст сообщение об ошибке:
Не используйте OldMethod, используйте вместо NewMethod
Создание пользовательских атрибутов (атрибут)
.Net Framework позволяет создавать пользовательские свойства для хранения декларативной информации, и могут быть получены во время выполнения. Эти данные основаны на критериях проектирования и приложение должно быть связано с любым целевым элементом.
Создание и использование пользовательских функции включают в себя четыре этапа:
- Заявление Пользовательские свойства
- Создание пользовательских свойств
- Применить пользовательские свойства на элементе целевой программы
- Доступ через характеристики отражения
Заключительный этап включает в себя написать простую программу для чтения метаданных, чтобы найти различные символы. Метаданные представляют собой данные и информацию, используемую для описания других данных. Программа должна использовать отражение для доступа к свойствам во время выполнения. Мы обсудим это подробно в следующей главе.
Заявление Пользовательские свойства
Новый пользовательские свойства , которые будут получены из классаSystem.Attribute.Например:
// BugFix пользовательский атрибут присваивается класс и его члены [AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = истина)] DebugInfo общественного класса: System.Attribute
В приведенном выше коде, мы объявили пользовательский атрибут с именемDebugInfoиз.
Создание пользовательских свойств
Давайте строить пользовательский атрибут с именемDebugInfo,информация будет храниться в художественном отладчика , полученного. Он хранит следующую информацию:
- номер кода ошибка
- Разработчики признают, имя ошибки
- Дата последнего обзора кода
- А разработчики строка сообщения Отметить
НашиDebugInfoпервые три класса будут использоваться для хранения информации три частной собственности (имущества) и с общественной собственности для хранения сообщений для (имущества). Так будет требоваться номера ошибок имя разработчика и дата обзора позиционирования DebugInfo класс (позиционная) параметр, сообщение является необязательное имя (названные) параметры.
Каждое свойство должно иметь по крайней мере один конструктор. Необходимое позиционирование (позиционная) параметр, который должен быть принят конструктором. Следующий код демонстрируетDebugInfoкатегории:
// BugFix пользовательский атрибут присваивается класс и его члены [AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = истина)] DebugInfo общественного класса: System.Attribute { частное INT Bugno; частный застройщик строка; частная строка lastReview; Разъяснительная строка; общественного DebugInfo (INT Б.Г., строка DEV, строка d) { this.bugNo = BG; this.developer = DEV; this.lastReview = d; } общественное INT Bugno { получить { вернуть Bugno; } } публичная строка Разработчик { получить { вернуть разработчику; } } публичная строка LastReview { получить { вернуть lastReview; } } публичная строка сообщений { получить { возвращать сообщение; } комплект { сообщение = значение; } } }
Применить пользовательские свойства
Размещая свойства непосредственно перед своей цели, чтобы применить эту функцию:
[DebugInfo (45, "Зара Али", "12/8/2012", Message = "Возвращение типа несоответствие")] [DebugInfo (49, "Нуха Али", "10/10/2012", Message = "Неиспользованные переменная")] класс Прямоугольник { // Переменные-члены защищены двойной длины; защищенный двойной ширины; общественный прямоугольник (двойной л, двойной вес) { длина = л; ширина = ш; } [DebugInfo (55, "Зара Али", "19/10/2012", Message = "Возвращение типа несоответствие")] общественный двойной GetArea () { вернуться длина * ширина; } [DebugInfo (56, "Зара Али", "19/10/2012")] общественного недействительными Дисплей () { Console.WriteLine ( "Длина: {0}", длина); Console.WriteLine ( "Ширина: {0}", ширина); Console.WriteLine ( "Площадь: {0}", GetArea ()); } }
В следующей главе мы будем использовать объект класса Reflection, чтобы получить эту информацию.