Avatar billede trenskow Nybegynder
14. juli 2006 - 14:03 Der er 13 kommentarer og
2 løsninger

Liste i klasse, get og set metode

Hejsa

Jeg sidder her, og er igang med at kode en lille app til mig selv, og kommer i tanke om en speciel måde at programmere det på... problemet er bare, at jeg ikke kan huske hvordan, og hvad det hedder, så håber der er en venlig sjæl her som kan hjælpe mig igang.

Jeg bruger .NET2.0 C#

Eksempel.
Jeg vil gemme tænkte pitstop resultater for en F1 sæson.
jeg har tænkt mig 3 klasser. Saeson, Loeb, Pitstop.

Saeson skal gemme en liste over sæsoner.
Loeb skal gemme en liste med informationerne om et løb.
Pitstop skal gemme informationer om pitstop i liste.

Jeg har engang lært at man i de forskellige klasser kan lave en liste, som man kan returnere og sætte nye eksempler ind

Således at koden ville se nogenlunde sådan her ud.
Saeson.Loeb.Pitstop.InformationManSkalBruge;

Jeg har siddet og kodet lidt på eksemplet
public class PitStop
    {
        private List<PitStop> pitstops;

       
        private int lap, nr, pctTyreLeft, pctFuelLeft, fuelAdd;
        private bool rain;
    }

Så har jeg lavet get og set metoder på attributterne, men hvordan er det lige get og set metoden skal være på List<PitStop> ?

Samme med Saeson og loeb.

På den gamle måde jeg lavede det på, ville jeg jo bare lave List<Pitstop> i Loeb's klassen.
Avatar billede arne_v Ekspert
14. juli 2006 - 14:32 #1
C# bruger ikke Get og Set metoder men derimod properties

public List<PitStop> Pitstops
{
  get { return pitstops; }
  set [ pitstops = value; }
}
Avatar billede md_craig Nybegynder
14. juli 2006 - 15:10 #2
Det vil dog formentligt være nok med en readonly property ud fra det du siger, set vil jo erstatte arraylisten, og ikke et givent element i den, så med mindre du er interesseret i at manipulere den referance direkte ude fra klassen/objectet selv, så ville jeg mene at

public List<PitStop> Pitstops { get { return this.pitstops; } }

er dækkende nok... da du dermed stadig kan arbejde med Listen ude fra, altså fjerne, sætte ind, ryde osv. men du kan ikke slette eller overskrive referencen til listen...
Avatar billede trenskow Nybegynder
14. juli 2006 - 20:19 #3
@Arne: Det er sandt ja, det hedder properties.

Den som du har skrevet tænkte jeg også på, men jeg erindrer noget mere indviklet da jeg var på kursus(kan ikke finde mine papirer med kode derfra... øv øv) at jeg lavede en properties på den liste som var lidt mere indviklet.
Avatar billede arne_v Ekspert
14. juli 2006 - 20:25 #4
kan det have vaeret en indexer som delegatede ned i listen ?
Avatar billede arne_v Ekspert
14. juli 2006 - 20:26 #5
md_craig har iovrigt nok ret i at det ville vaere lidt usaedvaneligt at have brug for
en set paa listen
Avatar billede hmortensen Nybegynder
14. juli 2006 - 20:28 #6
Derudover giver det vel ikke mening at returnere en liste med pitstops fra pitstop klassen. Skal vel rykkes over i loebs klassen.
Avatar billede trenskow Nybegynder
14. juli 2006 - 20:48 #7
@Arne: Måske.. jeg syntes bare at kunne huske det var vældigt smart, men en lille smule svære at kode. Har søgt rundt diverse steder på nettet, men ikke rigtigt fundet noget. Har du nogle links?

@hmortensen: Det er ligepræcis det som er meningen, at Pitstopklassen holder styr på alt med pitstops, også listen.
Avatar billede arne_v Ekspert
14. juli 2006 - 20:54 #8
noget a la:

    public Pitstop this[int ix]
    {
        get
        {
            return pitstops[ix];
        }
    }
Avatar billede arne_v Ekspert
14. juli 2006 - 20:55 #9
hvis den liste skal indeholde alle pistops, saa skal den vel som minimum vaere static ??

men iovrigt er det vist ikke helt normal OOD
Avatar billede md_craig Nybegynder
15. juli 2006 - 10:40 #10
Arh... mon ikke det er alle pitstops for et løb den i loeb holder styr på??
Ellers giver den objectmodel da ikke meget mening...

Sådan at det kan ses som:

Season 01
  Loeb 01.01
      Pitstop 01.01.A
      Pitstop 01.01.B
      Pitstop 01.01.C
  Loeb 01.02
      Pitstop 01.02.A
      Pitstop 01.02.B
      Pitstop 01.02.C
Season 02
  Loeb 02.01
      Pitstop 02.01.A
      Pitstop 02.01.B
  Loeb 02.02
      Pitstop 02.02.A
      Pitstop 02.02.B
      Pitstop 02.02.C
Avatar billede md_craig Nybegynder
15. juli 2006 - 10:53 #11
Desuden, med det arne giver sidst, så skal du gøre en af 2 ting...

A... Enten beholde denne get:
public List<PitStop> Pitstops { get { return this.pitstops; } }

B... Eller implementere Add, Remove osv. metoder...

Gennerelt bruges index properties jo i forbindelse med collections...
....

Sidst men ikke mindst...
Så vil jeg nu give @hmortensen ret i at det ville virke mest logisk hvis det var loeb klassen der havde listen af pitstop elementer....

Sådan at det bliver til:

F1.cs
- Overordnet singleton som holder styr på Season'er...

Season.cs
- Klasse som beskriver Én season, klassen indeholder 0..* Loeb
- Desuden indeholder klassen informationer om seasonen, så som perioden.

Loeb.cs
- Klasse som beskriver Ét loeb, klassen indeholder 0..* Pitstop
- Desuden indeholder klassen informationer på løbet, så som Sted(bane) og tidspunkt...

Pitstop.cs
- Klasse som beskriver et enkelt Pitstop
- Inderholder informationer om hvem der var i Pit, hvornår det fandt sted, evt. hvorfor mm.

--------------------------------------------------------------------------------------

Det ville være en object model der for mig gav langt mere mening... og giver også mere mening i forbindelse med den Object Orienterede tankegang...
Avatar billede trenskow Nybegynder
15. juli 2006 - 13:02 #12
@md_craig: Lige nøjagtigt.. den skal kun holde styr på pitstop i et løb, og vil nok lave det i den efter metode b.

Jeg takker for alle svarene, og vil kigge på det en af de nærmeste dage.

Hvis de herrer vil ligge et svar, så skal jeg forsøge at dele sol og vind lige :-)
Avatar billede arne_v Ekspert
15. juli 2006 - 17:56 #13
det er faktisk ikke helt ualmindeligt at delegate til en standard collection
fremfor at arve fra den
Avatar billede arne_v Ekspert
15. juli 2006 - 17:57 #14
og et svar fra mig
Avatar billede md_craig Nybegynder
15. juli 2006 - 19:23 #15
og fra mig
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