Использование атрибута DebuggerTypeProxy
Атрибут DebuggerTypeProxyAttribute указывает прокси (заменяющий тип) для типа и меняет способ отображения типа в окнах отладчика. При просмотре переменной, у которой есть прокси, прокси заменяет исходный тип при отображении. Окно переменных отладчика отображает только открытые члены прокси-типа. Закрытые члены не отображаются.
Данный атрибут может применяться к:
Структуры
Классы
Сборки
Класс прокси-типа должен иметь конструктор, принимающий аргумент типа, который будет заменен прокси. Отладчик создает новый экземпляр класса прокси-типа всякий раз, когда требуется отобразить переменную конечного типа. Это может сказываться на производительности. Поэтому не следует выполнять в конструкторе больше действий, чем это действительно необходимо.
Для снижения потерь производительности вычислитель выражений не проверяет атрибуты при отображении прокси-типа до тех пор, пока тип не будет развернут щелчком по символу "+" в окне отладчика или путем применения атрибута DebuggerBrowsableAttribute. Таким образом, не следует применять атрибуты к самому типу отображения. Атрибуты можно и нужно применять в основной части типа отображения.
Прокси-тип рекомендуется делать закрытым вложенным классом внутри класса, к которому применяется атрибут. В этом случае он может легко получить доступ к внутренним членам.
Если атрибут DebuggerTypeProxyAttribute используется на уровне сборки, параметр Target указывает тип, который заменяется прокси.
Пример использования этого атрибута вместе с атрибутами DebuggerDisplayAttribute и DebuggerTypeProxyAttribute см. в разделеИспользование атрибута DebuggerDisplay.
Использование универсальных типов с атрибутом DebuggerTypeProxy
Поддержка универсальных типов ограничена. Для C# атрибут DebuggerTypeProxy поддерживает только открытые типы. Открытый тип (также называемый "не сконструированным" типом) — это универсальный тип, экземпляр которого создается без аргументов для параметров типа. Закрытые типы (также называемые сконструированными типами) не поддерживаются.
Синтаксис для открытого типа выглядит следующим образом:
Namespace.TypeName<,>
Этот синтаксис необходимо использовать при использовании универсального типа в качестве целевого типа в атрибуте DebuggerTypeProxy. Атрибут DebuggerTypeProxy предположит параметры типа самостоятельно.
Дополнительные сведения об открытых и закрытых типах в C# см. в подразделе 20.5.2 "Открытые и закрытые типы" раздела Спецификация языка C#.
В Visual Basic синтаксис для открытых типов не поддерживается, поэтому данный способ для Visual Basic не подходит. Вместо этого необходимо использовать строковое представление имени открытого типа.
"Namespace.TypeName'2"
См. также
Ссылки
Использование атрибута DebuggerDisplay
Основные понятия
Отображение пользовательских типов данных
Повышение эффективности отладки с помощью атрибутов просмотра отладчика