Attribute Класс

Определение

Представляет базовый класс для настраиваемых атрибутов.

public ref class Attribute abstract
public ref class Attribute abstract : System::Runtime::InteropServices::_Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
public abstract class Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
public abstract class Attribute : System.Runtime.InteropServices._Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Attribute : System.Runtime.InteropServices._Attribute
[<System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)>]
type Attribute = class
[<System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
type Attribute = class
    interface _Attribute
[<System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Attribute = class
    interface _Attribute
Public MustInherit Class Attribute
Public MustInherit Class Attribute
Implements _Attribute
Наследование
Attribute
Производный
Атрибуты
Реализации

Примеры

В следующем примере кода показано использование Attribute.

using namespace System;
using namespace System::Reflection;

// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum class Animal
{
    // Pets.
    Dog = 1,
    Cat, Bird
};

// A custom attribute to allow a target to have a pet.
public ref class AnimalTypeAttribute: public Attribute
{
public:

    // The constructor is called when the attribute is set.
    AnimalTypeAttribute( Animal pet )
    {
        thePet = pet;
    }


protected:

    // Keep a variable internally ...
    Animal thePet;

public:

    property Animal Pet 
    {
        // .. and show a copy to the outside world.
        Animal get()
        {
            return thePet;
        }

        void set( Animal value )
        {
            thePet = value;
        }
    }
};

// A test class where each method has its own pet.
ref class AnimalTypeTestClass
{
public:

    [AnimalType(Animal::Dog)]
    void DogMethod(){}


    [AnimalType(Animal::Cat)]
    void CatMethod(){}

    [AnimalType(Animal::Bird)]
    void BirdMethod(){}

};

int main()
{
    AnimalTypeTestClass^ testClass = gcnew AnimalTypeTestClass;
    Type^ type = testClass->GetType();

    // Iterate through all the methods of the class.
    System::Collections::IEnumerator^ myEnum = 
        type->GetMethods()->GetEnumerator();
    while ( myEnum->MoveNext() )
    {
        MethodInfo^ mInfo = safe_cast<MethodInfo^>(myEnum->Current);

        // Iterate through all the Attributes for each method.
        System::Collections::IEnumerator^ myEnum1 = 
            Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
        while ( myEnum1->MoveNext() )
        {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the AnimalType attribute.
            if ( attr->GetType() == AnimalTypeAttribute::typeid )
                Console::WriteLine( "Method {0} has a pet {1} attribute.", 
                mInfo->Name, (dynamic_cast<AnimalTypeAttribute^>(attr))->Pet );
        }
    }
}

/*
 * Output:
 * Method DogMethod has a pet Dog attribute.
 * Method CatMethod has a pet Cat attribute.
 * Method BirdMethod has a pet Bird attribute.
 */
using System;
using System.Reflection;

// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum Animal {
    // Pets.
    Dog = 1,
    Cat,
    Bird,
}

// A custom attribute to allow a target to have a pet.
public class AnimalTypeAttribute : Attribute {
    // The constructor is called when the attribute is set.
    public AnimalTypeAttribute(Animal pet) {
        thePet = pet;
    }

    // Keep a variable internally ...
    protected Animal thePet;

    // .. and show a copy to the outside world.
    public Animal Pet {
        get { return thePet; }
        set { thePet = value; }
    }
}

// A test class where each method has its own pet.
class AnimalTypeTestClass {
    [AnimalType(Animal.Dog)]
    public void DogMethod() {}

    [AnimalType(Animal.Cat)]
    public void CatMethod() {}

    [AnimalType(Animal.Bird)]
    public void BirdMethod() {}
}

class DemoClass {
    static void Main(string[] args) {
        AnimalTypeTestClass testClass = new AnimalTypeTestClass();
        Type type = testClass.GetType();
        // Iterate through all the methods of the class.
        foreach(MethodInfo mInfo in type.GetMethods()) {
            // Iterate through all the Attributes for each method.
            foreach (Attribute attr in
                Attribute.GetCustomAttributes(mInfo)) {
                // Check for the AnimalType attribute.
                if (attr.GetType() == typeof(AnimalTypeAttribute))
                    Console.WriteLine(
                        "Method {0} has a pet {1} attribute.",
                        mInfo.Name, ((AnimalTypeAttribute)attr).Pet);
            }
        }
    }
}
/*
 * Output:
 * Method DogMethod has a pet Dog attribute.
 * Method CatMethod has a pet Cat attribute.
 * Method BirdMethod has a pet Bird attribute.
 */
open System

// An enumeration of animals. Start at 1 (0 = uninitialized).
type Animal =
    | Dog = 1
    | Cat = 2
    | Bird = 3

// A custom attribute to allow a target to have a pet.
type AnimalTypeAttribute(pet) =
    inherit Attribute()
    member val Pet = pet with get, set

// A test class where each method has its own pet.
type AnimalTypeTestClass() =
    [<AnimalType(Animal.Dog)>]
    member _.DogMethod() = ()

    [<AnimalType(Animal.Cat)>]
    member _.CatMethod() = ()

    [<AnimalType(Animal.Bird)>]
    member _.BirdMethod() = ()

let testClass = AnimalTypeTestClass()
let clsType = testClass.GetType()
// Iterate through all the methods of the class.
for mInfo in clsType.GetMethods() do
    // Iterate through all the Attributes for each method.
    for attr in Attribute.GetCustomAttributes mInfo do
        // Check for the AnimalType attribute.
        if attr.GetType() = typeof<AnimalTypeAttribute> then
            printfn $"Method {mInfo.Name} has a pet {(attr :?> AnimalTypeAttribute).Pet} attribute."

// Output:
//   Method DogMethod has a pet Dog attribute.
//   Method CatMethod has a pet Cat attribute.
//   Method BirdMethod has a pet Bird attribute.
Imports System.Reflection

Public Module CustomAttrVB

    ' An enumeration of animals. Start at 1 (0 = uninitialized).
    Public Enum Animal
        ' Pets
        Dog = 1
        Cat
        Bird
    End Enum

    ' Visual Basic requires the AttributeUsage be specified.
    ' A custom attribute to allow a target to have a pet.
    <AttributeUsage(AttributeTargets.Method)> _
    Public Class AnimalTypeAttribute
        Inherits Attribute

        ' The constructor is called when the attribute is set.
        Public Sub New(ByVal animal As Animal)
            Me.thePet = animal
        End Sub

        ' Keep a variable internally ...
        Protected thePet As Animal

        ' .. and show a copy to the outside world.
        Public Property Pet() As Animal
            Get
                Return thePet
            End Get
            Set(ByVal Value As Animal)
                thePet = Value
            End Set
        End Property

    End Class

    ' A test class where each method has its own pet.
    Class AnimalTypeTestClass

        <AnimalType(Animal.Dog)> _
        Public Sub DogMethod()
        End Sub

        <AnimalType(Animal.Cat)> _
        Public Sub CatMethod()
        End Sub

        <AnimalType(Animal.Bird)> _
        Public Sub BirdMethod()
        End Sub
    End Class

    ' The runtime test.
    Sub Main()
        Dim testClass As New AnimalTypeTestClass()
        Dim tcType As Type = testClass.GetType()
        Dim mInfo As MethodInfo
        ' Iterate through all the methods of the class.
        For Each mInfo In tcType.GetMethods()
            Dim attr As Attribute
            ' Iterate through all the attributes of the method.
            For Each attr In Attribute.GetCustomAttributes(mInfo)
                If TypeOf attr Is AnimalTypeAttribute Then
                    Dim attrCustom As AnimalTypeAttribute = _
                        CType(attr, AnimalTypeAttribute)
                    Console.WriteLine("Method {0} has a pet {1} attribute.", _
                         mInfo.Name(), attrCustom.Pet.ToString())
                End If
            Next
        Next
    End Sub
End Module

' Output:
' Method DogMethod has a pet Dog attribute.
' Method CatMethod has a pet Cat attribute.
' Method BirdMethod has a pet Bird attribute.

Комментарии

Класс Attribute связывает стандартные системные или нестандартные пользовательские сведения с целевым элементом. Целевой элемент может быть сборкой, классом, конструктором, делегатом, перечислением, событием, полем, интерфейсом, методом, модулем переносимого исполняемого файла, параметром, свойством, возвращаемым значением, структурой или другим аттрибутом.

Сведения, предоставленные с помощью атрибута, также называют метаданными. Метаданные могут анализироваться приложением во время выполнения для управления обработкой данных в программе либо внешними средствами до времени выполнения для управления обработкой или обслуживанием самого приложения. Например, .NET предопределяет и использует типы атрибутов для управления поведением во время выполнения, а некоторые языки программирования используют типы атрибутов для представления языковых функций, напрямую не поддерживаемых системой общих типов .NET.

Все типы атрибутов являются непосредственно или косвенно производными от класса Attribute. Атрибуты могут применяться к любому целевому элементу; несколько атрибутов могут применяться к одному и тому же целевому элементу; также атрибуты могут наследоваться элементами, производными от целевого элемента. Используйте класс AttributeTargets для указания целевого элемента, к которому применяется атрибут.

Класс Attribute предоставляет удобные методы для извлечения и проверки настраиваемых атрибутов. Дополнительные сведения об использовании атрибутов см. в разделах Применение атрибутов и Атрибуты.

Конструкторы

Attribute()

Инициализирует новый экземпляр класса Attribute.

Свойства

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

GetCustomAttribute(Assembly, Type)

Извлекает настраиваемый атрибут, примененный к заданной сборке. Параметры определяют сборку и тип настраиваемого атрибута для поиска.

GetCustomAttribute(Assembly, Type, Boolean)

Извлекает настраиваемый атрибут, примененный к сборке. Параметры определяют сборку, тип настраиваемого атрибута для поиска и игнорированный параметр поиска.

GetCustomAttribute(MemberInfo, Type)

Извлекает настраиваемый атрибут, примененный к члену типа. Параметры определяют член и тип настраиваемого атрибута для поиска.

GetCustomAttribute(MemberInfo, Type, Boolean)

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

GetCustomAttribute(Module, Type)

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

GetCustomAttribute(Module, Type, Boolean)

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

GetCustomAttribute(ParameterInfo, Type)

Извлекает настраиваемый атрибут, примененный к параметру метода. Параметры определяют параметр метода и тип настраиваемого атрибута для поиска.

GetCustomAttribute(ParameterInfo, Type, Boolean)

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

GetCustomAttributes(Assembly)

Извлекает массив настраиваемых атрибутов, примененных к сборке. Параметр указывает сборку.

GetCustomAttributes(Assembly, Boolean)

Извлекает массив настраиваемых атрибутов, примененных к сборке. Параметры задают сборку и игнорируемый параметр поиска.

GetCustomAttributes(Assembly, Type)

Извлекает массив настраиваемых атрибутов, примененных к сборке. Параметры определяют сборку и тип настраиваемого атрибута для поиска.

GetCustomAttributes(Assembly, Type, Boolean)

Извлекает массив настраиваемых атрибутов, примененных к сборке. Параметры определяют сборку, тип настраиваемого атрибута для поиска и игнорированный параметр поиска.

GetCustomAttributes(MemberInfo)

Извлекает массив настраиваемых атрибутов, примененных к члену типа. Параметр задает имя этого члена.

GetCustomAttributes(MemberInfo, Boolean)

Извлекает массив настраиваемых атрибутов, примененных к члену типа. Параметры определяют член и тип настраиваемого атрибута для поиска и признак поиска родительского элемента члена.

GetCustomAttributes(MemberInfo, Type)

Извлекает массив настраиваемых атрибутов, примененных к члену типа. Параметры определяют член и тип настраиваемого атрибута для поиска.

GetCustomAttributes(MemberInfo, Type, Boolean)

Извлекает массив настраиваемых атрибутов, примененных к члену типа. Параметры определяют член и тип настраиваемого атрибута для поиска и признак поиска родительского элемента члена.

GetCustomAttributes(Module)

Извлекает массив настраиваемых атрибутов, примененных к модулю. Параметр задает имя этого модуля.

GetCustomAttributes(Module, Boolean)

Извлекает массив настраиваемых атрибутов, примененных к модулю. Параметры задают модуль и игнорируемый параметр поиска.

GetCustomAttributes(Module, Type)

Извлекает массив настраиваемых атрибутов, примененных к модулю. Параметры определяют модуль и тип настраиваемого атрибута для поиска.

GetCustomAttributes(Module, Type, Boolean)

Извлекает массив настраиваемых атрибутов, примененных к модулю. Параметры определяют модуль, тип настраиваемого атрибута для поиска и игнорированный параметр поиска.

GetCustomAttributes(ParameterInfo)

Извлекает массив настраиваемых атрибутов, примененных к параметру метода. В параметре задается параметр метода.

GetCustomAttributes(ParameterInfo, Boolean)

Извлекает массив настраиваемых атрибутов, примененных к параметру метода. Параметры определяют параметр метода и признак поиска родительского элемента параметра метода.

GetCustomAttributes(ParameterInfo, Type)

Извлекает массив настраиваемых атрибутов, примененных к параметру метода. Параметры определяют параметр метода и тип настраиваемого атрибута для поиска.

GetCustomAttributes(ParameterInfo, Type, Boolean)

Извлекает массив настраиваемых атрибутов, примененных к параметру метода. Параметры определяют параметр метода и тип настраиваемого атрибута для поиска и признак поиска родительского элемента параметра метода.

GetHashCode()

Возвращает хэш-код данного экземпляра.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.

IsDefined(Assembly, Type)

Определяет, применены ли какие-либо настраиваемые атрибуты к сборке. Параметры определяют сборку и тип настраиваемого атрибута для поиска.

IsDefined(Assembly, Type, Boolean)

Определяет, применены ли какие-либо настраиваемые атрибуты к сборке. Параметры определяют сборку, тип настраиваемого атрибута для поиска и игнорированный параметр поиска.

IsDefined(MemberInfo, Type)

Определяет, применены ли какие-либо настраиваемые атрибуты к члену типа. Параметры определяют член и тип настраиваемого атрибута для поиска.

IsDefined(MemberInfo, Type, Boolean)

Определяет, применены ли какие-либо настраиваемые атрибуты к члену типа. Параметры определяют член и тип настраиваемого атрибута для поиска и признак поиска родительского элемента члена.

IsDefined(Module, Type)

Определяет применены ли какие-либо пользовательские атрибуты заданного типа к модулю. Параметры определяют модуль и тип настраиваемого атрибута для поиска.

IsDefined(Module, Type, Boolean)

Определяет, применены ли какие-либо настраиваемые атрибуты к модулю. Параметры определяют модуль, тип настраиваемого атрибута для поиска и игнорированный параметр поиска.

IsDefined(ParameterInfo, Type)

Определяет, применены ли какие-либо настраиваемые атрибуты к параметру метода. Параметры определяют параметр метода и тип настраиваемого атрибута для поиска.

IsDefined(ParameterInfo, Type, Boolean)

Определяет, применены ли какие-либо настраиваемые атрибуты к параметру метода. Параметры определяют параметр метода и тип настраиваемого атрибута для поиска и признак поиска родительского элемента параметра метода.

Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

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

_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

Применяется к

Потокобезопасность

Данный тип потокобезопасен.

См. также раздел