So rufen Sie eine Basisklasseninstanz aus einer abgeleiteten Klasse ab

9

Ich weiß nicht, ob das möglich ist, aber ich versuche, die Basisklasseninstanz aus einer abgeleiteten Klasse zu bekommen. In C # kann ich das Schlüsselwort base verwenden, um auf Eigenschaften und Methoden der Basisklasse zuzugreifen (natürlich), aber ich möchte base selbst verwenden. Der Versuch, dies zu tun, führt dazu, dass "Verwendung der Schlüsselwortbasis" in diesem Kontext nicht gültig ist Fehler.

Beispielcode

%Vor%     
OneSource 08.10.2013, 08:46
quelle

6 Antworten

14

Wenn Sie mit einer Instanz der abgeleiteten Klasse arbeiten, gibt es keine base instance . Ein Beispiel:

%Vor%

Was nicht in B möglich ist:

%Vor%

Sie können so etwas tun:

%Vor%

Und Sie können eine andere Methode wie

hinzufügen %Vor%

Und dann kannst du

%Vor%

Also ist diese GetBase() -Methode wahrscheinlich das, was Sie wollen.

Die Pointe ist: Wenn Sie eine Instanz von B haben, erbt sie alle Eigenschaften und das nicht überschriebene Verhalten von A , aber sie besteht nicht aus einer Instanz von B , die ein (versteckt aber automatische) Referenz auf eine Instanz von A . Sie können Ihre B -Instanz in A umwandeln, aber es bleibt eine Instanz von B .

    
Matten 08.10.2013, 08:53
quelle
3

Nun, du stellst keinen Code für deine Frage zur Verfügung, aber ich überlasse es dir, etwas wie

zu wollen %Vor%

Aber denken Sie daran, dass MyBase wirklich vom Typ Derived

ist %Vor%     
Alessandro D'Andria 08.10.2013 09:01
quelle
0

Das Problem wurde nicht so klar wie möglich erklärt. In der Regel ist es jedoch besser, eine abstrakte Basisklasse und Methoden zu verwenden und dann die erforderlichen Methoden zu überschreiben. Sie können dann in diesem Fall die base.method-Methode verwenden (andernfalls haben Sie gerade eine Instanz der abgeleiteten Klasse hochgespielt).

%Vor%

}

    
jim tollan 08.10.2013 08:52
quelle
0

Die abgeleitete Instanz ist die Basisinstanz. Es ist nur eine Objektinstanz im Speicher.

Beispiel:

%Vor%

thing ist eine Instanz von A und ist auch eine Instanz von B .
Du könntest zum Beispiel diese Zeile schreiben:
B thing2 = thing;

    
Caleb 08.10.2013 08:55
quelle
0

Punkt 1: Wenn Sie die Basisklasseninstanz in der untergeordneten Klasse erstellen möchten, ist dies nicht sinnvoll. Sie haben bereits öffentliche Dinge im Kind zugänglich.

Punkt 2: Wenn Sie die untergeordnete Klasse initialisiert haben und jetzt die Basisklasse "instance" erhalten möchten, wie erhalten Sie das, wenn es nicht initialisiert ist (Weil die Basisklasseninstanz jetzt nicht im physischen Speicher vorhanden ist, und das ist nur Kindklasse Instanz dort)?

    
ataurrehman 08.10.2013 10:12
quelle
0
%Vor%     
Subin Ninan 05.06.2016 09:56
quelle