Sdílet prostřednictvím


Attribute Třída

Definice

Představuje základní třídu pro vlastní atributy.

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
Dědičnost
Attribute
Odvozené
Atributy
Implementuje

Příklady

Následující příklad kódu ukazuje použití 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.

Poznámky

Třída Attribute přidruží předdefinované systémové informace nebo uživatelem definované vlastní informace k cílovému prvku. Cílovým prvkem může být sestavení, třída, konstruktor, delegát, výčet, událost, pole, rozhraní, metoda, přenosný spustitelný soubor modul, parametr, vlastnost, návratová hodnota, struktura nebo jiný atribut.

Informace poskytované atributem se také označují jako metadata. Metadata může vaše aplikace prozkoumat za běhu a řídit, jak program zpracovává data, nebo před spuštěním externími nástroji, které řídí způsob zpracování nebo údržby aplikace. Například předdefinované rozhraní .NET a používá typy atributů k řízení chování za běhu a některé programovací jazyky používají typy atributů k reprezentaci jazykových funkcí, které nejsou přímo podporovány běžným typem systému .NET.

Všechny typy atributů jsou odvozeny přímo nebo nepřímo z Attribute třídy. Atributy lze použít na libovolný cílový prvek; více atributů lze použít na stejný cílový prvek; a atributy mohou být zděděny elementem odvozeným z cílového elementu. Pomocí třídy AttributeTargets zadejte cílový prvek, na který je atribut použit.

Třída Attribute poskytuje pohodlné metody pro načtení a testování vlastních atributů. Další informace o používání atributů naleznete v tématu Použití atributů a atributy .

Konstruktory

Attribute()

Inicializuje novou instanci Attribute třídy.

Vlastnosti

TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute.

Metody

Equals(Object)

Vrátí hodnotu, která určuje, zda je tato instance rovna zadanému objektu.

GetCustomAttribute(Assembly, Type)

Načte vlastní atribut použitý na zadané sestavení. Parametry určují sestavení a typ vlastního atributu, který se má vyhledat.

GetCustomAttribute(Assembly, Type, Boolean)

Načte vlastní atribut použitý na sestavení. Parametry určují sestavení, typ vlastního atributu, který se má vyhledat, a ignorovanou možnost hledání.

GetCustomAttribute(MemberInfo, Type)

Načte vlastní atribut použitý na člena typu. Parametry určují člena a typ vlastního atributu, který se má vyhledat.

GetCustomAttribute(MemberInfo, Type, Boolean)

Načte vlastní atribut použitý na člena typu. Parametry určují člena, typ vlastního atributu, který se má vyhledat, a zda se mají hledat nadřazené položky člena.

GetCustomAttribute(Module, Type)

Načte vlastní atribut použitý na modul. Parametry určují modul a typ vlastního atributu, který se má vyhledat.

GetCustomAttribute(Module, Type, Boolean)

Načte vlastní atribut použitý na modul. Parametry určují modul, typ vlastního atributu, který se má vyhledat, a ignorovanou možnost hledání.

GetCustomAttribute(ParameterInfo, Type)

Načte vlastní atribut použitý na parametr metody. Parametry určují parametr metody a typ vlastního atributu, který se má vyhledat.

GetCustomAttribute(ParameterInfo, Type, Boolean)

Načte vlastní atribut použitý na parametr metody. Parametry určují parametr metody, typ vlastního atributu, který se má vyhledat, a zda se mají hledat nadřazené položky parametru metody.

GetCustomAttributes(Assembly)

Načte pole vlastních atributů použitých na sestavení. Parametr určuje sestavení.

GetCustomAttributes(Assembly, Boolean)

Načte pole vlastních atributů použitých na sestavení. Parametry určují sestavení a ignorovanou možnost hledání.

GetCustomAttributes(Assembly, Type)

Načte pole vlastních atributů použitých na sestavení. Parametry určují sestavení a typ vlastního atributu, který se má vyhledat.

GetCustomAttributes(Assembly, Type, Boolean)

Načte pole vlastních atributů použitých na sestavení. Parametry určují sestavení, typ vlastního atributu, který se má vyhledat, a ignorovanou možnost hledání.

GetCustomAttributes(MemberInfo)

Načte pole vlastních atributů použitých na člena typu. Parametr určuje člena.

GetCustomAttributes(MemberInfo, Boolean)

Načte pole vlastních atributů použitých na člena typu. Parametry určují člena, typ vlastního atributu, který se má vyhledat, a zda se mají hledat nadřazené položky člena.

GetCustomAttributes(MemberInfo, Type)

Načte pole vlastních atributů použitých na člena typu. Parametry určují člena a typ vlastního atributu, který se má vyhledat.

GetCustomAttributes(MemberInfo, Type, Boolean)

Načte pole vlastních atributů použitých na člena typu. Parametry určují člena, typ vlastního atributu, který se má vyhledat, a zda se mají hledat nadřazené položky člena.

GetCustomAttributes(Module)

Načte pole vlastních atributů použitých v modulu. Parametr určuje modul.

GetCustomAttributes(Module, Boolean)

Načte pole vlastních atributů použitých v modulu. Parametry určují modul a ignorovanou možnost hledání.

GetCustomAttributes(Module, Type)

Načte pole vlastních atributů použitých v modulu. Parametry určují modul a typ vlastního atributu, který se má vyhledat.

GetCustomAttributes(Module, Type, Boolean)

Načte pole vlastních atributů použitých v modulu. Parametry určují modul, typ vlastního atributu, který se má vyhledat, a ignorovanou možnost hledání.

GetCustomAttributes(ParameterInfo)

Načte pole vlastních atributů použitých u parametru metody. Parametr určuje parametr metody.

GetCustomAttributes(ParameterInfo, Boolean)

Načte pole vlastních atributů použitých u parametru metody. Parametry určují parametr metody a zda se mají hledat předky parametru metody.

GetCustomAttributes(ParameterInfo, Type)

Načte pole vlastních atributů použitých u parametru metody. Parametry určují parametr metody a typ vlastního atributu, který se má vyhledat.

GetCustomAttributes(ParameterInfo, Type, Boolean)

Načte pole vlastních atributů použitých u parametru metody. Parametry určují parametr metody, typ vlastního atributu, který se má vyhledat, a zda se mají hledat nadřazené položky parametru metody.

GetHashCode()

Vrátí kód hash pro tuto instanci.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
IsDefaultAttribute()

Při přepsání v odvozené třídě určuje, zda hodnota této instance je výchozí hodnotou pro odvozenou třídu.

IsDefined(Assembly, Type)

Určuje, zda jsou na sestavení použity nějaké vlastní atributy. Parametry určují sestavení a typ vlastního atributu, který se má vyhledat.

IsDefined(Assembly, Type, Boolean)

Určuje, zda jsou na sestavení použity nějaké vlastní atributy. Parametry určují sestavení, typ vlastního atributu, který se má vyhledat, a ignorovanou možnost hledání.

IsDefined(MemberInfo, Type)

Určuje, zda se na člena typu použijí nějaké vlastní atributy. Parametry určují člena a typ vlastního atributu, který se má vyhledat.

IsDefined(MemberInfo, Type, Boolean)

Určuje, zda se na člena typu použijí nějaké vlastní atributy. Parametry určují člena, typ vlastního atributu, který se má vyhledat, a zda se mají hledat nadřazené položky člena.

IsDefined(Module, Type)

Určuje, zda se u modulu použijí vlastní atributy zadaného typu. Parametry určují modul a typ vlastního atributu, který se má vyhledat.

IsDefined(Module, Type, Boolean)

Určuje, jestli se na modul použijí nějaké vlastní atributy. Parametry určují modul, typ vlastního atributu, který se má vyhledat, a ignorovanou možnost hledání.

IsDefined(ParameterInfo, Type)

Určuje, zda se na parametr metody použijí nějaké vlastní atributy. Parametry určují parametr metody a typ vlastního atributu, který se má vyhledat.

IsDefined(ParameterInfo, Type, Boolean)

Určuje, zda se na parametr metody použijí nějaké vlastní atributy. Parametry určují parametr metody, typ vlastního atributu, který se má vyhledat, a zda se mají hledat nadřazené položky parametru metody.

Match(Object)

Při přepsání v odvozené třídě vrátí hodnotu, která určuje, zda se tato instance rovná zadanému objektu.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

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

Mapuje sadu názvů na odpovídající sadu identifikátorů odeslání.

_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu objektu, který lze použít k získání informací o typu pro rozhraní.

_Attribute.GetTypeInfoCount(UInt32)

Načte počet rozhraní informací o typu, která objekt poskytuje (buď 0, nebo 1).

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

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.

Platí pro

Bezpečný přístup z více vláken

Tento typ je bezpečný pro přístup z více vláken.

Viz také