Poinformuj debugera o typie, który ma być wyświetlany przy użyciu atrybutu DebuggerTypeProxy (C#, Visual Basic, C++/CLI)

DebuggerTypeProxyAttribute określa serwer proxy lub stand-in dla typu i zmienia sposób wyświetlania typu w oknach debugera. Podczas wyświetlania zmiennej, która ma serwer proxy, serwer proxy oznacza oryginalny typ na wyświetlaczu. W oknie zmiennej debugera są wyświetlane tylko publiczne elementy członkowskie typu serwera proxy. Prywatne elementy członkowskie nie są wyświetlane.

Ten atrybut można zastosować do:

  • Struktury
  • Klasy
  • Zestawy

Uwaga

W przypadku kodu natywnego ten atrybut jest obsługiwany tylko w kodzie C++/CLI.

Klasa serwera proxy typu musi mieć konstruktor, który przyjmuje argument typu, który zastąpi serwer proxy. Debuger tworzy nowe wystąpienie klasy serwera proxy typu za każdym razem, gdy musi wyświetlić zmienną typu docelowego. Może to mieć wpływ na wydajność. W rezultacie nie należy wykonywać więcej pracy w konstruktorze niż absolutnie konieczne.

Aby zminimalizować kary dotyczące wydajności, ewaluator wyrażeń nie sprawdza atrybutów na wyświetlanym serwerze proxy typu, chyba że typ został rozszerzony przez użytkownika klikając symbol + w oknie debugera lub przy użyciu polecenia DebuggerBrowsableAttribute. W związku z tym nie należy umieszczać atrybutów w samym typie wyświetlania. Atrybuty mogą i powinny być używane w treści typu wyświetlania.

Dobrym pomysłem jest, aby serwer proxy typu był prywatną klasą zagnieżdżonych w klasie, która jest przeznaczona dla atrybutu. Dzięki temu można łatwo uzyskiwać dostęp do wewnętrznych elementów członkowskich.

DebuggerTypeProxyAttribute można dziedziczyć, więc jeśli serwer proxy typu jest określony w klasie bazowej, będzie stosowany do dowolnych klas pochodnych, chyba że te klasy pochodne określą własny serwer proxy typu.

Jeśli DebuggerTypeProxyAttribute jest używany na poziomie zestawu, Target parametr określa typ, który serwer proxy zastąpi.

Aby zapoznać się z przykładem użycia tego atrybutu wraz z elementami DebuggerDisplayAttribute i DebuggerTypeProxyAttribute, zobacz Using the DebuggerDisplay Attribute (Używanie atrybutu DebuggerDisplay).

Ważne

Jeśli pole wyboru Pokaż nieprzetworzone strukturę obiektów w oknach zmiennych jest zaznaczone w oknie dialogowym Narzędzia / Opcje / Debugowanie , DebuggerDisplay atrybut jest ignorowany.

Używanie typów ogólnych z debuggerTypeProxy

Obsługa typów ogólnych jest ograniczona. W przypadku języka C# DebuggerTypeProxy obsługuje tylko typy otwarte. Typ otwarty, nazywany również typem niezkonstrukturowanym, jest typem ogólnym, który nie został utworzone z argumentami dla parametrów typu. Typy zamknięte, nazywane również typami konstruowania, nie są obsługiwane.

Składnia typu otwartego wygląda następująco:

Namespace.TypeName<,>

Jeśli używasz typu ogólnego jako elementu docelowego w DebuggerTypeProxyprogramie , musisz użyć tej składni. Mechanizm DebuggerTypeProxy wywnioskuje parametry typu.

Aby uzyskać więcej informacji na temat otwartych i zamkniętych typów w języku C#, zobacz specyfikację języka C#, sekcję 20.5.2 Otwieranie i zamykanie typów.

Język Visual Basic nie ma składni typu otwartego, więc nie można wykonać tej samej czynności w języku Visual Basic. Zamiast tego należy użyć reprezentacji ciągu nazwy typu otwartego.

"Namespace.TypeName'2"