Forum: PC-Programmierung C#: In Konstruktor auf Basisklasse und eigenen Konstruktor verweisen


von Martin (Gast)


Lesenswert?

Hallo zusammen,

ich habe in C# eine Basisklasse "Base" und eine davon abgeleitete Klasse 
"FromBase". Der Konstruktor der Basisklasse ist:
public Base(string a)
Der Konstruktor der abgeleiteten Klasse ist:
public FromBase(string a) : base(a)
Damit wird ja zuerst der klasseneigene Konstruktor abgearbeitet und 
anschliessend der Konstruktor der Basisklasse. Soweit klar.

Jetzt möchte ich jeweils einen zweiten Konstruktor einführen (ohne 
Übergabeparameter), also so:
public Base()  und
public FromBase() : base()

Aber eigentlich möchte ich im Konstruktor FromBase(string a) auf den 
zweiten Konstruktor "verweisen", um doppelten Code zu vermeiden, d.h. 
FromBase() und FromBase(string a) sind weitgehend identisch. Mein Wunsch 
würde praktisch so aussehen:
public FromBase(string a) : base(string a) : this()


Wie kann ich solche "doppelten" Weiterleitungen implementieren?

Ich hoffe mein Anliegen ist halbwegs verständlich...

Danke,
Martin

von Markus (Gast)


Lesenswert?

Hi Martin,

das was Du vorhast, kann leider nicht funktionieren:

> Damit wird ja zuerst der klasseneigene Konstruktor abgearbeitet und
> anschliessend der Konstruktor der Basisklasse. Soweit klar.

Die Aussage ist falsch! Es wird IMMER zuerst der Konstruktor der 
Basis-Klasse, dann der Konstruktor der erbenden Klasse ausgeführt. Und 
das Objekt hat erst dann einen definierten Zustand, wenn ALLE 
Konstruktoren abgearbeitet sind.

Es klappt deshalb auch nicht, in der Basisklasse eine abstrakte Methode 
zu definieren (die in der erbenden Klasse implementiert wird) und diese 
im Konstruktor der Basisklasse aufzurufen.

Wenn aber, wie in Deinem Fall, in den Konstruktoren FromBase() und 
FromBase(string) gemeinsamer Code verwendet werden soll, wieso 
implementierst Du dann nicht eine init-Methode, die in beiden 
Konstruktoren aufgerufen wird? Das würde zumindest den doppelten Code 
auf ein Minimum reduzieren.

Gruß
Markus

von Martin (Gast)


Lesenswert?

> wieso implementierst Du dann nicht eine init-Methode, die in beiden
> Konstruktoren aufgerufen wird?
Das ist der entscheidende Hinweis den ich suchte.

Vielen Dank.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.