Avatar billede repsak Nybegynder
08. december 2003 - 10:13 Der er 17 kommentarer og
1 løsning

Property syntaks

Jeg har et lille syntaks spørgsmål:

Jeg har:
class X{
  IList list = new Arraylist();
  ...
}

class Y{
  Y(){
    object obj = new X().List[3]
  }
}

Hvordan laver jeg en property i class X så jeg kan kalde den som her i class Y?
Avatar billede nielsbrinch Nybegynder
08. december 2003 - 10:19 #1
Mener du sådan her?

class X{
  public IList List = new Arraylist();
  ...
}

class Y{
  Y(){
    object obj = new X().List[3]
  }
}
Avatar billede repsak Nybegynder
08. december 2003 - 10:23 #2
nej jeg mener
class X{
  private IList list...

  public List[]{  //kender ikke syntaks
    get{
      return list[3]
    }
  }
}

således at jeg henter værdien igennem en index-property. You see? :-)
Avatar billede arne_v Ekspert
08. december 2003 - 10:23 #3
Jeg forstå ikke helt hvad det er du leder efter.

Muligvis er det en indexer.

class X
{
        private IList list;
        ...
        public object this[int no]
        {
                get
                {
                        return list[no];
                }
        }
        ...
}
Avatar billede repsak Nybegynder
08. december 2003 - 10:24 #4
return list[3]
3 skal selvfølgelig være en variabel:
return list[index]
Avatar billede arne_v Ekspert
08. december 2003 - 10:25 #5
Ovenstående gør at man kan bruge:

X x = new X();
...
object o = x[3];

til at hente det fjerde element i listen inden i X med.
Avatar billede repsak Nybegynder
08. december 2003 - 10:26 #6
arne_v -> den har jeg prøvet, men så vidt jeg kunne se virker den som:
Y(){
  X xref = new X();
  object o = xref[4];
}

og ikke

xref.List[4];
Avatar billede arne_v Ekspert
08. december 2003 - 10:33 #7
Ja.

Men så vil du vel bare:

class X{
  Private IList list = new Arraylist();
  ...
  public IList List
  {
    get
    {
      return list;
    }
  }
}
Avatar billede arne_v Ekspert
08. december 2003 - 10:34 #8
Jeg synes iøvrigt at det er mere encapsulerende med indexeren frem
for en list property, men jeg har mange sære ideer.
Avatar billede repsak Nybegynder
08. december 2003 - 10:40 #9
Hmm I see your point, det er måske ikke super duper at returnere hele listen, men jeg kan ikke lide den første løsning, for hvad nu hvis jeg har:

class X{
  IList liste1;
  IList liste2;
}

så kan jeg vel ikke bruge this-måden?

Jeg kan jo altid lave en klassisk Get-metode, men troede bare at det kunne laves som property :-)
Avatar billede arne_v Ekspert
08. december 2003 - 11:03 #10
Det har du ret i.

Indexeren forudsætter at der er et "naturligt" index.
Avatar billede arne_v Ekspert
08. december 2003 - 11:18 #11
Passer ikke - der er jo 2D indexers.

class X
{
        private IList list1;
        private IList list2;
        ...
        public object this[int list,int no]
        {
                get
                {
                        if(list==1)
                        {
                            return list1[no];
                        }
                        else if(list==2)
                        {
                            return list2[no];
                        }
                        else
                        {
                            // do something bad
                        }
                }
        }
        ...
}
Avatar billede repsak Nybegynder
08. december 2003 - 11:27 #12
tja... jeg er godt nok ikke vild med den this-løsning, så er jeg nok mere til go'e gamle Get-tricket
Avatar billede arne_v Ekspert
08. december 2003 - 11:46 #13
Enhver sin smag.

Jeg synes da at:

X x = new X();
object o1 = x[1,3];
object o2 = x[2,4];

er en OK syntax.
Avatar billede repsak Nybegynder
08. december 2003 - 14:19 #14
ja enig, men stadig så synes jeg at indlæget 10:33:28 var bedre, hvis ikke det så gav uhindret adgang til hele listen. Det er vel også overkill at begynde at lave noget adgangsproxy ind imellem ik?
Avatar billede arne_v Ekspert
08. december 2003 - 14:47 #15
Måske vil du lave en simple property til en ArrayList wrapper med
begrænset funktionalitet ?
Avatar billede arne_v Ekspert
08. december 2003 - 14:48 #16
Der er mange muligheder at gøre det på.
Avatar billede repsak Nybegynder
11. december 2003 - 10:32 #17
ok tak for hjælpen... (=svar)
Avatar billede arne_v Ekspert
11. december 2003 - 10:42 #18
svar
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