Существует несколько встроенных способов использования атрибутов Framework (хотя ни один из них не является особенно масштабируемым).
Предположим, ваш класс выглядит следующим образом:
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
.
Преимущество: отображает только тех членов, которых вы хотите.
Недостаток: Вы должны явно указать элементы для отображения и повторить этот шаг для каждого свойства, которое вы добавите позже.
Вы можете определить прокси-класс, который должен отображаться в отладчике вместо вашего реального класса.
Опять же, если предположить, что ваш класс выглядит следующим образом
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
, который должен отображаться в отладчике.