Destinos de atributo disambiguating (guia de programação translation from VPE for Csharp)
Em certas situações, o destino de um atributo, ou seja, a entidade à qual o atributo se aplica, parece ser ambíguo.Por exemplo, na seguinte declaração de método, o SomeAttr atributo pode aplicar o método ou ao valor retornado do método:
public class SomeAttr : System.Attribute { }
[SomeAttr]
int Method()
{
return 0;
}
Esse tipo de situação ocorre com freqüência quando o marshaling.Para resolver a ambigüidade, translation from VPE for Csharp tem um conjunto de destinos padrão para cada tipo de declaração, que pode ser substituída ao especificar explicitamente o atributo destinos.
// default: applies to method
[SomeAttr]
int Method1() { return 0; }
// applies to method
[method: SomeAttr]
int Method2() { return 0; }
// applies to return value
[return: SomeAttr]
int Method3() { return 0; }
Observe que isso é independente dos destinos no qual SomeAttr é definido como sendo válido; ou seja, mesmo se SomeAttr foram definidos para aplicar apenas para retornar valores, o return destino ainda teria de ser especificado. Em outras palavras, o compilador não usará AttributeUsage informações para resolver o atributo ambíguo destinos. Para obter mais informações, consulte AttributeUsage (guia de programação translation from VPE for Csharp).
A sintaxe para destinos do atributo é:
[target : attribute-list]
Parâmetros
target
Um dos seguintes: assembly, campo, evento, método, módulo, parâmetro, tipo de retorno, propriedade.attribute-list
Uma lista de atributos aplicáveis.
A tabela a seguir lista todas as declarações de onde os atributos são permitidos; possíveis alvos para atributos na declaração de cada declaração, são listados na segunda coluna.Alvos em negrito são os padrões.
Declaração |
Possíveis alvos |
---|---|
Assembly |
assembly |
módulo |
module |
classe |
type |
struct |
type |
interface |
type |
Enum |
type |
delegado |
type, retornar |
Método |
method, retornar |
parâmetro |
param |
Campo |
field |
propriedade, indexador |
property |
propriedade — Obtenha acessador |
method, retornar |
propriedade — conjunto acessador |
method, param, retorno |
evento — campo |
event, campo, método |
evento — propriedade |
event, propriedade |
evento — adicionar |
method, param |
evento — remover |
method, param |
Assembly e atributos em nível de módulo não têm nenhum destino padrão.Para obter mais informações, consulte Atributos global.
Exemplo
using System.Runtime.InteropServices;
[Guid("12345678-1234-1234-1234-123456789abc"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface ISampleInterface
{
[DispId(17)] // set the DISPID of the method
[return: MarshalAs(UnmanagedType.Interface)] // set the marshaling on the return type
object DoWork();
}
Consulte também
Conceitos
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)
Criando atributos personalizados (guia de programação translation from VPE for Csharp)