Compartilhar via


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

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)

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

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

System.Reflection

Attribute