質問: 継承されたクラスのデバッガ型プロキシの構築を簡素化する方法を探しています。したがって、別のクラスから継承するクラスをデバッグする場合、基本クラスの基本プロパティと親クラスの新しいプロパティの両方のプロパティを並べて表示する必要があります。
これが私がこれまでに試したことです:
NewA
のタイプ プロキシは のタイプ プロキシを継承しA
ます。プロパティは並べて表示されません。基本プロパティは [sic] の下にまとめられて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 はベース タイプ プロキシ (from A
) を使用します。これは、基本SomeField
プロパティを表示できることを意味しますが、新しいAnotherField
プロパティは非表示になっています (Raw View
もちろん、展開しない限り)。
タイプ プロキシをベースから削除すると表示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; }
}
}
}
結果:
それでもうまくいきません。基本プロパティは、新しいプロパティと並べて配置されません。