Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

2008.09.23NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#

Lignende præsentationer


Præsentationer af emnet: "2008.09.23NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#"— Præsentationens transcript:

1 2008.09.23NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#

2 2008.09.23NOEA/IT - FEN2 ”Generisk” programmering i C# (som det har været indtil sommer 2005) Alle klasser nedstammer fra Object Så derfor kan vi anvende polymorfi F.eks. Object[ ] data –dette array kan indeholde alle mulige objekter fra alle mulige klasser Kendt fra ArrayList, HashMap osv. i.NET 1

3 2008.09.23NOEA/IT - FEN3 Fordele og ulemper Fordele –heterogene collections Ulemper –mange typecasts –ikke typesikkert typen checkes run-time i forbindelse med castet –hvad med int og de andre primitive datatyper? (boxing – giver overhead) Er det en fordel?

4 2008.09.23NOEA/IT - FEN4 Programmeringsfejl Programmet virker ikke korrekt, men det opdager vi ikke (uopdagede fejl) –så er det bedre, hvis: Programmet virker ikke korrekt, men vi får det at vide vha. f.eks. en exception (runtime fejl) –så er det bedre, hvis: Compileren accepterer ikke programmet (compile-time fejl)

5 2008.09.23NOEA/IT - FEN5 Strategien Placér så meget som muligt af fejl- kontrollen i compilerings-fasen Fordele: –Lettere at sikre korrekte programmer –Mere effektiv programeksekvering Ulemper –Mere restriktiv programmering (mindre fleksibilitet)

6 2008.09.23NOEA/IT - FEN6 Ideen: Typeparametrisering I version 1: using System.Collections; IList al = new ArrayList(); Kunde k= (Kunde) al.get(i); I version 2: using System.Collections.Generic; IList al = new List (); Kunde k= al.get(i); –Compileren ved nu, at der kun må placeres Kunde- objekter (og subtyper heraf) i al –Compileren ved nu, at det der hentes ud af al er Kunde-objekter (og subtyper heraf) –Statisk typecheck i stedet for dynamisk typecheck –Ingen dynamiske casts Typeparameter

7 2008.09.23NOEA/IT - FEN7 I C#: AnsatSeqProject Ansat a1 = new Ansat("Ib", "Programmør", 10000); Ansat a = new Ansat("Kurt", "Seniorprogrammør", 20000); Ansat b = new Ansat("Karl", "Programmør", 10000); Ansat c = new Ansat("Karen", "Systemprogrammør", 13000); Ansat d = new Ansat("Iben", "Programmør", 11000); Ansat e = new Ansat("Ib", "Systemkonsulent", 9000); string s = "Halløjsa!"; IList ansatte = new List (); ansatte.Add(a1); ansatte.Add(a); ansatte.Add(b); ansatte.Add(c); ansatte.Add(d); ansatte.Add(e); ansatte.Add(s);//COMPILERFEJL!!!! source

8 2008.09.23NOEA/IT - FEN8.NET 2 Generics ICollection IList LinkedList IDictionary List Dictionary SortedDictionary Indekserbare Array-baseret Balanceret søgetræ Hashtabel (key,value) -par

9 2008.09.23NOEA/IT - FEN9 http://msdn2.microsoft.com/en-us/library/system.collections.generic.aspx

10 2008.09.23NOEA/IT - FEN10

11 2008.09.23NOEA/IT - FEN11 Men det har en pris: –ingen heterogene collections hvilket vist ikke er et større savn... –typesystemet kompliceres –sprogets syntaks kompliceres –man får brug for en preprocessor så længere compileringstider og mere mystiske fejlmeddelelser

12 2008.09.23NOEA/IT - FEN12 Generiske typer vs. polymorfe typer Generiske typer: –alle elementer er af samme type –typen fastlægges statisk (compile-tid), statisk binding er mulig –F.eks vil en float i List l give en compile-fejl Polymorfe datastrukturer: –elementer kan være af forskellige typer, men alle elementer skal være specialiseringer af den type, der er defineret som element –statisk typekontrol er muligt, men dynamisk binding er nødvendig

13 2008.09.23NOEA/IT - FEN13 Forskelle på implementeringen C++ preprocessoren opfatter en template-definition som en slags makro dvs. vector kundeListe; og vector vareListe; får compileren til at generere kode til to forskellige vectors. –Effektivt, men objektkoden bliver stor Java bruger I princippet den gamle ArrayList, men indpakker castene for os. –Fylder ikke meget ekstra, men koster stadig tid til casts – check sker compiletid C# bruger C++ måden ved value-typer, men siges at være bedre til at undgå kodeduplikering, og bruger Java måden på referencetyper. Meta-data giver også information om typeparametre


Download ppt "2008.09.23NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#"

Lignende præsentationer


Annoncer fra Google