[C#] Statt Objekten nur Typ im Konstruktor übergeben?

...komplette Frage anzeigen

3 Antworten

Wieso möchtest du im Konstruktor zufällig die Liste befüllen? Ich würde sagen, dass das ein Designfehler ist.

Könntest schon 3 booleans übergeben, aber wenn du mehr Klassen hast die das Interface implementieren wirds problematisch.

Würde dazu raten den "Stall" anders zu befüllen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Crysali
18.06.2017, 19:47

Ja genau, die Anzahl der möglichen Tiere ist unbekannt. Ich hatte erst überlegt, dass mithilfe eines enum zu machen, aber das muss man dann immer ändern, wenn man ein neues Tier erstellt.

Im Grunde so etwas:

public House ( /* mögliche Funktionen */ ) {
for( int index = 0; index < anzahlRäume; ++index){
int zufallsZahl = RNG.Next(0, anzahlVonMöglichenFunktionen)
meineRäume[index] = default(möglicheFunktion[zufallsZahl]);
}

}

Wie würdest du den Stall befüllen ?

0

Ja, sieht wirklich nach Designfehler aus - dazu müssten wir mehr über die Hintergründe kennen. Ich würde auch zu einer weiteren Methode à la "StallFuellen()" raten.

Abseits dessen: Erstell dir eine (statische!) Factorymethode, die ein zufälliges Tier erzeugt, und eine weitere, welche die gewünschte Anzahl davon hintereinander hängt (for (int i = 1; i < j; i++) yield return GeneriereZufallsTier();). Und diese rufst du dann von StallFuellen() aus auf:

public class MeinStall { 
private ITier[] meineTiereImStall; public void StallFuellen() => meineTiereImStall = GeneriereZufallsTiere();
}
Antwort bewerten Vielen Dank für Deine Bewertung

du kannst mehrere Überladungen erstellen

einfach 

public class MeinStall {

public MeinStall (...) {...}

public  MeinStall(...) {...}

}

dann kannst dundie klasse ganz normal mit den passenden parameter instanzieren.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Crysali
18.06.2017, 19:49

Dann bräuchte ich aber einen Konstruktor für jedes Tier, oder nicht ? Möglicherweise können auch mehrere Tiere in einem Stall sein, das wird dann ziemlich unübersichtlich, ich frage mich deshalb, ob es da etwas Allgemeineres gibt

0

Was möchtest Du wissen?