Avatar billede thomas_fogh Nybegynder
28. november 2003 - 11:19 Der er 6 kommentarer og
1 løsning

Array af klasser?

Jeg vil gerne lave et dynamisk array af min egen klasse...
Hvordan gør jeg det?

Jeg har tænkt på følgende:
ArrayList objects = new ArrayList();
objects.Add(new myClass);

Men hvordan får jeg den enkelte instans' variabler?
objects[0].variabel virker ikke...

(Jeg har desværre ikke mulighed for at se
jeres svar før mandag.
Jo bedre svar = jo flere ekstra point)
Avatar billede arne_v Ekspert
28. november 2003 - 11:21 #1
((MyClass)objects[0]).variabel
Avatar billede arne_v Ekspert
28. november 2003 - 11:25 #2
Du kan overveje at lave en wrapper klasse d.v.s. en klasse som
indeholder en ArrayList og har en Add og en indexer med korrekt type.
Avatar billede clausc Nybegynder
28. november 2003 - 12:24 #3
Nedarv fra CollectionBase.
Avatar billede arne_v Ekspert
28. november 2003 - 12:32 #4
Jeg vil klart anbefale encapsulate fremfor extend til den slags.
Avatar billede arne_v Ekspert
28. november 2003 - 23:17 #5
Eksempel på det første:

using System;
using System.Collections;

class MainClass
{
    public static void Main(string[] args)
    {
        ArrayList lst = new ArrayList();
        lst.Add(new MyData(1));
        lst.Add(new MyData(2));
        lst.Add(new MyData(3));
        for(int i = 0; i < lst.Count; i++)
        {
            MyData md = (MyData)lst[i];
            Console.WriteLine(md.V);
        }
    }
}

public class MyData
{
    private int v;
    public MyData(int v)
    {
        this.v = v;
    }
    public MyData()
    {
        v = 0;
    }
    public int V
    {
        get
        {
            return v;
        }
        set
        {
            v = value;
        }
    }
}
Avatar billede arne_v Ekspert
28. november 2003 - 23:17 #6
Eksempel på det andet:

using System;
using System.Collections;

class MainClass
{
    public static void Main(string[] args)
    {
        MyList lst = new MyList();
        lst.Add(new MyData(1));
        lst.Add(new MyData(2));
        lst.Add(new MyData(3));
        for(int i = 0; i < lst.Count; i++)
        {
            MyData md = lst[i];
            Console.WriteLine(md.V);
        }
    }
}

public class MyList
{
    private ArrayList al;
    public MyList()
    {
        al = new ArrayList();
    }
    public void Add(MyData md)
    {
        al.Add(md);
    }
    public int Count
    {
        get
        {
            return al.Count;
        }
    }
    public MyData this[int ix]
    {
        get
        {
            return (MyData)al[ix];
        }
    }
}

public class MyData
{
    private int v;
    public MyData(int v)
    {
        this.v = v;
    }
    public MyData()
    {
        v = 0;
    }
    public int V
    {
        get
        {
            return v;
        }
        set
        {
            v = value;
        }
    }
}
Avatar billede roger Nybegynder
30. november 2003 - 06:55 #7
public class MyObject{
        public int a;
        public int b;
    }

    public class MyList{
        private ArrayList list;

        public MyList(){
            list = new ArrayList();
        }

        public MyObject this[int index]{
            get{return (MyObject)list[index];}
            set{list[index]=value;}
        }

        public void Add(MyObject o){
            list.Add(o);
        }

        public void Insert(int index, MyObject o){
            list.Insert(index,o);
        }
    }

Håber ovenstående var det du mente.

MyList list = new MyList();
//tilføj nogle MyObject
list[index]  <--- returnerer objekter af typen MyObject

dvs..

list[0].a = 5;

eller

int antal = list[5].b;

Mht. listen kunne du evt. arve fra ArrayList og override de metoder du ønsker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester