AttributeUsage (guia de programação translation from VPE for Csharp)

Determina como uma classe de atributos personalizado pode ser usada.AttributeUsage é um atributo que pode ser aplicado às definições de atributo personalizado para controlar como o novo atributo pode ser aplicado. O aspecto de configurações padrão como este foi aplicado explicitamente:

[System.AttributeUsage(System.AttributeTargets.All, 
                   AllowMultiple=false, 
                   Inherited=true)]
class NewAttribute : System.Attribute { }

Neste exemplo, a NewAttribute classe pode ser aplicadas a qualquer entidade capaz de atributo de código, mas podem ser aplicadas apenas uma vez a cada entidade. Ela é herdada por classes derivadas quando aplicado a uma classe base.

The AllowMultiple e Inherited os argumentos são opcionais, portanto, esse código tem o mesmo efeito:

[System.AttributeUsage(System.AttributeTargets.All)]
class NewAttribute : System.Attribute { }

O primeiro AttributeUsage o argumento deve ser um ou mais elementos da AttributeTargets enumeração. Vários tipos de destino podem ser vinculadas com or juntos, como este:

using System;
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
class NewPropertyOrFieldAttribute : Attribute { }

Se o AllowMultiple o argumento é conjunto para true, e, em seguida, o atributo resultante pode ser aplicado mais de uma vez a uma única entidade, como este:

using System;
[AttributeUsage(AttributeTargets.Class, AllowMultiple=true)]
class MultiUseAttr : Attribute { }

[MultiUseAttr][MultiUseAttr]
class Class1 { }

[MultiUseAttr, MultiUseAttr]
class Class2 { }

Neste caso MultiUseAttr pode ser aplicado várias vezes porque AllowMultiple é conjunto para true. Os dois formatos mostrados para aplicar vários atributos são válido.

If Inherited é definido como false, e, em seguida, o atributo não é herdado pelas classes derivadas de uma classe que está atribuída. Por exemplo:

using System;
[AttributeUsage(AttributeTargets.Class, Inherited=false)]
class Attr1 : Attribute { }

[Attr1]
class BClass { }

class DClass : BClass { }

Neste caso Attr1 não é aplicada a DClass por meio de herança.

Comentários

The AttributeUsage é um atributo de uso único--não pode ser aplicado mais de uma vez à mesma classe. AttributeUsage é um alias para AttributeUsageAttribute.

Para obter mais informações, consulte Acessando atributos com reflexo (C# programação guia).

Exemplo

O exemplo a seguir demonstra o efeito do Inherited e AllowMultiple argumentos para o AttributeUsage atributo e como os atributos personalizados aplicados a uma classe podem ser enumerados.

using System;

// Create some custom attributes:
[AttributeUsage(System.AttributeTargets.Class, Inherited=false)]
class A1 : System.Attribute { }

[AttributeUsage(System.AttributeTargets.Class)]
class A2 : System.Attribute { }

[AttributeUsage(System.AttributeTargets.Class, AllowMultiple=true)]
class A3 : System.Attribute { }

// Apply custom attributes to classes:
[A1,A2]
class BaseClass { }

[A3,A3]
class DerivedClass : BaseClass { }

public class TestAttributeUsage
{
    static void Main()
    {
        BaseClass b = new BaseClass();
        DerivedClass d = new DerivedClass();

        // Display custom attributes for each class.
        Console.WriteLine("Attributes on Base Class:");
        object[] attrs = b.GetType().GetCustomAttributes(true);
        foreach (Attribute attr in attrs)
        {
            Console.WriteLine(attr);
        }
 
        Console.WriteLine("Attributes on Derived Class:");
        attrs = d.GetType().GetCustomAttributes(true);
        foreach (Attribute attr in attrs)
        {
            Console.WriteLine(attr);
        }
    }
}

Saída de exemplo

Attributes on Base Class:
A1
A2
Attributes on Derived Class:
A3
A3
A2

Consulte também

Conceitos

Guia de Programação C#

Referência

Reflexo (guia de programação C#) 

Atributos (guia de programação C#)

Usando atributos (guia de programação translation from VPE for Csharp)

Destinos de atributo disambiguating (guia de programação translation from VPE for Csharp)

Criando atributos personalizados (guia de programação translation from VPE for Csharp)

Acessando atributos com reflexo (C# programação guia)

Attribute

System.Reflection