Compartilhar via


Usando o atributo DebuggerTypeProxy

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

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.

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

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

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 no C#, consulte a seção 20.5.2 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"

Consulte também

Referência

Usando o atributo DebuggerDisplay

Conceitos

Exibindo tipos de dados personalizados

Melhorando a depuração com os atributos de exibição do depurador