Поделиться через


Информирование отладчика о том, что отображать, с помощью атрибута DebuggerTypeProxy (C#, Visual Basic, C++/CLI)

Атрибут DebuggerTypeProxyAttribute указывает прокси (заменяющий тип) для типа и изменяет способ отображения типа в окнах отладчика. При просмотре переменной, у которой есть прокси, прокси заменяет исходный тип при отображении. Окно переменных отладчика отображает только открытые члены прокси-типа. Закрытые члены не отображаются.

Данный атрибут может применяться к:

  • Структуры
  • Классы
  • Сборки

Примечание.

При использовании нативного кода этот атрибут поддерживается только в коде C++/CLI.

Класс прокси-типа должен иметь конструктор, принимающий аргумент типа, который будет заменен прокси. Отладчик создает новый экземпляр класса прокси-типа всякий раз, когда требуется отобразить переменную конечного типа. Это может сказываться на производительности. Поэтому не следует выполнять в конструкторе больше действий, чем это действительно необходимо.

Для снижения потерь производительности вычислитель выражений не проверяет атрибуты при отображении прокси-типа до тех пор, пока тип не будет развернут щелчком по символу "+" в окне отладчика или путем применения атрибута DebuggerBrowsableAttribute. Таким образом, не следует применять атрибуты к самому типу отображения. Атрибуты можно и нужно применять в основной части типа отображения.

Прокси-тип рекомендуется делать закрытым вложенным классом внутри класса, к которому применяется атрибут. В этом случае он может легко получить доступ к внутренним членам.

DebuggerTypeProxyAttribute может наследоваться, поэтому если в базовом классе указан прокси типа, он будет применяться к любым производным классам, если только эти производные классы не задают свой собственный прокси типа.

Если атрибут DebuggerTypeProxyAttribute используется на уровне сборки, параметр Target указывает тип, который заменяется прокси.

См. пример использования этого атрибута с DebuggerDisplayAttribute и DebuggerTypeProxyAttribute в руководстве по использованию атрибута DebuggerDisplay.

Важно!

Если в диалоговом окне "Сервис" > "Параметры" > "Отладка" установлен флажок Показывать базовую структуру объектов в окнах переменных, то атрибут DebuggerDisplay игнорируется.

Использование универсальных типов с атрибутом DebuggerTypeProxy

Поддержка универсальных типов ограничена. Для C# атрибут DebuggerTypeProxy поддерживает только открытые типы. Открытый тип (также называемый "не сконструированным" типом) — это универсальный тип, экземпляр которого создается без аргументов для параметров типа. Закрытые типы (также называемые сконструированными типами) не поддерживаются.

Синтаксис для открытого типа выглядит следующим образом:

Namespace.TypeName<,>

Этот синтаксис необходимо использовать при использовании универсального типа в качестве целевого типа в атрибуте DebuggerTypeProxy. Атрибут DebuggerTypeProxy предположит параметры типа самостоятельно.

См. сведения об открытых и закрытых типах в C# в разделе 20.5.2, посвященному открытым и закрытым типам, в спецификации языка C#.

В Visual Basic синтаксис для открытых типов не поддерживается, поэтому данный способ для Visual Basic не подходит. Вместо этого необходимо использовать строковое представление имени открытого типа.

"Namespace.TypeName'2"