www.mikrocontroller.net

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


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.