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


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

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"

См. также

Ссылки

Использование атрибута DebuggerDisplay

Основные понятия

Отображение пользовательских типов данных

Повышение эффективности отладки с помощью атрибутов просмотра отладчика