Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

C#s framtida finesser (Generics under runtime)

Postad 2003-07-14 av Johan Normén i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 3678, Betyg: 80%

Förord

I förra artikeln pratade jag om hur man byggde upp Generic klasser under nästa version av C# som troligen kommer i samma veva som nya SQL-Servern.
Innehåll
  » Värde typer
  » Referenstyper
  » Reflections
  » Sammanfattning
Nu tänkte jag ta upp hur dessa klasser hanteras under runtime. Ni minns väl själva instansierings syntaxen.


Stack stack;


När en generic klass blir kompilerad så skiljer det sig inte jämfört med när en vanlig klass kompileras, allt är bara metadata och IL. Dock skilljer sig själva IL koden om man använder sig av refernes typer eller värde typer. (Value types)


Värde typer

När en Generic typ är skapad med en värde typ som parameter så vill runtimen skapa en specialiserad generic typ som skapas en gång per unik värde typ som används som parameter.

Vi kan ta en titt på ett exempel.
Låt säga att vi tar vår Stack exempel från tidigare artikel. För att ange att den skulle hantera int skrev vi följande:


Stack stack = new Stack;


Vad runtimen gör nu är att specialicera denna stack med värde typen int, den kommer då skapa en specialiserad generic typ i vår IL. Använder vi två stackar med integer som parameter så kommer runtimen att återanvända den specialiserade stack klassen. Alltså när vi skapar två Stackar med int som parameter så kommer båda att använda redan genererad kod under runtimen.


Stack stackOne = new Stack;
Stack stackTwo = new Stack;


Om vi nu exempelvis hade skapat en till Stack klass med ett en annan värde typ som parameter så skulle runtimen skapa en ny version. Som skulle läggats till i vår IL.


Stack stackOne = new Stack;
Stack stackTwo = new Stack;


Fördelen med specialiserade klasser för genrics som är skapade med värde typer
är att de ger bättre prestanda. Varför kommer ni få veta då jag nu går in på hur Generic klasser med objekt referenser better sig.




Referenstyper

När det handlar om referens typer så arbetas det inte på samma sätt, som med värdetyper.
Varje gång man skapar en ny instans med en annan refersn typ så kommer runtimen att återanvända den specialiserade versionen som skapades senast.

Låt oss säga att vi har två referens typer, en Order (Order) klass och en Kund (Customer) klass. Vi skapar en stack klass med Kund som paramter typ,


Stack customers;


Här kommer runtimen att skapa en specialiserad version of Stack klassen som istället för att lagra data, lagrar object referenser som kommer att fyllas i senare.

På nästa rad skapar vi en Stack klass med en annan referns typ, vår Order


Stack customers = new Stack;
Stack orders = new Stack;


Till skillnad från värde typer, så skapas inte en ny Stack klass om man skapar en med Order klassen.
För vajre objekt referens så allokeras objektet i minnet och en pekare är satt till referensen. På så vis blir de lite långsammare än Generic klasser som använder sig av värdetyper. Ungefär som skillnaden mellan Objekt klass vs Struct.


Reflections

För er som använt reflections så kommer generic klasser att hanteras på exakt samma sätt som klasser gör idag.


Sammanfattning

När man skapar klasser med olika värde typer så kommer runtimen att skapa en helt ny specialiserad klass i vår IL, eller återanvända en redan befintlig med samma värde typ. Tillskillnad från referenstyper där man återanvänder den senaste specialiserade klassen, genom att peka om objekt referensen till det nya objektet. Precis som med Värde typer (int,float...) vs Refernstyper (string...) så kommer generics med värde typ att ge bättre prestanda under runtime.
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 153
27 952
271 704
874
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies