assembly Атрибут относится ко всей сборке
field Атрибут относится к полю
event Атрибут относится к событию
method Атрибут относится к методу
рагаm Атрибут относится к параметрам метода
property Атрибут относится к свойству
return Атрибут относится к возвращаемому значению
type Атрибут относится к классу или структуре
Пусть, например, перед методом описан гипотетический атрибут ABC:
[ABC]
public void Do() {... }
По умолчанию он относится к методу. Чтобы указать, что атрибут относится не к методу, а к его возвращаемому значению, следует написать:
[return:ABC]
public void Do() {... }
Атрибут может иметь параметры. Они записываются в круглых скобках через запятую после имени атрибута и бывают позиционными и именованными. Именованный параметр указывается в форме имя = значение, для позиционного просто задается значение. Например, для использованного в следующем фрагменте кода атрибута CLSCompliant задан позиционный параметр true. Атрибуты, относящиеся к сборке, должны располагаться непосредственно после директив using, например:
|
|
using System;
[assembly:CLSCompliant(true)] namespace ConsoleApplication1 {...
Атрибут [CLSCompliant] определяет, удовлетворяет программный код соглашениям CLS (Common Language Specification) или нет.
Стандартные атрибуты, как и другие типы классов, имеют набор конструкторов, которые определяют, каким образом использовать (специфицировать) атрибут. Фактически, при использовании атрибута указывается наиболее подходящий конструктор, а величины, не указанные в конструкторе, задаются через именованные параметры в конце списка параметров.
Стандартный атрибут [STAThread], старательно удаленный из всех листингов в этой книге, относится к методу, перед которым он записан. Он имеет значение только для приложений, использующих модель СОМ, и задает модель потоков в рамках модели СОМ. Пример применения еще одного стандартного атрибута, [Conditional], приведен далее в разделе «Директивы препроцессора».
Атрибуты уровня сборки хранятся в файле AssemblyInfo.cs, автоматически создаваемом средой для любого проекта. Для явного задания номера версии сборки можно записать атрибут [AssemblyVersion], например:
[assembly; AssemblyVersion("1.0.0.0")]
Создание пользовательских атрибутов выходит за рамки темы этого учебника. Интересующиеся могут обратиться к книге [27].