C#: In Konstruktor auf Basisklasse und eigenen Konstruktor verweisen

Gast #1301439
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
Gast #1301658
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren