Attribute 类

定义

表示自定义特性的基类。Represents the base class for custom attributes.

public ref class Attribute abstract : System::Runtime::InteropServices::_Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public abstract class Attribute : System.Runtime.InteropServices._Attribute
type Attribute = class
    interface _Attribute
Public MustInherit Class Attribute
Implements _Attribute
继承
Attribute
派生
属性
实现

示例

下面的代码示例演示 @no__t 的用法。The following code example demonstrates the usage of 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.
 */
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.

注解

@No__t 0 类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。The Attribute class associates predefined system information or user-defined custom information with a target element. 目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性、返回值、结构或其他属性。A target element can be an assembly, class, constructor, delegate, enum, event, field, interface, method, portable executable file module, parameter, property, return value, struct, or another attribute.

特性提供的信息也称为 "元数据"。Information provided by an attribute is also known as metadata. 您的应用程序可以在运行时查看元数据,以控制程序处理数据的方式,或在运行之前由外部工具控制以控制您的应用程序本身的处理方式。Metadata can be examined at run time by your application to control how your program processes data, or before run time by external tools to control how your application itself is processed or maintained. 例如,.NET Framework 预定义,并使用属性类型来控制运行时行为,某些编程语言使用属性类型来表示 .NET Framework 通用类型系统不直接支持的语言功能。For example, the .NET Framework predefines and uses attribute types to control run-time behavior, and some programming languages use attribute types to represent language features not directly supported by the .NET Framework common type system.

所有属性类型都直接或间接从 @no__t 0 类派生。All attribute types derive directly or indirectly from the Attribute class. 特性可应用于任何目标元素;可以将多个属性应用于同一目标元素;和属性可由派生自目标元素的元素继承。Attributes can be applied to any target element; multiple attributes can be applied to the same target element; and attributes can be inherited by an element derived from a target element. 使用 AttributeTargets 类指定应用该属性的目标元素。Use the AttributeTargets class to specify the target element to which the attribute is applied.

@No__t-0 类提供方便的方法来检索和测试自定义属性。The Attribute class provides convenient methods to retrieve and test custom attributes. 有关使用特性的详细信息,请参阅应用特性特性For more information about using attributes, see Applying Attributes and Attributes.

构造函数

Attribute()

初始化 Attribute 类的新实例。Initializes a new instance of the Attribute class.

属性

TypeId

在派生类中实现时,获取此 Attribute 的唯一标识符。When implemented in a derived class, gets a unique identifier for this Attribute.

方法

Equals(Object)

返回一个值,该值指示此实例是否与指定的对象相等。Returns a value that indicates whether this instance is equal to a specified object.

GetCustomAttribute(Assembly, Type)

检索应用于指定程序集的自定义属性。Retrieves a custom attribute applied to a specified assembly. 参数指定程序集和要搜索的自定义属性的类型。Parameters specify the assembly and the type of the custom attribute to search for.

GetCustomAttribute(Assembly, Type, Boolean)

检索应用于程序集的自定义属性。Retrieves a custom attribute applied to an assembly. 参数指定程序集、要搜索的自定义属性的类型以及忽略的搜索选项。Parameters specify the assembly, the type of the custom attribute to search for, and an ignored search option.

GetCustomAttribute(MemberInfo, Type)

检索应用于类型成员的自定义属性。Retrieves a custom attribute applied to a member of a type. 参数指定成员和要搜索的自定义属性的类型。Parameters specify the member, and the type of the custom attribute to search for.

GetCustomAttribute(MemberInfo, Type, Boolean)

检索应用于类型成员的自定义属性。Retrieves a custom attribute applied to a member of a type. 参数指定成员、要搜索的自定义属性的类型以及是否搜索成员的祖先。Parameters specify the member, the type of the custom attribute to search for, and whether to search ancestors of the member.

GetCustomAttribute(Module, Type)

检索应用于模块的自定义属性。Retrieves a custom attribute applied to a module. 参数指定模块和要搜索的自定义属性的类型。Parameters specify the module, and the type of the custom attribute to search for.

GetCustomAttribute(Module, Type, Boolean)

检索应用于模块的自定义属性。Retrieves a custom attribute applied to a module. 参数指定模块、要搜索的自定义属性的类型以及忽略的搜索选项。Parameters specify the module, the type of the custom attribute to search for, and an ignored search option.

GetCustomAttribute(ParameterInfo, Type)

检索应用于方法参数的自定义属性。Retrieves a custom attribute applied to a method parameter. 参数指定方法参数和要搜索的自定义属性的类型。Parameters specify the method parameter, and the type of the custom attribute to search for.

GetCustomAttribute(ParameterInfo, Type, Boolean)

检索应用于方法参数的自定义属性。Retrieves a custom attribute applied to a method parameter. 参数指定方法参数、要搜索的自定义属性的类型以及是否搜索方法参数的祖先。Parameters specify the method parameter, the type of the custom attribute to search for, and whether to search ancestors of the method parameter.

GetCustomAttributes(Assembly)

检索一个数组,它由应用于程序集的自定义属性组成。Retrieves an array of the custom attributes applied to an assembly. 参数指定程序集。A parameter specifies the assembly.

GetCustomAttributes(Assembly, Boolean)

检索一个数组,它由应用于程序集的自定义属性组成。Retrieves an array of the custom attributes applied to an assembly. 参数指定程序集及忽略的搜索选项。Parameters specify the assembly, and an ignored search option.

GetCustomAttributes(Assembly, Type)

检索一个数组,它由应用于程序集的自定义属性组成。Retrieves an array of the custom attributes applied to an assembly. 参数指定程序集和要搜索的自定义属性的类型。Parameters specify the assembly, and the type of the custom attribute to search for.

GetCustomAttributes(Assembly, Type, Boolean)

检索一个数组,它由应用于程序集的自定义属性组成。Retrieves an array of the custom attributes applied to an assembly. 参数指定程序集、要搜索的自定义属性的类型以及忽略的搜索选项。Parameters specify the assembly, the type of the custom attribute to search for, and an ignored search option.

GetCustomAttributes(MemberInfo)

检索应用于类型的成员的自定义属性的数组。Retrieves an array of the custom attributes applied to a member of a type. 参数指定成员。A parameter specifies the member.

GetCustomAttributes(MemberInfo, Boolean)

检索应用于类型的成员的自定义属性的数组。Retrieves an array of the custom attributes applied to a member of a type. 参数指定成员、要搜索的自定义属性的类型以及是否搜索成员的祖先。Parameters specify the member, the type of the custom attribute to search for, and whether to search ancestors of the member.

GetCustomAttributes(MemberInfo, Type)

检索应用于类型的成员的自定义属性的数组。Retrieves an array of the custom attributes applied to a member of a type. 参数指定成员和要搜索的自定义属性的类型。Parameters specify the member, and the type of the custom attribute to search for.

GetCustomAttributes(MemberInfo, Type, Boolean)

检索应用于类型的成员的自定义属性的数组。Retrieves an array of the custom attributes applied to a member of a type. 参数指定成员、要搜索的自定义属性的类型以及是否搜索成员的祖先。Parameters specify the member, the type of the custom attribute to search for, and whether to search ancestors of the member.

GetCustomAttributes(Module)

检索应用于模块的自定义属性的数组。Retrieves an array of the custom attributes applied to a module. 参数指定模块。A parameter specifies the module.

GetCustomAttributes(Module, Boolean)

检索应用于模块的自定义属性的数组。Retrieves an array of the custom attributes applied to a module. 参数指定模块及忽略的搜索选项。Parameters specify the module, and an ignored search option.

GetCustomAttributes(Module, Type)

检索应用于模块的自定义属性的数组。Retrieves an array of the custom attributes applied to a module. 参数指定模块和要搜索的自定义属性的类型。Parameters specify the module, and the type of the custom attribute to search for.

GetCustomAttributes(Module, Type, Boolean)

检索应用于模块的自定义属性的数组。Retrieves an array of the custom attributes applied to a module. 参数指定模块、要搜索的自定义属性的类型以及忽略的搜索选项。Parameters specify the module, the type of the custom attribute to search for, and an ignored search option.

GetCustomAttributes(ParameterInfo)

检索应用于方法参数的自定义属性的数组。Retrieves an array of the custom attributes applied to a method parameter. 参数指定方法参数。A parameter specifies the method parameter.

GetCustomAttributes(ParameterInfo, Boolean)

检索应用于方法参数的自定义属性的数组。Retrieves an array of the custom attributes applied to a method parameter. 参数指定方法参数以及是否搜索方法参数的祖先。Parameters specify the method parameter, and whether to search ancestors of the method parameter.

GetCustomAttributes(ParameterInfo, Type)

检索应用于方法参数的自定义属性的数组。Retrieves an array of the custom attributes applied to a method parameter. 参数指定方法参数和要搜索的自定义属性的类型。Parameters specify the method parameter, and the type of the custom attribute to search for.

GetCustomAttributes(ParameterInfo, Type, Boolean)

检索应用于方法参数的自定义属性的数组。Retrieves an array of the custom attributes applied to a method parameter. 参数指定方法参数、要搜索的自定义属性的类型以及是否搜索方法参数的祖先。Parameters specify the method parameter, the type of the custom attribute to search for, and whether to search ancestors of the method parameter.

GetHashCode()

返回此实例的哈希代码。Returns the hash code for this instance.

GetType()

获取当前实例的 TypeGets the Type of the current instance.

(继承自 Object)
IsDefaultAttribute()

在派生类中重写时,指示此实例的值是否是派生类的默认值。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

IsDefined(Assembly, Type)

确定是否将任意自定义属性应用于程序集。Determines whether any custom attributes are applied to an assembly. 参数指定程序集和要搜索的自定义属性的类型。Parameters specify the assembly, and the type of the custom attribute to search for.

IsDefined(Assembly, Type, Boolean)

确定是否将任意自定义属性应用于程序集。Determines whether any custom attributes are applied to an assembly. 参数指定程序集、要搜索的自定义属性的类型以及忽略的搜索选项。Parameters specify the assembly, the type of the custom attribute to search for, and an ignored search option.

IsDefined(MemberInfo, Type)

确定是否将任意自定义属性应用于类型成员。Determines whether any custom attributes are applied to a member of a type. 参数指定成员和要搜索的自定义属性的类型。Parameters specify the member, and the type of the custom attribute to search for.

IsDefined(MemberInfo, Type, Boolean)

确定是否将任意自定义属性应用于类型成员。Determines whether any custom attributes are applied to a member of a type. 参数指定成员、要搜索的自定义属性的类型以及是否搜索成员的祖先。Parameters specify the member, the type of the custom attribute to search for, and whether to search ancestors of the member.

IsDefined(Module, Type)

确定是否将指定类型的任何自定义属性应用于模块。Determines whether any custom attributes of a specified type are applied to a module. 参数指定模块和要搜索的自定义属性的类型。Parameters specify the module, and the type of the custom attribute to search for.

IsDefined(Module, Type, Boolean)

确定是否将任意自定义属性应用于模块。Determines whether any custom attributes are applied to a module. 参数指定模块、要搜索的自定义属性的类型以及忽略的搜索选项。Parameters specify the module, the type of the custom attribute to search for, and an ignored search option.

IsDefined(ParameterInfo, Type)

确定是否将任意自定义属性应用于方法参数。Determines whether any custom attributes are applied to a method parameter. 参数指定方法参数和要搜索的自定义属性的类型。Parameters specify the method parameter, and the type of the custom attribute to search for.

IsDefined(ParameterInfo, Type, Boolean)

确定是否将任意自定义属性应用于方法参数。Determines whether any custom attributes are applied to a method parameter. 参数指定方法参数、要搜索的自定义属性的类型以及是否搜索方法参数的祖先。Parameters specify the method parameter, the type of the custom attribute to search for, and whether to search ancestors of the method parameter.

Match(Object)

当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

MemberwiseClone()

创建当前 Object 的浅表副本。Creates a shallow copy of the current Object.

(继承自 Object)
ToString()

返回一个表示当前对象的 string。Returns a string that represents the current object.

(继承自 Object)

显式界面实现

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

将一组名称映射为对应的一组调度标识符。Maps a set of names to a corresponding set of dispatch identifiers.

_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

检索对象的类型信息,然后可以使用该信息获取接口的类型信息。Retrieves the type information for an object, which can be used to get the type information for an interface.

_Attribute.GetTypeInfoCount(UInt32)

检索对象提供的类型信息接口的数量(0 或 1)。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

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

提供对某一对象公开的属性和方法的访问。Provides access to properties and methods exposed by an object.

适用于

线程安全性

此类型是线程安全的。This type is thread safe.

另请参阅