Использование атрибута DebuggerTypeProxy
Обновлен: Ноябрь 2007
Этот раздел применим для следующих версий.
Выпуск |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Экспресс-выпуск |
![]() |
![]() |
![]() |
![]() |
Standard |
||||
Pro и Team |
Условные обозначения:
![]() |
Применимо |
![]() |
Неприменимо |
![]() |
Команда или команды по умолчанию скрыты. |
DebuggerTypeProxyAttribute указывает прокси (заменяющий объект) для типа и меняет способ его отображения в окнах отладчика. При просмотре переменной, у которой есть прокси, прокси заменяет исходный тип в смысле отображения. Окно переменных отладчика отображает только открытые элементы прокси-типа. Закрытые элементы не отображаются.
Этот атрибут может применяться для:
структур;
классов;
сборок.
Класс прокси-типа должен иметь конструктор, принимающий аргумент заменяемого прокси типа. Отладчик создает новый экземпляр класса прокси-типа каждый раз при необходимости отобразить переменную исходного типа. Это может повлиять на производительность. В результате этого, не следует делать больше работы в конструкторе, чем действительно необходимо.
Чтобы уменьшить потери производительности, вычислитель выражений не проверяет атрибуты при отображении прокси-типа, пока пользователи не развернет тип, щелкнув символ "+", в окне отладчика или с помощью DebuggerBrowsableAttribute. Таким образом, не следует показывать атрибуты при отображении самого типа. Атрибуты могут и должны использоваться в отображении тела типа.
Прокси-тип рекомендуется делать закрытым вложенным классом внутри целевого класса. Это позволяет ему легко получить доступ к внутренним элементам.
Если DebuggerTypeProxyAttribute используется на уровне сборки, параметр Target определяет тип, который заменяется прокси.
Пример использования этого атрибута вместе с DebuggerDisplayAttribute и DebuggerTypeProxyAttribute см. в разделе Использование атрибута DebuggerDisplay.
Использование универсальных шаблонов c атрибутом DebuggerTypeProxy
Поддержка универсальных шаблонов ограничена. Для C# DebuggerTypeProxy поддерживает только открытые типы. Открытый тип (он же "не конструированный" тип) является универсальным типом, экземпляр которого создается без аргументов с указанием типов параметров. Закрытые типы (они же сконструированные типы), не поддерживаются.
Синтаксис для открытого типа выглядит следующим образом:
Namespace.TypeName<,>
При использовании универсального типа в качестве цели в атрибуте DebuggerTypeProxy, необходимо использовать этот синтаксис. Механизм атрибута DebuggerTypeProxy предположит параметры типа.
Дополнительные сведения об открытых и закрытых типах в C#, см. в подразделе 20.5.2 ֿ"Открытые и закрытые типы" раздела Спецификация языка C#.
Visual Basic не имеет синтаксиса открытых типов, поэтому нельзя делать то же самое в Visual Basic. Вместо этого необходимо использовать строковое представление имени открытого типа.
"Namespace.TypeName'2"
См. также
Основные понятия
Отображение пользовательских типов данных
Повышение эффективности отладки с помощью атрибутов просмотра отладчика