MemberInfo.GetCustomAttributes Método

Definición

Cuando se reemplaza en una clase derivada, devuelve los atributos personalizados aplicados a este miembro.

Sobrecargas

GetCustomAttributes(Boolean)

Cuando se reemplaza en una clase derivada, devuelve una matriz de todos los atributos personalizados aplicados a este miembro.

GetCustomAttributes(Type, Boolean)

Cuando se invalida en una clase derivada, devuelve una matriz de atributos personalizados aplicados a este miembro e identificado por Type.

GetCustomAttributes(Boolean)

Cuando se reemplaza en una clase derivada, devuelve una matriz de todos los atributos personalizados aplicados a este miembro.

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()

Parámetros

inherit
Boolean

true para buscar la cadena de herencia de este miembro para encontrar los atributos; en caso contrario, false. Este parámetro se omite para las propiedades y los eventos.

Devoluciones

Object[]

Matriz que contiene todos los atributos personalizados aplicados a este miembro, o matriz con cero elementos si no se ha definido ningún atributo.

Implementaciones

Excepciones

Este miembro pertenece a un tipo que se carga en el contexto de solo reflexión. Consulte Cómo: Cargar ensamblados en el contexto de solo reflexión.

No ha podido cargarse un tipo de atributo personalizado.

Ejemplos

En el ejemplo siguiente se define un atributo personalizado y se asocia el atributo con MyClass.MyMethod, se recupera el atributo en tiempo de ejecución y se muestra el resultado.

using namespace System;
using namespace System::Reflection;

// Define a custom attribute with one named parameter.

[AttributeUsage(AttributeTargets::All)]
public ref class MyAttribute: public Attribute
{
private:
   String^ myName;

public:
   MyAttribute( String^ name )
   {
      myName = name;
   }

   property String^ Name 
   {
      String^ get()
      {
         return myName;
      }
   }
};

// Define a class that has the custom attribute associated with one of its members.
public ref class MyClass1
{
public:

   [MyAttribute("This is an example attribute.")]
   void MyMethod( int i )
   {
      return;
   }
};

int main()
{
   try
   {
      // Get the type of MyClass1.
      Type^ myType = MyClass1::typeid;

      // Get the members associated with MyClass1.
      array<MemberInfo^>^myMembers = myType->GetMembers();

      // Display the attributes for each of the members of MyClass1.
      for ( int i = 0; i < myMembers->Length; i++ )
      {
         array<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 );
   }
}
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

Comentarios

Este método omite el inherit parámetro de propiedades y eventos. Para buscar atributos en la cadena de herencia en propiedades y eventos, use las sobrecargas adecuadas del Attribute.GetCustomAttributes método .

Nota

En la versión 2.0 de .NET Framework, este método devuelve atributos de seguridad en métodos, constructores y tipos si se almacenan en el nuevo formato de metadatos. Los ensamblados compilados con la versión 2.0 usan este formato. Los ensamblados dinámicos y los ensamblados compilados con versiones anteriores del .NET Framework usan el formato XML antiguo. Consulte Emisión de atributos de seguridad declarativos.

Consulte también

Se aplica a

GetCustomAttributes(Type, Boolean)

Cuando se invalida en una clase derivada, devuelve una matriz de atributos personalizados aplicados a este miembro e identificado por 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()

Parámetros

attributeType
Type

El tipo de atributo que se va a buscar. Solo se devuelven los atributos que son asignables a este tipo.

inherit
Boolean

true para buscar la cadena de herencia de este miembro para encontrar los atributos; en caso contrario, false. Este parámetro se omite para las propiedades y los eventos.

Devoluciones

Object[]

Se ha aplicado una matriz de atributos personalizados aplicados a este miembro, o matriz con cero elementos si no hay atributos asignables al attributeType.

Implementaciones

Excepciones

No se puede cargar un tipo de atributo personalizado.

Si attributeType es null.

Este miembro pertenece a un tipo que se carga en el contexto de solo reflexión. Consulte Cómo: Cargar ensamblados en el contexto de solo reflexión.

Ejemplos

En el ejemplo siguiente se define una clase denominada BaseClass que tiene dos miembros no heredados: un campo estático de subproceso denominado total y un método no conforme a CLS denominado MethodA. Una clase denominada DerivedClass hereda de BaseClass e invalida su MethodA método. Tenga en cuenta que no se aplican atributos a los miembros de DerivedClass. En el ejemplo se recorren en iteración los miembros de DerivedClass para determinar si se les ha aplicado el CLSCompliantAttribute atributo o ThreadStaticAttribute . Dado inherit que es true, el método busca en la jerarquía de herencia del DerivedClass atributo especificado. Como se muestra en la salida del ejemplo, el total campo está decorado con el ThreadStaticAttribute atributo y el MethodA método está decorado con el CLSCompliantAttribute atributo .

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

Comentarios

Este método omite el inherit parámetro de propiedades y eventos. Para buscar atributos en la cadena de herencia en propiedades y eventos, use las sobrecargas adecuadas del Attribute.GetCustomAttributes método .

Nota

En la versión 2.0 de .NET Framework, este método devuelve atributos de seguridad en métodos, constructores y tipos si los atributos se almacenan en el nuevo formato de metadatos. Los ensamblados compilados con la versión 2.0 usan este formato. Los ensamblados dinámicos y los ensamblados compilados con versiones anteriores del .NET Framework usan el formato XML antiguo. Consulte Emisión de atributos de seguridad declarativos.

Se aplica a