Применение встроенных атрибутов C#

We use cookies. Read the Privacy and Cookie Policy

Применение встроенных атрибутов C#

Как упоминалось выше, библиотека базовых классов .NET предлагает целый ряд атрибутов из разных пространств имен. В табл. 12.3 приводится короткий список некоторых из таких атрибутов (и, конечно же, далеко не всех).

Чтобы привести пример применения атрибутов в C#, предположим, что нам нужно построить класс Motorcycle (мотоцикл), допускающий сериализацию в двоичном формате. Для этого мы должны просто добавить атрибут [Serializable] в определение класса. Если при этом какое-то поле при сериализации сохраняться не должно, то к нему можно применить атрибут [NonSerialized].

// Этот класс можно сохранить на диске.

[Serializable]

public class Motorcycle {

 // Но это поле сохраняться не должно.

 [NonSerialized]

 float weightOfCurrentPassengers;

 // Следующие поля сохраняются.

 bool hasRadioSystem;

 bool hasHeadSet;

 bool hasSissyBar;

}

Таблица 12.3. Малая часть встроенных атрибутов 

Атрибут Описание [CLSCompliant] Требует от элемента строгого соответствия правилам CLS (Common Language Specification – общеязыковые спецификации). Напомним, что соответствующие CLS-спецификациям типы гарантированно могут использоваться во всех языках программирования .NET [DllImport] Позволяет программному коду .NET вызывать библиотеки программного кода C или C++ (которые не являются управляемыми), включая API (Application Programming Interface – программный интерфейс приложения) операционной системы. Заметьте, что [DllImport] не используется при взаимодействии с программным обеспечением COM [Obsolete] Обозначает устаревший тип или член. При попытке использовать такой элемент программист получит предупреждение компилятора с соответствующим описанием ошибки [Serializable] Обозначает возможность сериализации класса или структуры [NonSerialized] Указывает, что данное поле класса или структуры не должно сохраняться в процессе сериализации [WebMethod] Обозначает доступность метода для вызова через запросы HTTP и требует от среды CLR сохранения возвращаемого значения метода в формате XML (подробности можно найти в главе 25)

Замечание. Указанный атрибут применяется только к элементу, непосредственно следующему за атрибутом. Например, единственным не сохраняемым полем класса Motorcycle будет weightOfCurrentPassengers. Остальные поля при сериализации сохраняются, поскольку весь класс аннотирован атрибутом [Serializable].

Пока что не беспокойтесь о сути самого процесса сериализации объекта (подробности этого процесса будут рассмотрены в главе 17). Обратите внимание только на то, что при использовании атрибута его имя должно заключаться в квадратные скобки.

После компиляции этого класса можете проверить его метаданные с помощью ildasm.exe. Соответствующие атрибуты будут обозначены метками serializable и notserialized (рис. 12.6).

Как вы можете догадаться сами, один элемент может иметь много атрибутов. Предположим, что у нас есть тип класса C# (HorseAndBuggy), обозначенный как serializable, но теперь он считается устаревшим.

Рис. 12.6. Отображение атрибутов в окне ildasm.exe

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

[Serializable,

Obsolete("Класс устарел, используйте другой транспорт!")]

public class HorseAndBuggy {

 // …

}

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

[Serializable]

[Obsolete("Класс устарел, используйте другой транспорт!")]

public class HorseAndBuggy {

 // …

}