प्रश्न: मैं विरासत कक्षाओं के लिए डीबगर प्रकार प्रॉक्सी के निर्माण को सरल बनाने के लिए एक तरीका ढूंढ रहा हूं। इसलिए, जब किसी वर्ग से प्राप्त होने वाली कक्षा को डीबग करते समय, मुझे दोनों तरफ से गुणों को देखना चाहिए: बेस क्लास के मूल गुण, साथ ही मूल वर्ग के नए गुण।मैं अपने डीबगर टाइपप्रोक्सी लक्ष्य वर्ग बेस प्रॉक्सी से कैसे प्राप्त कर सकता हूं?
यहाँ मैं अब तक की कोशिश की है है:
NewA
के प्रकार, प्रॉक्सीA
की कि से विरासत। गुण साइड-साइड नहीं दिखाते हैं; बेस गुणBase
के तहत छतरी [एसआईसी] हैं। *****NewA
में एकA
संपत्ति है कि सिर्फ वर्तमानNewA
A
को डाले,[DebuggerBrowsable(RootHidden)]
साथ सहित: दृश्य स्टूडियो लटकी हुई है :(
मुझे पता है कि मैं सिर्फ आधार के लिए गुण जोड़ सकते हैं NewA
के प्रॉक्सी में वर्ग है, लेकिन मैं इस से बचने के लिए कोशिश कर रहा हूँ यह कई गुणों के साथ कक्षाओं के लिए बहुत ज्यादा काम है
स्पष्टीकरण:।।
मैं अपने कुछ वर्गों पर DebuggerTypeProxy
विशेषता का उपयोग कर रहा हूं, इसलिए मैं डीबगिंग के दौरान ब्राउज़ करते समय कक्षा को कैसे देखता हूं इसे नियंत्रित कर सकता हूं। उदाहरण के लिए:
... इसलिए मैं एक DebuggerTypeProxy का उपयोग समर्थन क्षेत्र को छिपाने के लिए:
[DebuggerTypeProxy(typeof(AProxy))]
public class A {
// ...
internal class AProxy {
A _a;
AProxy (A a){
_a = a;
}
public String SomeField {
get {return _a.SomeField;}
}
}
}
public class A {
private String _someField;
public String SomeField {
get {return _someField;}
}
}
डिफ़ॉल्ट रूप से, टूलटिप जानकारी डिबगिंग रूप में दिखाता है ... सभी दुनिया के साथ सही हैं:
अब, मैं एक वर्ग है कि ए
public class NewA : A {
private String _anotherField;
public String AnotherField {
get {return _anotherField;}
}
}
दुर्भाग्य से विरासत बनाने के लिए, जब इस वर्ग डीबगिंग, विजुअल स्टूडियो आधार प्रकार, प्रॉक्सी (A
से) का उपयोग करता है। इसका मतलब यह है कि हम आधार SomeField
संपत्ति देख सकते हैं, लेकिन हमारे नए AnotherField
संपत्ति छिपा हुआ है (जब तक आप Raw View
का विस्तार, निश्चित रूप से):
AnotherField
दिखाने में A
परिणाम के आधार से प्रकार प्रॉक्सी निकाला जा रहा है, लेकिन नहीं 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; }
}
}
}
परिणाम:
फिर भी काम नहीं करता। आधार गुणों को नई संपत्तियों के साथ-साथ नहीं रखा जाता है।
आप गुणों के लिए डीबगर ब्रोसेबल एट्रिब्यूट भी सक्षम कर सकते हैं। –