Применение атрибутов
Используйте следующую процедуру для применения атрибутов к элементам собственного кода.
Определите новый атрибут или используйте существующий, импортировав его пространство имен из .NET Framework.
Примените этот атрибут к элементу кода, поместив его непосредственно перед элементом.
Каждый язык имеет свой собственный синтаксис атрибутов. В C++ и C# атрибут заключается в квадратные скобки и отделяется от элемента пробелами, которые могут содержать разрыв строки. В Visual Basic атрибут заключается в угловые скобки и должен находиться на той же логической строке. При необходимости вставки разрыва строки может использоваться символ продолжения строки. В J# атрибут присоединяется с помощью специального синтаксиса комментариев.
Укажите позиционные и именованные параметры атрибута.
Позиционные параметры являются обязательными и должны задаваться до всех именованных параметров. Они соответствуют параметрам одного из конструкторов атрибута. Именованные параметры являются необязательными и соответствуют свойствам атрибута. В C++, C# и J# укажите name=value для каждого необязательного параметра, где name — это имя свойства. В Visual Basic укажите name:=value.
При компиляции кода выполняется добавление атрибута в метаданные. Добавленный атрибут становится доступным среде CLR и любому пользовательскому инструменту или приложению через службы отражения среды выполнения.
По соглашению все имена атрибутов заканчиваются словом Attribute. Однако в некоторых языках, исполняемых в среде выполнения, например Visual Basic и C#, не требуется указание полного имени атрибута. Например, если требуется инициализировать System.ObsoleteAttribute, то можно ссылаться на него как на Obsolete.
Применение атрибута к методу
В следующем примере кода показано объявление System.ObsoleteAttribute, помечающего код как устаревший. Атрибуту передается строка "Will be removed in next version". Этот атрибут вызывает предупреждение компилятора, в котором отображается переданная строка при вызове кода, описываемого данным атрибутом.
Public Class Example
' Specify attributes between square brackets in C#.
' This attribute is applied only to the Add method.
<Obsolete("Will be removed in next version.")>
Public Shared Function Add(a As Integer, b As Integer) As Integer
Return a + b
End Function
End Class
Class Test
Public Shared Sub Main()
' This generates a compile-time warning.
Dim i As Integer = Example.Add(2, 2)
End Sub
End Class
public class Example
{
// Specify attributes between square brackets in C#.
// This attribute is applied only to the Add method.
[Obsolete("Will be removed in next version.")]
public static int Add(int a, int b)
{
return (a + b);
}
}
class Test
{
public static void Main()
{
// This generates a compile-time warning.
int i = Example.Add(2, 2);
}
}
public ref class Example
{
// Specify attributes between square brackets in C#.
// This attribute is applied only to the Add method.
public:
[Obsolete("Will be removed in next version.")]
static int Add(int a, int b)
{
return (a + b);
}
};
ref class Test
{
public:
static void Main()
{
// This generates a compile-time warning.
int i = Example::Add(2, 2);
}
};
int main()
{
Test::Main();
}
Применение атрибутов на уровне сборки
Если атрибут нужно применять на уровне сборки, используйте ключевое слово Assembly. В следующем коде показан атрибут AssemblyNameAttribute, применяемый на уровне сборки.
Imports System.Reflection
<Assembly:AssemblyTitle("My Assembly")>
using System.Reflection;
[assembly:AssemblyTitle("My Assembly")]
using namespace System::Reflection;
[assembly:AssemblyTitle("My Assembly")];
При применении этого атрибута строка "MyAssembly" помещается в манифест сборки в разделе метаданных файла. Атрибут можно просмотреть с помощью дизассемблера MSIL (Ildasm.exe) или путем создания пользовательской программы, извлекающей атрибут.
См. также
Ссылки
Основные понятия
Расширение метаданных с помощью атрибутов
Извлечение информации, сохраненной в атрибуте