Vakuum Skrevet 13. juli 2005 Del Skrevet 13. juli 2005 (endret) Kodet litt C#, men sliter med å få til hvordan man kan holde orden på ting som ikke er hardkodet inn i programmet. F.eks: public class Animal { public string name; public int weight; public string type; } Animal dog = new Animal(); dog.name = "Fido"; Animal dog2 = new Animal(); dog2.name = "Killroy"; 1: Hvordan kan\bør man gjøre det så man kan holde orden på hvilke dyr man har, og endre ting? 2: Er det mulig å få til sånn at man kan skrive i en textbox hva objektet skal hete, og ikke hardcore det inn i koden? F.eks Animal (textBox1.Text) = new Animal(); Endret 13. juli 2005 av Vakuum Lenke til kommentar
Mr Burns Skrevet 13. juli 2005 Del Skrevet 13. juli 2005 (endret) 1: Du kan kanskje lage en liste: ArrayList mineDyr = new ArrayList(); mineDyr.Add(dog); ... Hente ut hvor mange dyr... mineDyr.Count For å gå gjennom listen: foreach(Animal dyret in mineDyr) { noe... } Ang. spørsmål 2 Forstår jeg deg riktig, når jeg tror du har tenkt å opprette objekter som du ikke vil/må vite navnet på? Sannsynligvis ikke, da kompilerer sikkert ikke liker dette. Uansett forstår jeg ikke helt nytten av det... Endret 13. juli 2005 av Mr Burns Lenke til kommentar
Vakuum Skrevet 13. juli 2005 Forfatter Del Skrevet 13. juli 2005 2: La oss si man har en fil som inneholder dyr: objekt:type:navn fido:hund:Fido killroy:hund:Killroy Så vil man lage et objekt av hvert dyr så den får alle egenskapene til classen animal.. Greit at man kan ta en loop for å legge de inn, men hvordan ordner man så objektene får sin respektive navn. f.eks fido:hund:Fido får: Animal fido = new Animal(); fido.type = "hund"; fido.name = "Fido"; Såvidt jeg vet må alle objekter være hardkoda inn i sourcen, og da blir det jo umulig å lage en loop som lager flere objekter? Mulig jeg har helt feil vinkel på problemet, men føler meg veldig "låst" akkurat nå. Lenke til kommentar
Vakuum Skrevet 13. juli 2005 Forfatter Del Skrevet 13. juli 2005 Kan prøve å forklare litt nærmere hva jeg gjerne skulle ha gjort La oss si jeg har et 3d app, men en del firkanter i scenen. public class Firkant { string name; int worldX; int worldY; int worldZ; public void Flytt(int x, int y, int z) { //code } //Andre metoder } public class Firkanter { protected int i = 0; public ArrayList firkant = new ArrayList(); public void Add(string name) { firkant.Add(i); firkant[i] = name; firkant[i] = new Firkant(); i++; } } Dette er "teoretisk" kode, og poenget er bare å få fram hva jeg ønsker å gjøre.. Jeg antar at en arraylist ikke kan peke til instanser(?), men dette ville gjort det mye lettere. F.eks er det bare å ta Firkanter.firkant[1].Flytt(0,0,3) for å flytte firkant nr 2.. Håper dette viser litt bedre hva jeg vil oppnå. Lenke til kommentar
GeirGrusom Skrevet 13. juli 2005 Del Skrevet 13. juli 2005 Spørs veldig hvordan du lager det; public class Animal { internal string m_type; internal string m_name; internal int m_weight; public string Type { get { return m_type; } set { m_type = value; } } public string Name { get { return m_name; } set { m_name = value; } } public int Weight { get { return m_weight; } set { m_weight = value; } } } public class AnimalCollection : System.Collections.CollectionBase { public int Add(Animal object) { return List.Add(object); } public void Remove(Animal object) { List.Remove(object); } public void Remove(string name) { int x; for(x=0;x<List.Count;x++) { if(((Animal)List[x]).Name.ToLower() = name.ToLower()) List.RemoveAt(x); } } public Animal this[string name] { get { foreach(Animal item in List) { if(item.Name.ToLower() == name.ToLower()) return item; return null; } } } } int main() { AnimalCollection col = new AnimalCollection(); while(true) { Form1 new_form = new Form1(); if(new_form.ShowDialog() == DialogResult.Cancel) break; Animal new_animal = new Animal(); new_animal.Name = new_from.txtName.Text; new_animal.Type = new_form.txtType.Text; new_animal.Weight = (int)new_form.txtWeight.Text; col.Add(new_animal); } string animals; foreach(Animal item in col) { animals += item.Name + " is a " + item.type + "\n"; } MessageBox.Show("You have created " + col.Count + " animals.\n" + animals; } Dette programmet lager en liste, der du kan legge til masse dyr, det er ikke python du jobber med, men kompilert kode (delvis) Lenke til kommentar
Vakuum Skrevet 13. juli 2005 Forfatter Del Skrevet 13. juli 2005 Ser ut som en løsning, men desverre så funker ikke koden din. Noen referanser du har glemt å nevne? Lenke til kommentar
Vakuum Skrevet 13. juli 2005 Forfatter Del Skrevet 13. juli 2005 Fikk hjelp av en god venn, så fant ut av det public class Dyr { internal string navn; internal string type; public string Navn { get { return navn; } set { navn = value; } } public string Type { get { return type; } set { type = value; } } } public class DyrSamling { List<Dyr> samling = new List<Dyr>(); internal int nr = 0; public int Add(string setNavn, string setType) { samling.Add(new Dyr()); samling[nr].navn = setNavn; samling[nr].type = setType; nr++; return nr - 1; //Bedre måte å gjøre dette på?.. } public void Vis() { int i = 0; foreach (Dyr navn in samling) { //F.eks textBox1.Text = textBox1.Text + ", " + samling[i].navn; i++; } } } Lenke til kommentar
GeirGrusom Skrevet 15. juli 2005 Del Skrevet 15. juli 2005 ... hvorfor bruker du foreach, når du likevel har en teller? for(int i = 0;i<samling.Count;i++) { // F.eks. textBox1.Text += ", " + samling[i].navn } eller foreach(Dyr navn in samling) { // F.eks. textBox1.Text += ", " + navn.navn; } grunnen til at koden ikke fungerer er fordi Form1 ikke eksisterer, lag en Form1 med txtNavn, txtType og txtWeight. Egentlig burde dete gjøres i formen, og ike sånn jeg har gjort det, men dette var enklere for meg å skrive. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå