MemberInfo.GetCustomAttributes Método

Definição

Quando substituído em uma classe derivada, retorna atributos personalizados aplicados a esse membro.

Sobrecargas

GetCustomAttributes(Boolean)

Quando substituído em uma classe derivada, retorna uma matriz de todos os atributos personalizados aplicados a esse membro.

GetCustomAttributes(Type, Boolean)

Quando substituído em uma classe derivada, retorna uma matriz de atributos personalizados aplicados a esse membro e identificados por Type.

GetCustomAttributes(Boolean)

Origem:
MemberInfo.cs
Origem:
MemberInfo.cs
Origem:
MemberInfo.cs

Quando substituído em uma classe derivada, retorna uma matriz de todos os atributos personalizados aplicados a esse membro.

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

Parâmetros

inherit
Boolean

true para pesquisar a cadeia de herança desse membro para encontrar os atributos; caso contrário, false. Esse parâmetro é ignorado para propriedades e eventos.

Retornos

Object[]

Uma matriz que contém todos os atributos personalizados aplicados a esse membro ou uma matriz com zero elementos se nenhum atributo for definido.

Implementações

Exceções

Esse membro pertence a um tipo carregado no contexto somente reflexão. Consulte Como carregar assemblies no contexto de somente reflexão.

Um tipo de atributo personalizado não pôde ser carregado.

Exemplos

O exemplo a seguir define um atributo personalizado e associa o atributo MyClass.MyMethoda , recupera o atributo em tempo de execução e exibe o 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);
        }
    }
}

Comentários

Esse método ignora o inherit parâmetro para propriedades e eventos. Para pesquisar atributos em propriedades e eventos na cadeia de herança, use as sobrecargas apropriadas do Attribute.GetCustomAttributes método .

Observação

No .NET Framework versão 2.0, esse método retorna atributos de segurança em métodos, construtores e tipos se eles estiverem armazenados no novo formato de metadados. Assemblies compilados com a versão 2.0 usam esse formato. Assemblies dinâmicos e assemblies compilados com versões anteriores do .NET Framework usam o formato XML antigo. Consulte Emitindo atributos de segurança declarativos.

Confira também

Aplica-se a

.NET 10 e outras versões
Produto Versões
.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)

Origem:
MemberInfo.cs
Origem:
MemberInfo.cs
Origem:
MemberInfo.cs

Quando substituído em uma classe derivada, retorna uma matriz de atributos personalizados aplicados a esse membro e identificados por Type.

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

Parâmetros

attributeType
Type

O tipo de atributo a ser pesquisado. Somente os atributos que podem ser atribuídos a esse tipo são retornados.

inherit
Boolean

true para pesquisar a cadeia de herança desse membro para encontrar os atributos; caso contrário, false. Esse parâmetro é ignorado para propriedades e eventos.

Retornos

Object[]

Uma matriz de atributos personalizados aplicados a este membro ou uma matriz com zero elemento se nenhum atributo que puder ser atribuído a attributeType for aplicado.

Implementações

Exceções

Um tipo de atributo personalizado não pode ser carregado.

Se attributeType for null.

Esse membro pertence a um tipo carregado no contexto somente reflexão. Consulte How to: Load Assemblies into the Reflection-Only Context.

Exemplos

O exemplo a seguir define uma classe chamada BaseClass que tem dois membros não herdados: um campo estático de thread chamado total e um método não compatível com CLS chamado MethodA. Uma classe chamada DerivedClass herda de BaseClass e substitui seu MethodA método. Observe que nenhum atributo é aplicado aos membros do DerivedClass. O exemplo itera os membros de DerivedClass para determinar se o CLSCompliantAttribute atributo ou ThreadStaticAttribute como foi aplicado a eles. Como inherit é true, o método pesquisa a hierarquia de herança de DerivedClass para o atributo especificado. Como mostra a saída do exemplo, o total campo é decorado com o ThreadStaticAttribute atributo e o MethodA método é decorado com o 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

Comentários

Esse método ignora o inherit parâmetro para propriedades e eventos. Para pesquisar atributos em propriedades e eventos na cadeia de herança, use as sobrecargas apropriadas do Attribute.GetCustomAttributes método .

Observação

No .NET Framework versão 2.0, esse método retornará atributos de segurança em métodos, construtores e tipos se os atributos forem armazenados no novo formato de metadados. Assemblies compilados com a versão 2.0 usam esse formato. Assemblies dinâmicos e assemblies compilados com versões anteriores do .NET Framework usam o formato XML antigo. Consulte Emitindo atributos de segurança declarativos.

Aplica-se a

.NET 10 e outras versões
Produto Versões
.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