Есть ли способ просмотреть переменные объекта, не видя все вещи базового класса В отладчике Visual Studio - PullRequest
0 голосов
/ 29 августа 2018

В частности, исследуя объект Windows Form, я хочу видеть элементы, определенные в моем коде, не всегда видя сотни элементов, определенных платформой в базовом классе.

enter image description here

1 Ответ

0 голосов
/ 29 августа 2018

Существует несколько встроенных способов использования атрибутов Framework (хотя ни один из них не является особенно масштабируемым).


1. Использование [DebuggerDisplay]

Предположим, ваш класс выглядит следующим образом:

public class MyForm : Form
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}

вы можете добавить [DebuggerDisplayAttribute] в класс следующим образом:

[DebuggerDisplay("Foo = {Foo}, Bar = {Bar}")
public class MyForm : Form
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}

, который теперь показывает только Foo и Bar.

Преимущество: отображает только тех членов, которых вы хотите.

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


2. Использование [DebuggerTypeProxy]

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

Опять же, если предположить, что ваш класс выглядит следующим образом

public class MyForm : Form
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}

Теперь вы можете продолжить и определить прокси-класс, который предоставляет только те члены, которые вы хотите отобразить, и применяет [DebuggerTypeProxyAttribute] к классу следующим образом:

[DebuggerTypeProxy(typeof(MyFormDebugView))]
public class MyForm : Form
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}

public class MyFormDebugView
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}

Теперь на экране отладчика вы увидите только Foo и Bar, а не унаследованные элементы Form.

Преимущество: отображает только элементы в прокси-классе. Нет необходимости указывать эти члены явно.

Недостаток: вы должны настраивать тип прокси-сервера всякий раз, когда добавляете новое свойство и т. Д. В MyForm, который должен отображаться в отладчике.

...