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