Jistě všichni znáte možnost jak přepsat výchozí zobrazování
vlastního typu v debuggeru VS pomocí přepsání metody
ToString(). Ovšem někdy je tato metoda velice užitečná i na
jiné účely, co potom s tím?
Když debuguje ve VS vlastní typy ve watches se vám u proměnné zobrazuje
celý název typu, např. Rarous.NForms.TextItem. Pokud chcete
v debuggeru vidět užitečnější informace, zpravidla přepíšete metodu
ToString(), kterou má každý objekt, tak, aby vypisovala to, co
chcete. Např.:
public override string ToString() {
return "\"" + Control.Name + "\", Value=" + Control.GetValue();
}
Při debutování by se nám pak mohlo zobrazovat něco jako "email",
Value=frantisek.koudelka@sts-chvojkovice.cz. Jenže. Teď chci, aby se mi
v šabloně při zápisu <%=Form["email"]%> vypsal kód
formulářového prvku a jeho labelu. Jak to udělat, aby se zachovalo pěkné
debugování a přibyla nová a ještě lepší funkčnost?
Naštěstí existuje jiné řešení, jak debugovací informace zobrazovat.
Troufnu si tvrdit, že i mnohem čistší. V .net frameworku existuje atribut
System.Diagnostics.DebuggerDisplayAttribute, který je určen,
právě k zobrazování informací v debuggeru. Jeho užití je
následující:
[DebuggerDisplay("{Control.Name}, Value={Control.GetValue(),nq}")]
public class TextItem : FormItem {
// implementace třídy...
public override string ToString() {
return Label + " " + Control;
}
}
Tímto jsme dosáhli, nové funkčnosti metody ToString() a
zachovali jsme vlastní informace zobrazované v debuggeru. Více informaci
o atributu DebuggerDisplay,
najdete v MSDN.










