Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Klasse im eigenen Konstruktor neu initialisieren
_Bugrick_
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

Klasse im eigenen Konstruktor neu initialisieren

beantworten | zitieren | melden

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_
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5983
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
_Bugrick_
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16098

beantworten | zitieren | melden

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 );
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
_Bugrick_
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

beantworten | zitieren | melden

So werde ich es auch lösen, da ich keine Möglichkeit gefunden habe die ganze Logik sauber unterzukriegen. Danke!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo _Bugrick_,
Zitat
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
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1770

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers