[C#/OOP] Objekte dynamisch benamseln
Hansmaulwurf 03.12.2009 - 11:40 3864 14
Hansmaulwurf
u wot m8?
|
Hiho. Hab eine Frage bezüglich C# und Objekten. Folgendes, ich hab Klassen Huhn und Schaf. Die sollen auf einer Wiese rumlaufen und haben bestimmte Werte (Pos-x, Pos-y, Hunger, ...) aber ich will das der User eingeben kann wie viele Schafe er gern hätte, Parameter bekommen sie eh per Zufall. Also quasi User sagt "Gib mir 5 Schafe" und er erzeugt die Objekte wie folgend: schaf dolly1 = new schaf();
schaf dolly2 = new schaf();
...
schaf dolly5 = new schaf();
Wie kann ich das am gescheitesten machen, damit er mir die dynamisch erzeugt ? Danke schonmal
|
Neo1010
.
|
naja falls ich das richtig verstanden hab am besten gleich mit array.
n=anzahl der schafe
schleife .. i=0....i->n. schafe["dolly" + i]=new schaf(); end
|
COLOSSUS
AdministratorGNUltra
|
Dafuer gibt es entsprechende Datenstrukturen, wie z. B. Arrays oder Vektoren. Diese kannst du wohl auch in C# mit Referenzdatentypen befuellen.
In manchen Sprachen kann man (neue) Variablennamen dynamisch aus anderen Variablen zusammensetzen (Indirektion), das ist aber ziemlich dreckig.
|
quilty
Ich schau nur
|
Er will ja nur eine dynamische Liste. List<Schaf> meineSchafe = new List<Schaf>();
// ... lese anzahlSchafe vom User
for (int i = 0; i < anzahlSchafe; i++)
meineSchafe.Add(new Schaf());
Bissl über die Liste iterieren (die Frage kommt sicher auch noch). foreach (Schaf schaf in meineSchafe)
{
if(schaf.Alter > 1)
schaf.AbZurSchlachtbank();
}
// die Schafe könne auch über deren Index angesprochen werden z.B.
meineSchafe[3].Color = Colors.Black.
Bearbeitet von quilty am 03.12.2009, 12:01
|
Hansmaulwurf
u wot m8?
|
naja falls ich das richtig verstanden hab am besten gleich mit array.
n=anzahl der schafe
schleife .. i=0....i->n. schafe["dolly" + i]=new schaf(); end Das geht eben nicht, da C# iwie nur reine Strings als Variablennamen nimmt, und keine anderen Variablen. @COLLO : hä ? Ich versteh nicht ganz wie ich mir das Objekte erstellen spar, wenn ich Referenzen verwende. Klar wie ich drauf zugreif und sie füll, vorher muss ich sie aber erstellen, oder steh ich am Schlauch ?
|
Neo1010
.
|
hab zwar noch nicht so viel mit c# gearbeitet aber ich bin mir doch recht sicher das auch Stringverkettung in c# gibt und somit müsstest schon irgendwie "dolly" und deine laufvariable verketten können und somit als namen in zb. einem Array vergeben
|
tresh
Little Overclocker
|
Fuer sowas verwendet man normal Container und nicht arrays. Arrays sind nicht dynamisch. Ich kenn mich mit C# nicht aus, aber wahrscheinlich (hoffe ich zumindest) wird es irgendwelche dynamischen Containerklassen fuer z.B. Listen geben.
|
Neo1010
.
|
ja gibt es, wie schon von quilty angesprochen wäre dyn. liste wahrscheinlich eine der besten varianten
|
Hansmaulwurf
u wot m8?
|
Danke @ quilty. Aber heißen jetzt nicht alle Schafe "Schaf" und ich hab nur ein Objekt überladen ? Wobei dann sollt ich sie auch durch ne durchgehende Nummer identifizieren können wie zB Schaf.ID, oder ? thx an alle auf jeden fall edi:/ Ok, hat sich erledigt, steht eh noch unten in weiser Voraussicht
|
tresh
Little Overclocker
|
Dann musst du den Objekten irgendwie eine Identifikation zukommen lassen
|
quilty
Ich schau nur
|
Dann musst du den Objekten irgendwie eine Identifikation zukommen lassen Müssen nicht, wenn es ihm reicht sie über den Index identifizieren zu können bzw. Vergleiche über den Standard == Operator von object. Er kann der Schaf-Klasse natürlich ein Namens-Property verpassen, was jedoch wieder subopimal ist, weil vielleicht bekommt er ja mal ein auswärtiges Schaf das zufällig den gleichen Namen hat. Besser wäre eine Eindeutige ID wie z.B. die Ohrmarke oder so. Alternativ kann er seine Schafe auch in ein Dictionary werfen um sie als Key-Value-Pairs (Name-Schaf) zu halten. Dann weiß das Schaf selbst nichts vom Namen, sondern nur der "Halter". Das ist aber eher etwas für spezielle Situationen. Btw. falls du nicht explizit andere Coding Guidelines befolgen musst sind Klassen in C#/.NET mit einem Großbuchstaben zu beginnen. (also Schaf statt schaf)
|
BuSHidO
ist süß
|
In java tät mas ca so machen:
List<Schaf> = new List();
Schaf schaf1 = new Schaf("Karl"); Schaf schaf2 = new Schaf("Lisa");
List.add(schaf1); List.add(schaf2);
|
watchout
Legendundead
|
In java tät mas ca so machen:
List<Schaf> = new List();
Schaf schaf1 = new Schaf("Karl"); Schaf schaf2 = new Schaf("Lisa");
List.add(schaf1); List.add(schaf2); Das bezweifle ich stark, weil List in Java ein Interface ist (und nebenbei noch generisch) und du nur einen Datentyp angibst aber keinen Variablennamen, würde deine erste Zeile gleich mal einen Error werfen.
|
repi
Addicted
|
In java tät mas ca so machen:
List<Schaf> = new List();
Schaf schaf1 = new Schaf("Karl"); Schaf schaf2 = new Schaf("Lisa");
List.add(schaf1); List.add(schaf2); stimmt net ganz. ArrayList<Schaf> list = new ArrayList(); //sollt klappen //weiterer Code so hast du eine generische liste mit namen 'list' die nur Objekte vom Typ Schaf aufnimmt. hoffe ich hab mich nicht verhaut.
|
DKCH
...
|
naja, eigentlich List<Schaf> list = new ArrayList<Schaf>(); , wenn man brav gegen interfaces programmiert wie sich das gehört, und keine unchecked warnings haben will
|