Common Type System – Wikipedia

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 (till exempel 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.

Typkategorier

[redigera | redigera wikitext]

CTS stödjer följande två typer:

Värdetyper

En värdetyp innehåller direkt sitt värde, 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å referenstyper.

Följande exempel visar skillnaderna mellan värdetyper och referenstyper.

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 

Konvertering av värdetyp till en referenstyp kallas boxning. Detta är möjligt då värdetyper och referenstyper båda ärver basklassen System.Object.

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 

Externa länkar

[redigera | redigera wikitext]