Destinos de Atributos (Extensões de Componentes C++)
Especificadores de uso do atributo permitem especificar destinos de atributo .Cada atributo é definido para aplicar a determinados elementos de linguagem.Por exemplo, um atributo poderão ser definidos aplicar apenas às classes e estruturas.A lista a seguir mostra os elementos sintáticos possíveis em que um atributo de personalizado pode ser usado.Combinações desses valores (usando lógica ou) pode ser usado.
Para especificar o atributodedestino, para passar um ou mais AttributeTargets enumeradores para AttributeUsageAttribute ao definir o atributo.
A seguir está uma lista de destinos deatributo válido:
Destino |
Exemplo de uso |
---|---|
Todos (se aplica a todas as construções) |
|
Assembly (aplica-se a um assembly como um todo) |
|
Module (aplica-se a um módulo como um todo) |
|
Classe |
|
Struct |
|
Enum |
|
Construtor |
|
Método |
|
Propriedade |
|
Campo |
|
Evento |
|
Interface |
|
Parâmetro |
|
Delegado |
|
ReturnValue |
|
Normalmente, um atributo diretamente precede o elemento de linguagem ao qual ele se aplica.Em alguns casos, no entanto, a posição de um atributo não é suficiente para determinar de pretendido do atributo destino.Considere este exemplo:
[Attr] int MyFn(double x)...
Sintaticamente, não há nenhuma maneira de saber se o atributo destina-se para aplicar o método ou o métododo valor retornado (neste maiúsculas e minúsculas, ele assumirá como o método).Em tais casos, um deusodo atributoespecificador pode ser usado. Por exemplo, para que o atributoaplicar o valor retornado, use o returnvalue especificador, da seguinte maneira:
[returnvalue:Attr] int MyFn(double x)... // applies to return value
Especificadores de uso do atributo são necessárias nas seguintes situações:
Para especificar um móduloou assembly--nível de atributo.
Para especificar que um atributo se aplica a um métododo valor retornado, não é o método:
[method:Attr] int MyFn(double x)... // Attr applies to method [returnvalue:Attr] int MyFn(double x)...// Attr applies to return value [Attr] int MyFn(double x)... // default: method
Para especificar que um atributo se aplica a uma propriedadedo acessador, não a propriedade:
[method:MyAttr(123)] property int Property() [property:MyAttr(123)] property int Property() [MyAttr(123)] property int get_MyPropy() // default: property
Para especificar que um atributo se aplica a um eventodo acessador, não o evento:
delegate void MyDel(); ref struct X { [field:MyAttr(123)] event MyDel* MyEvent; //field [event:MyAttr(123)] event MyDel* MyEvent; //event [MyAttr(123)] event MyDel* MyEvent; // default: event }
Umusodo atributoespecificador se aplica apenas ao atributo que segue imediatamente ou seja,
[returnvalue:Attr1, Attr2]
é diferente de
[returnvalue:Attr1, returnvalue:Attr2]
Exemplo
Descrição
Esse exemplo mostra como especificar vários destinos.
Código
// attribute_targets.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Class | AttributeTargets::Struct, AllowMultiple = true )]
ref struct Attr : public Attribute {
Attr(bool i){}
Attr(){}
};
[Attr]
ref class MyClass {};
[Attr]
[Attr(true)]
value struct MyStruct {};
Consulte também
Referência
Atributos Definidos pelo Usuário (Extensões de Componentes C++)