Поиск

Определение атрибутов

В предыдущем примере синтаксис прикрепления атрибута к типу или члену похож на тот, что применяется при создании экземпляра класса. Дело в том, что атрибут на самом деле является классом, производным от базового класса System.Attribute.

А теперь немного расширим атрибут RegistryKey:

public enun RegistryHives {
HKEY_CLASSES_ROOT,
HKEY_CURRENT_USER.
HKEY_LOCAL_MACHINE,
HKEY.USERS,
HKEY_CURRENT_CONFIG }
public class RegistryKeyAttribute : Attribute
{
public RegistryKeyAttribute(RegistryHives Hive, String ValueName)
{
this.Hive = Hive; this.ValueName = ValueNane; >
protected RegistryHives hive; public RegistryHives Hive {
get { return hive; }
set { hive = value; } >
protected String valueNane; public String ValueName
<
get { return valueName; >
set { valueName = value; } } >

В этом примере я добавил епит для различных типов разделов реестра, конструктор для класса-атрибута (который принимает тип и имя раздела реестра) и два свойства для имени улья реестра и имени значения. Теперь мы видим более широкие возможности атрибутов, так что посмотрим, как запросить атрибут в период выполнения. Мы будем работать с полностью функциональным примером. Перейдем к рассмотрению некоторых более сложных вопросов, связанных с определением и прикреплением атрибутов.

ПРИМЕЧАНИЕ В приведенных примерах к именам классов атрибутов добавлено слово Attribute. Однако, прикрепляя атрибут к типу или члену, я отбросил этот суффикс. Это одна из возможностей сокращения, встроенная разработчиками С#, и она дается нам даром. Обнаружив атрибут, прикрепленный к типу или члену, компилятор будет искать класс с именем заданного атрибута, производный от System.Att-ribute. Если класс найти не удастся, компилятор добавит к имени заданного атрибута слово Attribute и будет продолжать поиск получившегося имени. Поэтому в повседневной практике имена классов атрибутов при определении оканчиваются словом Attribute. Впоследствии эта часть имени опускается.