Gebruik van generics

Status
Niet open voor verdere reacties.

sneezesnoeze

Gebruiker
Lid geworden
3 feb 2008
Berichten
41
http://www.codeguru.com/csharp/article.php/c19001/NET-Framework-Collections-and-Generics.htm

In bovenstaand artikel gaat het over generics en hoe handig dat wel niet is.


Code:
    List testGeneric = new List();
    for (int i = 0; i < 20; i++)
    {
    // Go ahead and play here. You'll get a compile time error here
    // if you try to add anything other than an int.
    testGeneric.Add(i);
    }
    foreach (int item in testGeneric)
    {
    Console.Write("{0}", item);
    }


Als ik de voorbeeld code gebruik krijg ik de volgende foutmelding.
"Using the generic type "System.Collections.Generics.List<T>" requires 1 type argument".

Is er ooit een List geweest zonder type aanduiding ?
Is hier mogelijk de type aanduiding vergeten ?
 
Ik denk het wel, tenzij er een default geplaatst is
*edit*
Ik denk dat de code van het eerste voorbeeld klakkeloos overgenomen is. En "arraylist" is dus typeloos (zie eerste voorbeeld)
 
Laatst bewerkt:
dank je.

Maar is een generic dan altijd een collection
en is elke colletion een generic

of ligt het toch anders.
 
Nee een collection is een verzameling. Generics zijn verzamelingen, maar niet elke verzameling is een generic.

Generics zijn specifiek toegespitst op de opgegeven datatype met als voordeel dat de generic tijdens programmeren te herkennen is als het opgegeven datatype. Dat is met een arraylist dus niet zo. Daar een arraylist alles kan bevatten, kan de compiler ook niet beoordelen wat je erin gaat stoppen. Generics zaten niet in de originele release van C# en daar kwamen met name vanuit de C++ gebruikers die over wilden stappen veel klachten over.
 
Grappig, hoe lastig het is, de kracht van dit principe, te begrijpen, als je deze problemen zelf nooit hebt ervaren.

Duidelijke uitleg.

Ik heb aanvullend deze video's gekeken, daarin wordt dit nog eens benadrukt.
https://www.youtube.com/watch?v=-zHRmXkJ5Bw
https://www.youtube.com/watch?v=ecbv4bsxkvk

Hierin wordt getoond dat een generics geen verzameling hoeft te zijn. Doordat ik de woorden generics en collection tegelijk geleerd heb, was bij mij het idee ontstaan dat dit hetzelfde was. Je ziet ze ook vaak samen.

Het voorbeeld wat gebruikt wordt in de video is om het simpel te houden wel krom.

Generic_example.jpg

Het zelf schrijven van een generics functie lijkt me trickie.

Schrijf je zelf generics functies of maak voornamelijk gebruik van generics functionaliteit ?
Is het schrijven van een generics functie echt trickie of valt het mee (ik zie gigantische switch-case statement voor me met code voor alle mogelijk datatypes)
 
Laatst bewerkt:
Ik gebruik voornamelijk generics, maar ik heb ook wel wat functies geschreven. Het moet echter functioneel zijn. De reden waarom je het voornamelijk met collections ziet is omdat daar je grootste winst zit. Als je verschillende dingen wil doen afhankelijk van de datatype kan het functioneel handiger zijn om gewoon verschillende functies te schrijven.

Als je dus uitkomt op switch-case statements zit je vaak verkeerd met generics. De methodology is dan namelijk mogelijk niet "generic". Dat wil niet zeggen dat je daar altijd mee weg komt, soms het je geen keuze.

Generics zijn er voornamelijk voor de programmeur. Het is dus belangrijk dat de moeite die je stopt in generics die je zelf schrijft, weer terugkrijgt in minder bugs, etc. Er is soms ook een performance overweging, maar de usecases daarvoor zijn meestal beperkt. Buiten collections zijn database tables eigenlijk de enige andere toepassing die ik daarvan ken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan