14 Stimmen

C# erbt den Konstruktor nicht von der Basisklasse

Mögliche Duplikate:
Konstrukteure und Vererbung
Warum werden Konstruktoren nicht vererbt?

Wenn ich eine Klasse definiere, die von einer Basisklasse geerbt wurde, muss ich alle ihre Konstruktoren neu definieren. Ich frage mich, warum C# nicht unterstützen erben von Basisklasse Konstruktoren?

0 Stimmen

Ich glaube nicht, dass dies in einer anderen Sprache (wie Java) der Fall ist. Nur der Standard-Ctor (falls vorhanden) wird von der untergeordneten Klasse aufgerufen.

0 Stimmen

Nun, weil es ein anderes Objekt ist. (die Funktionen sind dieselben)

2 Stimmen

@KarlKnechtel Weil es sinnvoll ist, wenn in einer Kindklasse keine Konstruktoren explizit definiert sind, die Konstruktoren der Basisklasse zu übernehmen. Die Basisklasse kann Variablen haben, die man mit dem Konstruktor setzen kann, wie z.B. (X, Y, Farbe), die sich in der abgeleiteten Klasse nicht ändern würden, d.h. der Konstruktor wäre weiterhin gültig.

19voto

nan Punkte 18346

Konstruktoren werden nicht vererbt, weil wir nicht in der Lage wären, genau zu bestimmen, wie unsere abgeleiteten Klassenobjekte instanziiert wurden. Wenn alle abgeleiteten Klassen die Konstruktoren der Elternklasse implizit verwenden würden, wäre das meiner Meinung nach ein Problem, denn wenn wir vergessen, den Konstruktor neu zu definieren, könnte das Objekt falsch initialisiert worden sein. Wenn Sie möchten, dass der Konstruktor der abgeleiteten Klasse dasselbe tut wie der Konstruktor der Elternklasse, rufen Sie ihn mit Basis .

Beachten Sie auch, dass der Basisklassenkonstruktor (ohne Parameter) automatisch ausgeführt wird, wenn Sie keinen anderen Basisklassenkonstruktor mit expliziten Argumenten aufrufen. Also der Aufruf von base() is redundant .

7voto

Pranav Punkte 8073

Der Konstruktor der abgeleiteten Klasse ruft implizit den Konstruktor der Basisklasse, in der Java-Terminologie Oberklasse genannt, auf. Bei der Vererbung werden alle Konstruktoren der Basisklasse vor den Konstruktoren der abgeleiteten Klasse aufgerufen, und zwar in der Reihenfolge, in der die Klassen in der Klassenhierarchie erscheinen.

Wenn nun die Basisklasse mehr als einen Konstruktor hat, muss die abgeleitete Klasse festlegen, welcher davon aufgerufen werden soll. Zum Beispiel:

public class CoOrds
{
    private int x, y;

    public CoOrds()
    {
        x = 0;
        y = 0;
    }

    public CoOrds(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

//inherits CoOrds:
public class ColorCoOrds : CoOrds
{
    public System.Drawing.Color color;

    public ColorCoOrds() : base ()
    {
        color = System.Drawing.Color.Red;
    }

    public ColorCoOrds(int x, int y) : base (x, y)
    {
        color = System.Drawing.Color.Red;
    }
}

Für weitere Informationen besuchen Sie bitte die Website: http://msdn.microsoft.com/en-us/library/ms228387(v=vs.80).aspx

0 Stimmen

Dies ist die eigentliche Siegerantwort auf die ursprüngliche Frage. Obwohl es sich um einen alten Beitrag handelt, habe ich keinen Zweifel daran, dass ich Ihre Antwort hochstimme. Sie sind der Einzige, der die Frage richtig beantwortet hat. Das ist genau das, wonach ich gesucht habe, und es funktioniert so, wie Sie es beschrieben haben. Danke!

2voto

AsifQadri Punkte 2388

Nur Membervariablen und Membermethoden können von einer Klasse an eine abgeleitete Klasse vererbt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X