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 DebuggerTypeProxy
programie , 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"