Avatar billede iakob Nybegynder
10. juli 2008 - 09:22 Der er 4 kommentarer og
1 løsning

Hvordan undgår SortedList<> at implementere Add<T> i ICollection?

Jeg er ved at lave min egen liste (kaldet OrderetList) som skal fungere som SortedList<T, U> bortset fra at den tillader flere items med samme nøgle (hvor SortedList kun tillader een).

Altså kan min liste f.eks. bruges som en telefonbog hvor der er 1300 listet under navnet "Hansen". Hvis der allerede findes en implementation af denne funktionalitet, så vil jeg blive glad for at høre navnet på den.

Men mit spørgsmål er af lidt mere forståelsesmæssig karakter. Jeg kan se i dokumentationen af SortedList implementerer ICollection - og derfor bør den jo implementere Add(T). Men det gør den ikke (man kan i hvert tilfælde ikke kalde Add(T)).

Metoden Add(T, U) findes (som er en metode i IDictionary<T, U> som SortedList også implementerer.

Hvordan er det lykkes at skjule Add(T) ? Hvorfor skal den ikke implementeres? Kan nogen her kaste lys over det mysterie?
Avatar billede kodehoved Nybegynder
10. juli 2008 - 12:22 #1
Så vidt jeg kan se, er Add(T) ikke en del af ICollection, men en del af ICollection<T>. SortedList<TK, TV> implementerer ICollection<KeyValuePair<TK, TV>> (altså T er KeyValuePair<TK, TV>), og derfor har den Add(TK, TV).

mvh
Brian
Avatar billede lmoelleb Nybegynder
10. juli 2008 - 12:29 #2
Den har en explicit interface implementation. Det vil sige at du skal caste en SortedList til ICollection foer du kan se metoden.

Fordelen ved dette er at man kan skjule metoder der typisk ikke bruges (Dictionary skjuler for exemple ogsaa Add fra ICollection). Derudover er det muligt at implementere to (eller flere) interfaces der har metoder eller properties med samme navn, men hvor man ikke oensker samme implementation.

Saa istedet for deklerationen:
public void Add(T item)

er Add deklereret som:
void ICollection.Add(T item)

Hvis du vil kalde Add metoden bruger du:
((ICollection)yourOrderedList).Add(whatever);
Avatar billede kodehoved Nybegynder
10. juli 2008 - 12:47 #3
Det er ikke korrekt. Tryk F12 på SortedList<TK, TV> og du vil se, at den er erklæret implicit.

mvh
Brian
Avatar billede iakob Nybegynder
10. juli 2008 - 14:32 #4
Så vidt jeg ved skal man stadig implementere alle metoder i en interface -også selvom de er eksplicitte. Ellers overholder man jo ikke den kontrakt som det var meningen interfaces skulle definere. Det var også derfor det forvirrede mig at SortedList ikke havde Add med kun een parameter.

Men kodehoved's svar giver god mening. Altså hvis det var et svar - for så ville det nemlig få points ;-)
Avatar billede kodehoved Nybegynder
10. juli 2008 - 14:34 #5
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