Partilhar via


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

DebuggerTypeProxyAttribute especifica um proxy, ou substituto, para um tipo e altera a maneira como o tipo é exibido nas janelas do depurador. Quando você exibe uma variável que tem um proxy, o proxy substitui o tipo original em exibição. A janela de variáveis do depurador exibe apenas os membros públicos do tipo de proxy. Os membros particulares não são exibidos.

Esse atributo poderá ser aplicado a:

  • Estruturas
  • Classes
  • Assemblies

Observação

Para código nativo, esse atributo tem suporte apenas em código C++/CLI.

Uma classe de proxy de tipo deve ter um construtor que usa um argumento do tipo que o proxy substituirá. O depurador cria uma nova instância da classe de proxy de tipo sempre que precisa exibir uma variável do tipo de destino. Isso pode ter implicações de desempenho. Como resultado, você não deve fazer mais trabalho no construtor do que o que for absolutamente necessário.

Para minimizar 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 clique do usuário no símbolo + na janela do depurador ou pelo uso de DebuggerBrowsableAttribute. Consequentemente, você não deverá colocar os atributos no próprio tipo de exibição. Os atributos podem e devem ser usados no corpo do tipo de exibição.

É uma boa ideia para o proxy do tipo ser uma classe aninhada particular dentro da classe a que o atributo se destina. Isso permite acessar membros internos com facilidade.

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

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

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

Importante

Se a caixa de seleção Mostrar estrutura bruta de objetos em janelas de variáveis estiver selecionada na caixa de diálogo Ferramentas / Opções / Depuração, o atributo DebuggerDisplay será ignorado.

Usando genéricos com DebuggerTypeProxy

O suporte para genéricos é limitado. Para C#, o DebuggerTypeProxy oferece suporte apenas a tipos abertos. Um tipo aberto, também chamada de um tipo não construído, é um tipo genérico que não foi instanciado com argumentos para seus parâmetros de tipo. Os tipos fechados, também chamados de tipos construídos, não têm suporte.

A sintaxe para um tipo aberto é semelhante ao seguinte:

Namespace.TypeName<,>

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

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

O Visual Basic não tem sintaxe de tipo aberto; portanto, você não pode fazer a mesma coisa no Visual Basic. Em vez disso, você deverá usar uma representação de cadeia de caracteres do nome do tipo aberto.

"Namespace.TypeName'2"