Avatar billede stephanryer Nybegynder
01. juni 2006 - 14:38 Der er 8 kommentarer og
2 løsninger

Navngivning af generiske klasser i .NET

Jeg har tidligere oprettet en thread med dette emne, men har stadig problemer med at forstå navngivningen af generics i .NET.

Den generiske version af ArrayList hedder List
Den generiske version af HashTable hedder Dictionary.

Er det korrekt når jeg her konkluderer at man ikke kan vælge mellem forskellige implementationsmodeller, når man vil bruge de generiske versioner? Det er som om man skal vælge om man vil have generics eller kunne vælge implementationsmetode.

Jeg skriver om brugervenlighed for programmøren i en rapport og vil derfor gerne høre om jeg tager fejl mht. denne opfattelse af generiske klasser i .NET

På forhånd tak.
Avatar billede arne_v Ekspert
01. juni 2006 - 14:46 #1
Der er faktisk andre klasser i System.Collection.Generics: LinkedList, Queue, Stack

De implementerer bare ikke IList men kun ICollection
Avatar billede stephanryer Nybegynder
01. juni 2006 - 14:55 #2
- Well er der nogen grund til at man ikke har implementeret et tilsvarende generisk klassehieraki som det ses ved standardklasserne? Altså et generisk interface svarende til List?

- Og er der nogen grund til at man ikke har ændret de gamle klasser til at kunne benyttes generisk. Fx ændre ArrayList til at tage en type parameter med ved oprettelsen. For at opnå bagudkompatibelhed kunne compileren blot indsætte <Object> de steder, der ikke var typeparametiseret. Dette vil gøre brugen af generics mere brugervenlig synes jeg. Er der noget jeg har glemt i mine overvejelser her?
Avatar billede dj_uncas Nybegynder
01. juni 2006 - 15:42 #3
Tja, at der i System.Collections namespacet også findes en Dictionary og en List - ligesom der i System.Collections.Generic findes Dictionary<TKey, TValue> og en List<T>.. Noget af vejen har de altså givet samme navne...
Avatar billede arne_v Ekspert
01. juni 2006 - 15:52 #4
System.Collection har interface IList og class ArrayList

System.Collection.Generics har interface IList<T> og class List<T>

der er så vidt jeg kan se tilfældigvis kun en implementation af IList og IList<T>
(da de andre klasser kun implementerer ICollection og ICollection<T>)

og som vi var inde på i dit andet spørgsmål, så har .NET valgt klart at adskille
generics fra ikke generics (i modsætning til Java)

jeg tror at det har været en prioritering af bruger venlighed over
purity (Java 1.5 generics kan give så mange compiler warning på
gammel kode)

men måske er der også nogle implementationsmæssige årsager til det
Avatar billede arne_v Ekspert
01. juni 2006 - 15:53 #5
og ja - det var mere logisk hvis List<T> og Dictionary<T> havde været
ArrayList<T> og Hashtable<T>, men sådan er der så meget
Avatar billede stephanryer Nybegynder
01. juni 2006 - 17:38 #6
ja ok. Var ik klar over at der også var et IList<T> interface. Jeg takker for jeres forklaringer. Læg et svar så får I point :)
Avatar billede arne_v Ekspert
01. juni 2006 - 19:01 #7
svar
Avatar billede dj_uncas Nybegynder
01. juni 2006 - 19:48 #8
og mit svar
Avatar billede stephanryer Nybegynder
01. juni 2006 - 20:19 #9
Jeg tillader at fordele pointene lidt ulige, da
Avatar billede stephanryer Nybegynder
01. juni 2006 - 20:20 #10
hov fejl :) Nevermind
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