C#: In Konstruktor auf Basisklasse und eigenen Konstruktor verweisen

Gast #1301439
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
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
Gast
> wieso implementierst Du dann nicht eine init-Methode, die in beiden
> Konstruktoren aufgerufen wird?
Das ist der entscheidende Hinweis den ich suchte.

Vielen Dank.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.