C# Vererbung überladener Konstruktoren

Hallo zusammen,
ich nutze Visual C# 2008 (gibt kein 2010 in der Schule) und möchte einen überladenen Konstruktor mit Argumenten vererben.

Ich habe folgende Basisklasse:

public class Plain
{
public Plain(double pWingLength, double pHeight, double pLength,
string pModel, double fMaxSpeed, double fMaxHeight, double fMinSpeed)
{
double plainWingLength = pWingLength;
double plainHeight = pHeight;
double plainLength = pLength;
string plainModel = pModel;

double flightMaxSpeed = fMaxSpeed;
double flightMinSpeed = fMinSpeed;
double flightMaxHeight = fMaxHeight;
}

//Eigenschaften
double speed = 0;
double x = 0;
double y = 0;
double z = 0;

public double moveAbscissa(double distance)
{
y += distance;
return y;
}
}

von dieser Basisklasse soll eine andere den Konstruktor erben:

public class PassengerPlain : Plain
{
public PassengerPlain() : this(pWingLength, pHeight, pLength,
pModel, fMaxSpeed, fMaxHeight, fMinSpeed)
{

}
}

Visual Studio unterstreicht mir die Argumente des geerbten Konstruktors und meldet: "Der Name ‚argument‘ ist im aktuellen Kontext nicht vorhanden.
Kann mir da einer auf die Sprünge helfen?

ich nutze Visual C# 2008 (gibt kein 2010 in der Schule) und
möchte einen überladenen Konstruktor mit Argumenten vererben.

Ich kenne leider C# überhaupt nicht.

danke dir für deine antwort

C++ != C#

Wie auch immer, die Variablen sind an dieser Stelle ja auch einfach nicht definiert. Woher soll denn der ctor der abgeleiteten Klasse lokale Variablen aus dem ctor der Basisklasse kennen?

Sascha

Hallo Friendly,

wie sollte das auch funktionieren?
Die Parameter im this() haben weder eine Deklaration noch Definition.

Entweder die abgeleitete Klasse PassengerPlain erhält einen Konstruktor mit allen Parametern (wie bei Basisklasse) oder nur einen Teil der Parameter, dann mit Default-Werten im this() für den anderen Teil der Parameter. Oder du schreibst im this nur Default-Werte und der Konstruktor von PassengerPlain kann sonst so bleiben (ohne Parameter).

z.B.
public PassengerPlain()

this (0, 0, 0, null, 0, 0, 0)

Ach ja, und statt this() bitte base() benutzen

Hallo Friendly,

wie sollte das auch funktionieren?
Die Parameter im this() haben weder eine Deklaration noch Definition. Außerdem benutzt man base() statt this().

Entweder die abgeleitete Klasse PassengerPlain erhält einen Konstruktor mit allen Parametern (wie bei Basisklasse) oder nur einen Teil der Parameter, dann mit Default-Werten im base() für den anderen Teil der Parameter. Oder du schreibst im base() nur Default-Werte und der Konstruktor von PassengerPlain kann sonst so bleiben (ohne Parameter).

z.B.
public PassengerPlain() : base (0, 0, 0, null, 0, 0, 0)

Ich danke dir/euch für eure antworten. ich hatte nicht verstanden das die variablen im konstruktor der ableitenden klasse erneut deklariert werden muss.

Hallo,

so muss der Konstruktor der erbenden Klasse aussehen:

public PassengerPlain(double pWingLength, double pHeight, double pLength, string pModel, double fMaxSpeed, double fMaxHeight, double fMinSpeed)
: base(pWingLength, pHeight, pLength, pModel, fMaxSpeed, fMaxHeight, fMinSpeed)

Es wird dann zuerst der Konstruktor der Basisklasse ausgeführt. Soweit ich weiß, ist das auch zwingend notwendig. Einen Konstruktor kann man nicht überladen.
Übrigens, Falls du ein Flugzeug meinst: schreibt sich „Plane“.

Viel Erfolg damit,
Michael

Hallo Friendly

Der Konstruktor der Basisklasse muss so definiert werden:

public class PassengerPlain : Plain
{
public PassengerPlain(double pWingLength, double pHeight, double pLength, string pModel, double fMaxSpeed, double fMaxHeight, double fMinSpeed)
: base(pWingLength, pHeight, pLength, pModel, fMaxSpeed, fMaxHeight, fMinSpeed)
{

}
}

Ich hoffe, die Hilfe kam nicht zu spät :smile:

Grüsse

public PassengerPlain() : this(pWingLength, pHeight, pLength,
pModel, fMaxSpeed, fMaxHeight, fMinSpeed)

Woher soll er denn wissen, welche Werte er weitergeben soll?

so geht es:
PassengerPlane(double pWingLength, double pHeight, double pLength,
string pModel, double fMaxSpeed, double fMaxHeight, double fMinSpeed)

this(pWingLength, pHeight, pLength, pModel, fMaxSpeed, fMaxHeight, fMinSpeed)

nur leider ist deine Ableitung noch nicht sinnvoll - was kann PassengerPlane, das Plane noch nicht konnte?

PassengerPlane(double pWingLength, double pHeight, double pLength,
string pModel, double fMaxSpeed, double fMaxHeight, double fMinSpeed, int maxSeats)

this(pWingLength, pHeight, pLength, pModel, fMaxSpeed, fMaxHeight, fMinSpeed)

so könnte das Sinn machen, weil man auch noch die Sitzzahl angibt…