Laden...

Klasse im eigenen Konstruktor neu initialisieren

Erstellt von _Bugrick_ vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.664 Views
_
_Bugrick_ Themenstarter:in
48 Beiträge seit 2011
vor 11 Jahren
Klasse im eigenen Konstruktor neu initialisieren

Hallo,

ich möchte wie unten im Code-Snippet ersichtlich einem Konstruktor einen String übergeben, der zwei Zahlen enthält. Und dort sollen die beiden Zahlen dann einem anderen Konstruktor übergeben werden. Nur wenn ich das mach, dann bekomm ich Schwierigkeiten "this" zu setzen. Nun meine Frage, gibt es da einen Trick oder muss ich hier eine statische Methode erfinden, die dann erst eine Instanz der Klasse erzeugt und zurückgibt? So z. B.:

Test tst = Test.CreateInstance("12,49");

Hier das Snippet:

public class Test
	{
		public Test(string str)
		{
			//Aufbau vom String: Zahl1,Zahl2
			//Beispiel: 12,49

			string[] strParts = str.Split(',');

			Test tst = new Test(int.Parse(strParts[0]), int.Parse(strParts[1]));
			this = tst;

			//oder
			//this tst = new Test(int.Parse(strParts[0]), int.Parse(strParts[1]));
		}

		public Test(int int1, int int2)
		{
			//Rechne etwas
		}
	}

Danke schonmal für eure Hilfe!

Gruß
Bugrick

5.657 Beiträge seit 2006
vor 11 Jahren

Hi Bugrick,

hier mal ein Beispiel aus der Doku, das ist wahrscheinlich das, wonach du suchst:

public Employee(int weeklySalary, int numberOfWeeks)
    : this(weeklySalary * numberOfWeeks)
{
}

Christian

Weeks of programming can save you hours of planning

_
_Bugrick_ Themenstarter:in
48 Beiträge seit 2011
vor 11 Jahren

Das hier könnte Tatsächlich so funktionieren:

public Test(string str) : this(int.Parse(str.Split(',')[0]), int.Parse(str.Split(',')[1]))
{
}

Problem ist, dass ich noch sehr viel Logik habe, die ich aus dem String raus ziehe, beispielsweise falls ungültige Zeichen drin sind. Aber ich seh mir mal an wie sich das alles verhält und melde mich.

Danke für die schnelle Antwort schon mal.

16.807 Beiträge seit 2008
vor 11 Jahren

Für mein Geschmack gehört keine Logik in einen Konstruktor.
Ich würde hier mit einer statischen Methode der Klasse arbeiten, die mir anhand des Strings das Objekt zurück gibt.

var myEmployee = Employee.CreateByXY( foo );

_
_Bugrick_ Themenstarter:in
48 Beiträge seit 2011
vor 11 Jahren

So werde ich es auch lösen, da ich keine Möglichkeit gefunden habe die ganze Logik sauber unterzukriegen. Danke!

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Bugrick,

da ich keine Möglichkeit gefunden habe die ganze Logik sauber unterzukriegen

public Test(string str) : this(GetValue (str, 0), GetValue (str, 1))

mit einer privaten statischen Methode mit Namen GetValue o.ä.

herbivore

U
1.688 Beiträge seit 2007
vor 11 Jahren

Hallo,

am einfachsten wäre es doch, die Logik von "Rechne etwas" in eine neue Methode RechneEtwas(int, int) auszulagern und aus beiden Konstruktoren aufzurufen.