Применение атрибутов

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

  1. Определите новый атрибут или используйте существующий атрибут .NET.

  2. Примените атрибут к элементу кода, поместив его непосредственно перед элементом.

    Каждый язык имеет собственный синтаксис атрибутов. В C++ и C# атрибут заключается в квадратные скобки и отделяется от элемента пробелами (к которым относится и разрыв строк). В Visual Basic атрибут заключается в угловые скобки и должен находиться на той же логической строке; если строку необходимо разбить, можно использовать символ продолжения строки.

  3. Укажите позиционные и именованные параметры атрибута.

    Позиционные параметры обязательны и должны быть указаны перед именованными параметрами; они соответствуют параметрам одного из конструкторов атрибута. Именованные параметры необязательны и соответствуют свойствам чтения и записи атрибута. В C++ и C# укажите name=value для каждого необязательного параметра, где name — это имя свойства. В Visual Basic укажите name:=value.

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

Как правило, все имена атрибутов заканчиваются словом Attribute. В то же время несколько языков, предназначенных для среды выполнения, таких как Visual Basic и C#, не требуют указывать полное имя атрибута. Например, если вам нужно инициализировать System.ObsoleteAttribute, достаточно указать имя Obsolete.

Применение атрибута к методу

В следующем примере кода показано, как использовать атрибут System.ObsoleteAttribute, помечающий код как устаревший. Строка "Will be removed in next version" передается атрибуту. Атрибут вызывает предупреждение компилятора, которое отображает переданную строку при вызове кода, описываемого этим атрибутом.

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();
}
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 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

Применение атрибутов на уровне сборки

Если необходимо применять атрибут на уровне сборки, используйте ключевое слово assembly (Assembly в Visual Basic). В следующем коде показан атрибут AssemblyTitleAttribute, применяемый на уровне сборки.

using namespace System::Reflection;
[assembly:AssemblyTitle("My Assembly")];
using System.Reflection;
[assembly:AssemblyTitle("My Assembly")]
Imports System.Reflection
<Assembly: AssemblyTitle("My Assembly")>

Если атрибут применяется, строка "My Assembly" помещается в манифест сборки в раздел метаданных файла. Для просмотра атрибута можно воспользоваться дизассемблером MSIL (Ildasm.exe) или создать пользовательскую программу для извлечения атрибута.

См. также