问题: 我正在寻找一种方法来简化继承类的调试器类型代理的构造。因此,当调试从另一个继承的类时,我应该同时看到两个属性:基类的基本属性,加上父类的新属性。
这是我到目前为止所尝试的:
NewA的类型代理继承自A. 属性不会并排显示;基本属性在Base. *****- 包括一个将当前转换为的
A属性,其中:Visual Studio 挂起 :(NewANewAA[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; }
}
}
}
结果:

还是不行。基础属性不会与新属性并排放置。