1 / 13

Typeparametisering/Genericity

Typeparametisering/Genericity. Generics i .NET 2 og C#. ”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

gaenor
Download Presentation

Typeparametisering/Genericity

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. ”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 NOEA/IT - FEN

  3. Fordele og ulemper Er det en fordel? • 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) NOEA/IT - FEN

  4. 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) NOEA/IT - FEN

  5. 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) NOEA/IT - FEN

  6. Ideen: Typeparametrisering • 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 I version 1: using System.Collections; IList al = new ArrayList(); Kunde k= (Kunde) al.get(i); I version 2: using System.Collections.Generic; IList<Kunde> al = new List<Kunde>(); Kunde k= al.get(i); Typeparameter NOEA/IT - FEN

  7. 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<Ansat> ansatte = new List<Ansat>(); ansatte.Add(a1); ansatte.Add(a); ansatte.Add(b); ansatte.Add(c); ansatte.Add(d); ansatte.Add(e); ansatte.Add(s);//COMPILERFEJL!!!! source NOEA/IT - FEN

  8. .NET 2 Generics (key,value) -par ICollection<T> IList<T> LinkedList<T> IDictionary<TKey, TValue> List<T> SortedDictionary<TKey, TValue> Dictionary <TKey, TValue> Indekserbare Array-baseret Balanceret søgetræ Hashtabel NOEA/IT - FEN

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

  10. NOEA/IT - FEN

  11. 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 NOEA/IT - FEN

  12. 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<int> 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 NOEA/IT - FEN

  13. Forskelle på implementeringen • C++ preprocessoren opfatter en template-definition som en slags makro dvs. vector<Kunde*> kundeListe; og vector<Vare*> 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 NOEA/IT - FEN

More Related