Поделиться через


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

Обновлен: Ноябрь 2007

Используйте следующую процедуру для применения атрибутов к элементам собственного кода.

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

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

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

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

    Позиционные параметры являются обязательными и должны задаваться до всех именованных параметров. Они соответствуют параметрам одного из конструкторов атрибута. Именованные параметры являются необязательными и соответствуют свойствам атрибута. В 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". Этот атрибут вызывает предупреждение компилятора, в котором отображается переданная строка при вызове кода, описываемого данным атрибутом.

using System;
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
{
    static void Main()
    {
        // This generates a compile-time warning.
        int i = Example.Add(2, 2);
    }
}
using namespace System;
public ref class Example
{
public:
    // Specify attributes between square brackets in C++.
    // This attribute is applied only to the Add method.
    [Obsolete("Will be removed in next version ")]
    static int Add(int a, int b)
    {
        return (a + b);
    }
};
void main()
{
    // This generates a compile-time warning.
    int i = Example::Add(2, 2);
    return;
}
Imports System 
Public Class Example
    ' Specify attributes between angle brackets in Visual Basic,
    ' and keep them on the same logical line.
    ' This attribute is applied only to the Add method.
    <Obsolete("Will be removed in next version ")> _
    Public Shared Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
        Return a + b
    End Function
End Class
Module Test
    Sub Main()
        ' This generates a compile-time warning.
        Dim i As Integer = Example.Add(2, 2)
    End Sub
End Module
import System.*;
public class Example
{
    // Specify attributes with comment syntax in J#.
    // This attribute is applied only to the Add method.
    /** @attribute 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 MyInt = Example.Add(2,2); 
    }
}

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

Если атрибут нужно применять на уровне сборки, используйте ключевое слово Assembly. В следующем коде показан атрибут AssemblyNameAttribute, применяемый на уровне сборки.

using System.Reflection;
[assembly:AssemblyName("MyAssembly")]
using namespace System::Reflection;
[assembly:AssemblyName("MyAssembly")]
Imports System.Reflection
<Assembly:AssemblyName("MyAssembly")> 
import System.Reflection.*;
/** @assembly AssemblyName("MyAssembly") */

При применении этого атрибута строка "MyAssembly" помещается в манифест сборки в разделе метаданных файла. Атрибут можно просмотреть с помощью дизассемблера MSIL (Ildasm.exe) или путем создания пользовательской программы, извлекающей атрибут.

См. также

Основные понятия

Извлечение информации, сохраненной в атрибуте

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

Ссылки

Использование атрибутов (Руководство по программированию на C#)

Attaching Attributes

Другие ресурсы

Расширение метаданных с помощью атрибутов

Attributed Programming Concepts