Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

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

Применение встроенных атрибутов 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 {
 // …
}

Оглавление книги


Генерация: 1.485. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз