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
继承
Attribute
派生
属性
实现

示例

下面的代码示例演示了 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.
 */

注解

Attribute 类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。 目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性、返回值、结构或其他属性。

属性提供的信息也称为元数据。 应用程序可以在运行时检查元数据,以控制程序处理数据的方式,或者外部工具在运行时之前控制应用程序本身的处理和维护方式。 例如,.NET 预定义并使用属性类型来控制运行时行为,一些编程语言使用属性类型来表示 .NET 通用类型系统不直接支持的语言功能。

所有属性类型直接或间接派生自 Attribute 类。 属性可以应用于任何目标元素;多个属性可以应用于同一目标元素;属性可由派生自目标元素的元素继承。 使用 AttributeTargets 类指定应用属性的目标元素。

Attribute 类提供了用于检索和测试自定义属性的便捷方法。 有关使用属性的详细信息,请参阅 应用属性属性

构造函数

Attribute()

初始化 Attribute 类的新实例。

属性

TypeId

在派生类中实现时,获取此 Attribute的唯一标识符。

方法

Equals(Object)

返回一个值,该值指示此实例是否等于指定对象。

GetCustomAttribute(Assembly, Type, Boolean)

检索应用于程序集的自定义属性。 参数指定要搜索的程序集、要搜索的自定义属性的类型和忽略的搜索选项。

GetCustomAttribute(Assembly, Type)

检索应用于指定程序集的自定义属性。 参数指定要搜索的程序集和自定义属性的类型。

GetCustomAttribute(MemberInfo, Type, Boolean)

检索应用于类型成员的自定义属性。 参数指定要搜索的成员、要搜索的自定义属性的类型以及是否搜索成员的上级。

GetCustomAttribute(MemberInfo, Type)

检索应用于类型成员的自定义属性。 参数指定要搜索的成员和自定义属性的类型。

GetCustomAttribute(Module, Type, Boolean)

检索应用于模块的自定义属性。 参数指定要搜索的模块、要搜索的自定义属性的类型和忽略的搜索选项。

GetCustomAttribute(Module, Type)

检索应用于模块的自定义属性。 参数指定要搜索的模块和自定义属性的类型。

GetCustomAttribute(ParameterInfo, Type, Boolean)

检索应用于方法参数的自定义属性。 参数指定要搜索的方法参数、要搜索的自定义属性的类型,以及是否搜索方法参数的上级。

GetCustomAttribute(ParameterInfo, Type)

检索应用于方法参数的自定义属性。 参数指定要搜索的方法参数和自定义属性的类型。

GetCustomAttributes(Assembly, Boolean)

检索应用于程序集的自定义特性的数组。 参数指定程序集和忽略的搜索选项。

GetCustomAttributes(Assembly, Type, Boolean)

检索应用于程序集的自定义特性的数组。 参数指定要搜索的程序集、要搜索的自定义属性的类型和忽略的搜索选项。

GetCustomAttributes(Assembly, Type)

检索应用于程序集的自定义特性的数组。 参数指定要搜索的程序集和自定义属性的类型。

GetCustomAttributes(Assembly)

检索应用于程序集的自定义特性的数组。 参数指定程序集。

GetCustomAttributes(MemberInfo, Boolean)

检索应用于类型成员的自定义属性的数组。 参数指定要搜索的成员、要搜索的自定义属性的类型以及是否搜索成员的上级。

GetCustomAttributes(MemberInfo, Type, Boolean)

检索应用于类型成员的自定义属性的数组。 参数指定要搜索的成员、要搜索的自定义属性的类型以及是否搜索成员的上级。

GetCustomAttributes(MemberInfo, Type)

检索应用于类型成员的自定义属性的数组。 参数指定要搜索的成员和自定义属性的类型。

GetCustomAttributes(MemberInfo)

检索应用于类型成员的自定义属性的数组。 参数指定成员。

GetCustomAttributes(Module, Boolean)

检索应用于模块的自定义属性的数组。 参数指定模块和忽略的搜索选项。

GetCustomAttributes(Module, Type, Boolean)

检索应用于模块的自定义属性的数组。 参数指定要搜索的模块、要搜索的自定义属性的类型和忽略的搜索选项。

GetCustomAttributes(Module, Type)

检索应用于模块的自定义属性的数组。 参数指定要搜索的模块和自定义属性的类型。

GetCustomAttributes(Module)

检索应用于模块的自定义属性的数组。 参数指定模块。

GetCustomAttributes(ParameterInfo, Boolean)

检索应用于方法参数的自定义特性的数组。 参数指定方法参数,以及是否搜索方法参数的上级。

GetCustomAttributes(ParameterInfo, Type, Boolean)

检索应用于方法参数的自定义特性的数组。 参数指定要搜索的方法参数、要搜索的自定义属性的类型,以及是否搜索方法参数的上级。

GetCustomAttributes(ParameterInfo, Type)

检索应用于方法参数的自定义特性的数组。 参数指定要搜索的方法参数和自定义属性的类型。

GetCustomAttributes(ParameterInfo)

检索应用于方法参数的自定义特性的数组。 参数指定方法参数。

GetHashCode()

返回此实例的哈希代码。

GetType()

获取当前实例的 Type

(继承自 Object)
IsDefaultAttribute()

在派生类中重写时,指示此实例的值是否为派生类的默认值。

IsDefined(Assembly, Type, Boolean)

确定是否将任何自定义属性应用于程序集。 参数指定要搜索的程序集、要搜索的自定义属性的类型和忽略的搜索选项。

IsDefined(Assembly, Type)

确定是否将任何自定义属性应用于程序集。 参数指定要搜索的程序集和自定义属性的类型。

IsDefined(MemberInfo, Type, Boolean)

确定是否将任何自定义属性应用于类型的成员。 参数指定要搜索的成员、要搜索的自定义属性的类型以及是否搜索成员的上级。

IsDefined(MemberInfo, Type)

确定是否将任何自定义属性应用于类型的成员。 参数指定要搜索的成员和自定义属性的类型。

IsDefined(Module, Type, Boolean)

确定是否将任何自定义属性应用于模块。 参数指定要搜索的模块、要搜索的自定义属性的类型和忽略的搜索选项。

IsDefined(Module, Type)

确定指定类型的任何自定义属性是否应用于模块。 参数指定要搜索的模块和自定义属性的类型。

IsDefined(ParameterInfo, Type, Boolean)

确定是否将任何自定义属性应用于方法参数。 参数指定要搜索的方法参数、要搜索的自定义属性的类型,以及是否搜索方法参数的上级。

IsDefined(ParameterInfo, Type)

确定是否将任何自定义属性应用于方法参数。 参数指定要搜索的方法参数和自定义属性的类型。

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)

提供对对象公开的属性和方法的访问。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

线程安全性

此类型是线程安全的。

另请参阅