2016-09-21 4 views
0

Ich habe 2 Klassen, ein vererben anotheroneEntfernen Basisreferenz von abgeleiteten Klasse Debug-Ansicht

public class A 
{ 
    public string prop1 { get; set; } 
    public string prop2 { get; set; } 
    public string prop3 { get; set; } 
} 

public class B : A 
{ 
    public string prop4 { get; set; } 
} 

Jetzt habe ich eine Liste der Klasse B erstellen und warf sie in eine Art von Klasse B

List<B> BList = new List<B>(); 
BList = new List<B>() { new B() { prop1 = "1", prop2 = "2", prop3 = "3", prop4 = "4" } }; 
List<A> AList = BList.Cast<A>().ToList(); 

Aber wenn ich debugge, gibt es immer noch einen Verweis auf Klasse B:

Wie kann ich die Anzeige von Eigenschaften aus der Basisklasse entfernen/vermeiden?

+1

Warum möchten Sie dies vermeiden? Soll das Debuggen einfacher/weniger überladen werden? Wenn nicht, brauchen Sie wirklich eine Klasse, um von der anderen zu erben? –

+2

Wenn "B" von "A" erbt, gibt es immer einen Verweis von "B" auf "A". Wie möchten Sie es vermeiden und vor allem, warum? – walther

+2

Dies macht überhaupt keinen Sinn, da es einen * Verweis * auf 'A' gibt, da 'B' bereits * eine 'A'-Instanz ist. Was Sie im Debugger sehen, ist nur die Instanz von 'B', die an' A' geworfen wird. – HimBromBeere

Antwort

1

Sie können dies nicht entfernen, aber Sie können es im Debugger anders aussehen lassen. Verwenden Sie einen Debugger-Proxytyp wie documented here, um die Klasse im Debugger wie gewünscht anzuzeigen. Listen und Wörterbücher werden auf diese Weise erstellt, sodass Sie den Quellcode mithilfe eines Decompilers wie ILSpy auschecken können.

Zum Beispiel:

using System.Diagnostics; 

[DebuggerTypeProxy(typeof(BDebugView))] 
public class B : A 
{ 
    private class BDebugView 
    { 
     private B _actualObject; 
     public string prop4 { get { return _actualObject.prop4; } } 

     public BDebugView(B actualObject) 
     { 
      this._actualObject = actualObject; 
     } 
    } 
} 

denke ich, dass es tun soll, ich habe aber nicht getestet.

+1

Vielleicht könnten Sie ein Beispiel dafür zeigen und wie es im Debugger aussieht? Klingt interessant für mich. – HimBromBeere

+0

@HimBromBeere Ich habe ein Beispiel für Neugierige hinzugefügt. Ich kann auch nicht genug empfehlen, um ILSpy (oder Reflector) zu erhalten und die inneren Funktionen der Basisklassenbibliothek zu überprüfen. – strongbutgood

+0

Cool, wusste diese Funktion nicht. Allerdings wird es OP nicht helfen, da er etwas völlig anderes versucht, wie in seinem Kommentar zu sehen ist. – HimBromBeere

Verwandte Themen