Konstruktoraufruf im Konstruktor?

Hallo liebe Community, ich habe eine Frage zu Konstruktoraufrufen innerhalb von Konstruktoren.

Also wie das geht weiß ich:
C#:
public KLASSE(object Parameter) : this() { .. }

Soweit, so gut. Jedoch muss ich jetzt eine Abfrage machen, ob der Parameter überhaupt gültig ist, bevor ich den Konstruktor aufrufe, was bei mir aktuell folgendermaßen aussieht:

C#:
public VersionInfo(byte[] Data, int StartIndex)
    : this(Data[StartIndex], Data[StartIndex + 1], Data[StartIndex + 2], Data[StartIndex + 3])
{
    if (Data.Length < StartIndex + 3)
        throw new ArgumentException("Das angegebene Array verfügt nicht über eine ausreichende Bytezahl für eine Versionsnummer.");
}

Jetzt ist meine Frage: Wird der zusätzlich aufgerufene Konstruktor VOR dem aktuellen Konstruktorcode ausgeführt oder danach?
Wenn VOR, wie kann ich das sonst lösen, außer nochmal alles im Code selbst zuzuweisen?

Danke schon mal im Vorraus;

Mfg
JustShinigami
 

sheel

I love Asm
Hi

a)
Auf die eigene Exception verzichten und eine automatische ArrayIndexOutOfBounds bekommen

b)
Mach eine kleine, private Prüfmethode. Bekommt das Array und den gewünschten Index
und erzeugt entweder die Exeption oder gibt den Wert aus dem Array zurück.
Als Parameter vom Parentkonstruktor nimmst du dann nicht direkt die Arrayelemente,
sondern rufst eben diese Prüfmethode auf.

c)...irgendwas :D
Möglichkeiten gibts schon noch mehrere, aber wie sinnvoll die sind...
 
Hmm, also gehe ich mal davon aus, dass der Konstruktoraufruf VOR dem Code ausgeführt wird. Dann werd ich wohl B machen, denn ich vertraue lieber meinen eigenen Exceptions ;)
Wird dann wohl in etwa so aussehen:
C#:
private void CONSTRUCT(byte[] Data, int StartIndex) {...}
Vielen Dank für die Tipps, damit ist das Thema auch erledigt :)

Mfg
JustShinigami
 

DrMueller

Erfahrenes Mitglied
Funktioniert es denn so? Ich hätte erwartet, dass die tiefste Stufe zuerst aufgerufen wird, dannn der Code der oberen?
 

sheel

I love Asm
Nein, das ist umgekehrt.
Die Kindklasse sollte ja sinnvollerweise auf einer funktionierenden Vaterklasse aufbauen,
dafür muss die Vaterklasse aber zuerst die eigenen Initialisierungen bekommen.
 

DrMueller

Erfahrenes Mitglied
Hm ich sollte mal die ganze Frage lesen. Ich dachte er will zwischen dem Aufruf vom Child Konstruktur und dem Aufruf des Base Konstruktors Code implementieren.

Danke für die Geduld :D