Avatar billede mikkelbm Nybegynder
01. november 2005 - 22:30 Der er 14 kommentarer og
2 løsninger

Generics i .NET 2.0

Hej

Er der nogen der kan give en forklaring på hvorfor at der ikke er implementeret generics i collectionklasserne fra v. 1.1, men at det har fået sit eget namespace?

Det jeg har kunnet finde frem til er, at System.Collections.Generics.List svarer til ArrayList, men hvorfor have to klasser med samme funktionalitet - bortset fra generics?

Nu kommer jeg fra Java og da de fik generics blev det bare en del af de eksisterende collectionklasser.


Umiddelbart får jeg ikke rigtig nogen forklaring på det i dokumentationen andet end:

The List class is the generic equivalent of the ArrayList class.
Avatar billede driis Nybegynder
01. november 2005 - 22:33 #1
Jeg er ret sikker på at det skyldes hensynet til bagudkompatibilitet.

Det gamle namespace er bevaret med de gamle collection klasser, så 1.1 kode umiddelbart kan compiles på en 2.0 platform. Hvis ArrayList pludselig var blevet generic, ville 1.1 koden ikke kunne kompileres fordi typeparameteren mangler i koden.
Avatar billede mikkelbm Nybegynder
01. november 2005 - 22:35 #2
Det kan jeg nu ikke se som et problem, da typeparamteren vel er valgfri?
Avatar billede driis Nybegynder
01. november 2005 - 22:36 #3
Nej, typeparameteren er ikke valgfri.
Avatar billede arne_v Ekspert
01. november 2005 - 22:38 #4
tror du Anders Hejlsberg læser her ?

:-)

Mit gæt er at de ville have en klar opdeling imellem den ikke generiske
og den generiske variant.

Java har "løst" problemet ved at lade den den generiske defaulte ved
ingen type angivelse til objekt.

Det er vel set udfra en puristisk synsvinkel langt den eleganteste
løsning.

Men i praksis ender man op med en masse warnings om hvorvidt man nu faktisk
mener det man skriver.

Microsoft har lang tradition for at være praktiske.

Så jeg gætter på at det er grunden.
Avatar billede mikkelbm Nybegynder
01. november 2005 - 22:40 #5
Nej, det gør han nok ikke - desværre :)

Og I har nok ganske ret begge to. Det forekom mig bare lidt underligt, nu hvor jeg havde vænnet mig til den måde det bliver gjort på i Java.
Avatar billede mikkelbm Nybegynder
01. november 2005 - 22:41 #6
Jeg har fået svar nok. Så hvis I smider et svar begge to...
Avatar billede arne_v Ekspert
01. november 2005 - 22:43 #7
svar
Avatar billede driis Nybegynder
01. november 2005 - 22:43 #8
Svar
Avatar billede arne_v Ekspert
01. november 2005 - 22:44 #9
og C++'es template er endnu mere forskellig !
Avatar billede mikkelbm Nybegynder
01. november 2005 - 22:45 #10
Af ren nysgerrighed - hvordan er det så i C++?

Nu er det ikke noget jeg har beskæftiget mig med...
Avatar billede arne_v Ekspert
01. november 2005 - 22:47 #11
C++ templates er en source kode ting

d.v.s. at compileren genererer en klasse/metode når den faktisk instantieres
i koden
Avatar billede mikkelbm Nybegynder
01. november 2005 - 22:49 #12
Okay. Spændende...
Avatar billede arne_v Ekspert
01. november 2005 - 22:49 #13
eksempel:

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

template<class T> T test(T a, T b)
{
    return a+b;
}

int main()
{
    cout << test<int>(123, 123) << endl;
    cout << test<double>(123.456, 123.456) << endl;
    cout << test<string>("abc", "abc") << endl;
    return 0;
}

pointen er at i templaten skal man ikke erklære noget for at bruge +

hvis den T man bruger på instatierings tid ikke kan +'es så får man en compile fejl
Avatar billede mikkelbm Nybegynder
01. november 2005 - 22:50 #14
Det var da egentlig meget smart.
Avatar billede mikkelbm Nybegynder
01. november 2005 - 22:52 #15
Tak for forklaringen.
Avatar billede arne_v Ekspert
01. november 2005 - 22:53 #16
man kan lave nogle ting med C++ templates som man ikke kan med C# og Java generics

men der er også nogle ulemper:
  * man kan ikke compile template koden i en seperat fil, da de ikke er templaten
    men instantieringerne som giver kode
  * man kan hurtigt få meget kode genereret hvis man bruger en template for
    mange forskellige typer
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