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)

Source:
MemberInfo.cs
Source:
MemberInfo.cs
Source:
MemberInfo.cs

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

C#
public abstract object[] GetCustomAttributes(bool inherit);

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.

C#
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);
        }
    }
}

Comentarios

Este método omite el inherit parámetro de las propiedades y los 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 de .NET Framework usan el formato XML anterior. Consulte Emisión de atributos de seguridad declarativos.

Consulte también

Se aplica a

.NET 10 e outras versións
Produto Versións
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.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 2.0, 2.1

GetCustomAttributes(Type, Boolean)

Source:
MemberInfo.cs
Source:
MemberInfo.cs
Source:
MemberInfo.cs

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

C#
public abstract object[] GetCustomAttributes(Type attributeType, bool inherit);

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 .

C#
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

Comentarios

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

Nota

En .NET Framework versión 2.0, 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 de .NET Framework usan el formato XML anterior. Consulte Emisión de atributos de seguridad declarativos.

Se aplica a

.NET 10 e outras versións
Produto Versións
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.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 2.0, 2.1