Partilhar via


Diga ao depurador que tipo mostrar usando o atributo DebuggerTypeProxy (C#, Visual Basic, C++/CLI)

DebuggerTypeProxyAttribute Especifica um proxy, ou substituto, para um tipo e modifica a forma como o tipo é apresentado nas janelas do depurador. Quando você visualiza uma variável que tem um proxy, o proxy representa o tipo original na exibição. A janela de variáveis do depurador exibe apenas os membros públicos do tipo de proxy. Os membros privados não são exibidos.

Este atributo pode ser aplicado a:

  • Structures
  • Aulas
  • Assemblies

Observação

Para código nativo, esse atributo é suportado apenas no código C++/CLI.

Uma classe de proxy de tipo deve ter um construtor que aceita um argumento do tipo que o proxy irá substituir. O depurador cria uma nova instância da classe proxy do tipo sempre que precisa exibir uma variável do tipo de destino. Isso pode ter implicações no desempenho. Como resultado, evite qualquer trabalho desnecessário no construtor.

Para minimizar as penalidades de desempenho, o avaliador de expressão não examina os atributos no proxy de exibição do tipo, a menos que o tipo seja expandido pelo usuário clicando no símbolo + na janela do depurador ou pelo uso de DebuggerBrowsableAttribute. Portanto, não coloque atributos no próprio tipo de exibição. Os atributos podem e devem ser usados na estrutura do tipo de exibição.

É uma boa ideia que o proxy de tipo seja uma classe privada aninhada dentro da classe alvo do atributo. Isto permite-lhe aceder facilmente aos membros internos.

DebuggerTypeProxyAttribute pode ser herdado, portanto, se um proxy de tipo for especificado em uma classe base, ele se aplicará a quaisquer classes derivadas, a menos que essas classes derivadas especifiquem seu próprio proxy de tipo.

Se DebuggerTypeProxyAttribute for usado a nível de assembly, o parâmetro Target especifica o tipo que o proxy irá substituir.

Para obter um exemplo de como usar esse atributo junto com DebuggerDisplayAttribute e DebuggerTypeProxyAttribute, consulte Usando o atributo DebuggerDisplay.

Importante

Se você selecionar a opção Mostrar estrutura bruta de objetos em janelas de variáveis , o DebuggerDisplay atributo será ignorado. Essa configuração está localizada no painel Ferramentas>Opções na seção Todas as Configurações>Depuração>Geral.

Importante

Se você selecionar a opção Mostrar estrutura bruta de objetos em janelas de variáveis , o DebuggerDisplay atributo será ignorado. Essa configuração está localizada na caixa de diálogo Ferramentas>Opções na seção Depuração>Geral.

Usando genéricos com DebuggerTypeProxy

O apoio aos genéricos é limitado. Para C#, DebuggerTypeProxy suporta apenas tipos abertos. Um tipo aberto, também chamado de tipo não construído, é um tipo genérico que não é instanciado com argumentos para seus parâmetros de tipo. Não há suporte para tipos fechados, também chamados de tipos construídos.

A sintaxe de um tipo aberto tem esta aparência:

Namespace.TypeName<,>

Se você usar um tipo genérico como destino no DebuggerTypeProxy, deverá usar essa sintaxe. O DebuggerTypeProxy mecanismo infere os parâmetros de tipo para você.

Para obter mais informações sobre tipos abertos e fechados em C#, consulte a Especificação da linguagem C#, seção 20.5.2 Tipos abertos e fechados.

Visual Basic não tem sintaxe de tipo aberto, portanto, você não pode fazer a mesma coisa no Visual Basic. Em vez disso, deve-se usar uma representação em string do nome do tipo aberto.

"Namespace.TypeName'2"