Gå til innhold

Anbefalte innlegg

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 av Vakuum
Lenke til kommentar
Videoannonse
Annonse

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 av Mr Burns
Lenke til kommentar

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

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

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

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

... 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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...