问题: 我正在寻找一种方法来简化继承类的调试器类型代理的构造。因此,当调试从另一个继承的类时,我应该同时看到两个属性:基类的基本属性,加上父类的新属性。
这是我到目前为止所尝试的:
NewA
的类型代理继承自A
. 属性不会并排显示;基本属性在Base
. *****- 包括一个将当前转换为的
A
属性,其中:Visual Studio 挂起 :(NewA
NewA
A
[DebuggerBrowsable(RootHidden)]
我知道我可以将基类的属性添加到NewA
的代理中,但我试图避免这种情况。对于具有许多属性的类来说,工作量太大了。
解释:
我在我的DebuggerTypeProxy
一些类上使用了该属性,因此我可以控制在调试期间浏览类时的外观。例如:
public class A {
private String _someField;
public String SomeField {
get {return _someField;}
}
}
默认情况下,工具提示调试信息显示为:
...所以我使用 DebuggerTypeProxy 来隐藏支持字段:
[DebuggerTypeProxy(typeof(AProxy))]
public class A {
// ...
internal class AProxy {
A _a;
AProxy (A a){
_a = a;
}
public String SomeField {
get {return _a.SomeField;}
}
}
}
...世界一切都好:
现在,我创建了一个继承自 A 的类。
public class NewA : A {
private String _anotherField;
public String AnotherField {
get {return _anotherField;}
}
}
不幸的是,在调试此类时,Visual Studio 使用基类型代理(来自A
)。这意味着我们可以看到基本SomeField
属性,但我们的新AnotherField
属性是隐藏的(当然,除非你展开Raw View
):
从 base 中删除类型代理A
会导致AnotherField
显示,但不会SomeField
。
*尝试失败 #1
/// <summary>
/// The base class
/// </summary>
[DebuggerTypeProxy(typeof(AProxy))]
public class A {
private String _someField;
public String SomeField {
get { return _someField; }
}
protected class AProxy {
A _a;
protected AProxy(A a) {
_a = a;
}
String SomeField {
get { return _a.SomeField; }
}
}
}
/// <summary>
/// Parent class
/// </summary>
[DebuggerTypeProxy(typeof(NewAProxy))]
public class NewA : A {
private String _anotherField;
public String AnotherField {
get { return _anotherField; }
}
// Inherit base type proxy, in an effort to display base properties
// side-by-side with AnotherField: Doesn't work.
protected class NewAProxy : A.AProxy {
NewA _newA;
protected NewAProxy(NewA newA)
: base(newA) {
_newA = newA;
}
public String AnotherField {
get { return _newA.AnotherField; }
}
}
}
结果:
还是不行。基础属性不会与新属性并排放置。