Common Type System
Från Rilpedia
Common Type System (CTS) är en standard som specificerar hur datatyper ter sig i ett datorminne. Målet är att låta program som är skrivna i olika programspråk lätt ska kunna utbyta information med varandra. I ett programspråk kan en typ beskrivas som en definition av en mängd med värden (t.ex. heltal mellan 0 och 10), och de tillåtna operationerna som kan utföras med dessa värden.
Specifikationen för CTS är en del av Ecma standard 335, "Common Language Infrastructure (CLI) Partitions I to VI." CLI och CTS skapades av Microsoft, och Microsoft .NET framework är en implementation av standarden.
Innehåll |
Typkategorier
CTS stödjer följande två typer:
Värdetyper
- En värdetyp innehåller direkt sitt värd, och allokeras på stacken eller inuti en struktur. Värdetyper kan vara förimplementerade av runtime eller definierade av användaren. De primitiva typerna (
int
,char
,bool
osv.) och strukturer är värdetyper.
Referenstyper
- En referenstyp innehåller referensen till värdets plats i minnet, och är allokerade på heapen. Variabler är som pekare och är inte bundna till något specifikt objekt. Klasser, gränssnitt, strängar, delegater, boxade värdetyper och arrayer är exempel på refernstyper.
Följande exempel visar skillnaderna mellan värdetyper och refernstyper.
Imports System Class Class1 Public Value As Integer = 0 End Class 'Class1 Class Test Shared Sub Main() Dim val1 As Integer = 0 Dim val2 As Integer = val1 val2 = 123 Dim ref1 As New Class1() Dim ref2 As Class1 = ref1 ref2.Value = 123 Console.WriteLine("Värden: {0}, {1}", val1, val2) Console.WriteLine("Referenser: {0}, {1}", ref1.Value, ref2.Value) End Sub 'Main End Class 'Test
Utskriften från exemplet ovan
Värden: 0, 123 Referenser: 123, 123
Boxning
Konvertering av värdetyp till en referenstyp kallas boxning. Detta är möjligt då värdetyper och referenstyper båda ärver basklassen System.Objekt
.
Int32 x = 10; object o = x ; // Implicit boxning Console.WriteLine("The Object o = {0}",o); // skriver ut 10
Men en Int32 kan också bli explicit boxad:
Int32 x = 10; object o = (object) x; // Explicit boxning Console.WriteLine("The object o = {0}",o); // skriver ut 10
På liknande sätt kan den bli konverterad tillbaka till en värdetyp.
Int32 x = 5; object o = x; // Implicit boxning x = o; // Implicit utboxning
Se även
Källor
Externa länkar
|