MemberInfo.GetCustomAttributes 方法    
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在派生类中重写时,返回应用于此成员的自定义属性。
重载
| GetCustomAttributes(Boolean) | 在派生类中重写时,返回应用于此成员的所有自定义属性的数组。 | 
| GetCustomAttributes(Type, Boolean) | 在派生类中重写时,返回应用于此成员并由 Type 标识的自定义属性的数组。 | 
GetCustomAttributes(Boolean)
- Source:
- MemberInfo.cs
- Source:
- MemberInfo.cs
- Source:
- MemberInfo.cs
- Source:
- MemberInfo.cs
在派生类中重写时,返回应用于此成员的所有自定义属性的数组。
public:
 abstract cli::array <System::Object ^> ^ GetCustomAttributes(bool inherit);public abstract object[] GetCustomAttributes(bool inherit);abstract member GetCustomAttributes : bool -> obj[]Public MustOverride Function GetCustomAttributes (inherit As Boolean) As Object()参数
- inherit
- Boolean
如果要搜索此成员的继承链以查找属性,则为 true;否则为 false。 会忽略属性和事件的此参数。
返回
一个包含应用于此成员的所有自定义属性的数组,或者在未定义任何特性时为包含零个元素的数组。
实现
例外
此成员属于加载到仅反射的上下文的类型。 请参阅如何:将程序集加载到仅反射上下文中。
无法加载自定义属性类型。
示例
以下示例定义一个自定义属性,并将该特性与 MyClass.MyMethod关联,在运行时检索该属性,并显示结果。
using System;
using System.Reflection;
// Define a custom attribute with one named parameter.
[AttributeUsage(AttributeTargets.All)]
public class MyAttribute : Attribute
{
    private string myName;
    public MyAttribute(string name)
    {
        myName = name;
    }
    public string Name
    {
        get
        {
            return myName;
        }
    }
}
// Define a class that has the custom attribute associated with one of its members.
public class MyClass1
{
    [MyAttribute("This is an example attribute.")]
    public void MyMethod(int i)
    {
        return;
    }
}
public class MemberInfo_GetCustomAttributes
{
    public static void Main()
    {
        try
        {
            // Get the type of MyClass1.
            Type myType = typeof(MyClass1);
            // Get the members associated with MyClass1.
            MemberInfo[] myMembers = myType.GetMembers();
            // Display the attributes for each of the members of MyClass1.
            for(int i = 0; i < myMembers.Length; i++)
            {
                Object[] myAttributes = myMembers[i].GetCustomAttributes(true);
                if(myAttributes.Length > 0)
                {
                    Console.WriteLine("\nThe attributes for the member {0} are: \n", myMembers[i]);
                    for(int j = 0; j < myAttributes.Length; j++)
                        Console.WriteLine("The type of the attribute is {0}.", myAttributes[j]);
                }
            }
        }
        catch(Exception e)
        {
            Console.WriteLine("An exception occurred: {0}", e.Message);
        }
    }
}
Imports System.Reflection
' Define a custom attribute with one named parameter.
<AttributeUsage(AttributeTargets.All)> Public Class MyAttribute
    Inherits Attribute
    Private myName As String
    Public Sub New(ByVal name As String)
        myName = name
    End Sub
    Public ReadOnly Property Name() As String
        Get
            Return myName
        End Get
    End Property
End Class
' Define a class that has the custom attribute associated with one of its members.
Public Class MyClass1
    <MyAttribute("This is an example attribute.")> Public Sub MyMethod(ByVal i As Integer)
        Return
    End Sub
End Class
Public Class MemberInfo_GetCustomAttributes
    Public Shared Sub Main()
        Try
            ' Get the type of MyClass1.
            Dim myType As Type = GetType(MyClass1)
            ' Get the members associated with MyClass1.
            Dim myMembers As MemberInfo() = myType.GetMembers()
            ' Display the attributes for each of the members of MyClass1.
            Dim i As Integer
            For i = 0 To myMembers.Length - 1
                Dim myAttributes As [Object]() = myMembers(i).GetCustomAttributes(False)
                If myAttributes.Length > 0 Then
                    Console.WriteLine("The attributes for the member {0} are: ", myMembers(i))
                    Dim j As Integer
                    For j = 0 To myAttributes.Length - 1
                        Console.WriteLine("The type of the attribute is: {0}", myAttributes(j))
                    Next j
                End If
            Next i
        Catch e As Exception
            Console.WriteLine("An exception occurred: {0}.", e.Message)
        End Try
    End Sub
End Class
注解
此方法忽略 inherit 属性和事件的 参数。 若要在继承链中搜索属性和事件的属性,请使用 方法的适当 Attribute.GetCustomAttributes 重载。
注意
在 .NET Framework 2.0 版中,此方法返回方法、构造函数和类型的安全属性(如果它们以新的元数据格式存储)。 使用版本 2.0 编译的程序集使用此格式。 使用早期版本的 .NET Framework编译的动态程序集和程序集使用旧的 XML 格式。 请参阅 发出声明性安全属性。
另请参阅
适用于
GetCustomAttributes(Type, Boolean)
- Source:
- MemberInfo.cs
- Source:
- MemberInfo.cs
- Source:
- MemberInfo.cs
- Source:
- MemberInfo.cs
在派生类中重写时,返回应用于此成员并由 Type 标识的自定义属性的数组。
public:
 abstract cli::array <System::Object ^> ^ GetCustomAttributes(Type ^ attributeType, bool inherit);public abstract object[] GetCustomAttributes(Type attributeType, bool inherit);abstract member GetCustomAttributes : Type * bool -> obj[]Public MustOverride Function GetCustomAttributes (attributeType As Type, inherit As Boolean) As Object()参数
- attributeType
- Type
要搜索的属性的类型。 仅返回可分配给此类型的属性。
- inherit
- Boolean
如果要搜索此成员的继承链以查找属性,则为 true;否则为 false。 会忽略属性和事件的此参数。
返回
应用于此成员的自定义属性的数组,如果未应用可分配给 attributeType 的属性,则为含零元素的数组。
实现
例外
无法加载自定义属性类型。
如果 attributeType 为 null。
此成员属于加载到仅反射的上下文的类型。 请参阅如何:将程序集加载到仅反射上下文中。
示例
以下示例定义了一个名为 BaseClass 的类,该类具有两个非继承成员:名为 的 total 线程静态字段和一个名为 MethodA不符合 CLS 的方法。  名为 的 DerivedClass 类继承自 BaseClass 并重写其 MethodA 方法。 请注意,不会对 的成员 DerivedClass应用任何属性。 该示例循环访问 的成员DerivedClass,以确定 或 属性是否已CLSCompliantAttributeThreadStaticAttribute应用于它们。 由于 inherit 是 true,因此该方法在 的 DerivedClass 继承层次结构中搜索指定的属性。 如示例输出所示, total 字段使用 ThreadStaticAttribute 属性进行修饰, MethodA 方法使用 CLSCompliantAttribute 特性进行修饰。
using System;
public class BaseClass
{
   [ThreadStatic] public int total;
   [CLSCompliant(false)] public virtual uint MethodA()
   {
      return (uint) 100;
   }
}
public class DerivedClass : BaseClass
{
   public override uint MethodA()
   {
      total++;
      return 200;
   }
}
public class Example
{
   public static void Main()
   {
      Type t = typeof(DerivedClass);
      Console.WriteLine("Members of {0}:", t.FullName);
      foreach (var m in t.GetMembers())
      {
         bool hasAttribute = false;
         Console.Write("   {0}: ", m.Name);
         if (m.GetCustomAttributes(typeof(CLSCompliantAttribute), true).Length > 0) {
            Console.Write("CLSCompliant");
            hasAttribute = true;
         }
         if (m.GetCustomAttributes(typeof(ThreadStaticAttribute), true).Length > 0) {
            Console.Write("ThreadStatic");
            hasAttribute = true;
         }
         if (!hasAttribute)
            Console.Write("No attributes");
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       Members of DerivedClass:
//          MethodA: CLSCompliant
//          ToString: No attributes
//          Equals: No attributes
//          GetHashCode: No attributes
//          typeof: No attributes
//          .ctor: No attributes
//          total: ThreadStatic
Public Class BaseClass
   <ThreadStatic> Public total As Integer
   
   <CLSCompliant(False)> Public Overridable Function MethodA() As UInt32
      Return CUInt(100)
   End Function
End Class
Public Class DerivedClass : Inherits BaseClass
   Public Overrides Function MethodA() As UInt32
      total += 1
      Return 200
   End Function
End Class
Module Example
   Public Sub Main()
      Dim t As Type = GetType(DerivedClass)
      Console.WriteLine("Members of {0}:", t.FullName)
      For Each m In t.GetMembers()
         Dim hasAttribute As Boolean = False
         Console.Write("   {0}: ", m.Name)
         If m.GetCustomAttributes(GetType(CLSCompliantAttribute), True).Length > 0 Then
            Console.Write("CLSCompliant")
            hasAttribute = True
         End If
         If m.GetCustomAttributes(GetType(ThreadStaticAttribute), True).Length > 0 Then
            Console.Write("ThreadStatic")
            hasAttribute = True
         End If
         If Not hasAttribute Then
            Console.Write("No attributes")
         End If
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       Members of DerivedClass:
'          MethodA: CLSCompliant
'          ToString: No attributes
'          Equals: No attributes
'          GetHashCode: No attributes
'          GetType: No attributes
'          .ctor: No attributes
'          total: ThreadStatic
注解
此方法忽略 inherit 属性和事件的 参数。 若要在继承链中搜索属性和事件的属性,请使用 方法的适当 Attribute.GetCustomAttributes 重载。
注意
在.NET Framework版本 2.0 中,如果属性以新的元数据格式存储,则此方法返回方法、构造函数和类型的安全属性。 使用版本 2.0 编译的程序集使用此格式。 使用早期版本的 .NET Framework编译的动态程序集和程序集使用旧的 XML 格式。 请参阅 发出声明性安全属性。