Common Type System (rövidítve CTS, orosz Common Type System ) - a .NET-keretrendszer része , egy formális specifikáció, amely meghatározza, hogyan kell meghatározni bármely típust (osztály, interfész, struktúra, beépített adattípus) a helyes végrehajtáshoz a környezet által. NET. Ezenkívül ez a szabvány meghatározza, hogy a típusdefiníciók és a speciális típusértékek hogyan jelenjenek meg a számítógép memóriájában. A CTS fejlesztésének célja az volt, hogy a különböző programozási nyelveken írt programok könnyen cseréljenek információkat. A programozási nyelvekben megszokott módon egy típust úgy írhatunk le, mint amely érvényes értékek halmazát határozza meg (például "minden egész szám 0-tól 10-ig") és érvényes műveleteket ezeken az értékeken (például összeadás és kivonás).
A CTS specifikációját az Ecma 335 szabvány tartalmazza, melynek címe "Közös nyelvi infrastruktúra (CLI) partíciók I-től VI-ig " . A CLI -t és a CTS-t a Microsoft fejlesztette ki, a Microsoft .NET keretrendszer pedig a szabvány megvalósítása.
Törtértékek kerekítésekor a keretrendszer alapértelmezés szerint a banki kerekítést használja . A 2-es verziótól kezdődően a " Symmetric Aithmetic Rounding " (nullától a legközelebbi számra kerekít) opcionális szolgáltatásként a programozók számára is elérhető [1] .
A standard típusú rendszer két fő típuskategóriát támogat:
Értéktípusok Az értéktípusok változói közvetlenül tartalmaznak adatokat, az értéktípusok példányai pedig vagy a veremben , vagy közvetlenül más objektumok törzsében találhatók. Az értéktípusok lehetnek beépített (a futási környezet által megvalósított), felhasználó által meghatározottak vagy enumok. Egy értéktípus értéke átalakítható egy referenciatípus értékévé, ha egy dobozolási eljárást alkalmazunk rá. Referencia típusok A referencia típusú változók csak a címre való hivatkozást tárolják a memóriában, ahol az értéket (objektumot) tárolják. A referenciatípusok példányai a kupacban találhatók (kivéve, ha mutatóról van szó). A referenciatípusok önleíró típusokra, mutatókra és interfészekre vannak osztva. A referenciatípus típusára egy önleíró típus értékéből lehet következtetni. Az önleíró típusokat tömbökre és osztályokra osztják. Az osztályok viszont felhasználó által definiált osztályokra, dobozos értéktípusokra és delegáltakra vannak felosztva.A következő Visual Basic .NET - ben írt példa bemutatja a referenciatípusok és az értéktípusok közötti különbséget:
Rendszer importálása Class1 Class Public Value as Integer = 0 End Class 'Class1 Osztályteszt Megosztott al - fő ( ) Dim érték1 Egész = 0 Dim érték2 Egész = érték1 érték2 = 123 Dim ref1 Új osztály 1 ( ) Dim ref2 Mint Class1 = ref1 ref2 . Érték = 123 Konzol . WriteLine ( "Értékek: {0}, {1}" , érték1 , érték2 ) Konzol . WriteLine ( "Hivatkozások: {0}, {1}" , ref1 . Érték , ref2 . Érték ) End Sub 'Main End Class ' TestA fenti példa a következőket adja ki:
Értékek: 0, 123 Linkek: 123, 123Egy értéktípus értéke konvertálható referenciatípus értékévé a dobozolási eljárás alkalmazásával . Ebben az esetben az érték átkerül a kupacba, és visszaadja az ezt az értéket tartalmazó kupac területére vonatkozó kezelt hivatkozást. Amint az alábbi példából is látható, a C#-ban nincs szükség arra, hogy a fordítónak egy Int32 értéket tegyen dobozba, ezáltal objektummá alakítva azt, mivel a C# fordító maga észleli ezt az igényt, és beilleszti a megfelelő kódot (IL). Ez azonban nem futásidejű képesség, hanem fordítói viselkedés. Tehát az F# nyelvben a csomagolás csak akkor történik meg, ha a programozó kifejezetten jelezte ennek szükségességét.
Int32 x = 10 ; objektum o = x ; // Implicit boxing konzol . WriteLine ( "Object o = {0}" , o ); // 10-et nyomtatAz Int32 azonban mindig kifejezetten bekeretezhető, az alábbiak szerint:
Int32 x = 10 ; objektum o = ( objektum ) x ; // Explicit boxing konzol . WriteLine ( "Object o = {0}" , o ); // 10-et nyomtat KicsomagolásA csomagolás fordított folyamatát unboxingnak nevezik . A következő példa bemutatja, hogyan lehet egy korábban bekeretezett értéktípust kivenni C# nyelven.
Int32 x = 5 ; objektum o1 = x ; // Implicit csomagolás x = ( int ) o1 ; // Explicit kicsomagolásMeg kell jegyezni, hogy ebben a példában a kicsomagoláshoz explicit szereposztásra van szükség. Ennek az az oka, hogy a dobozos érték objektum típusú, míg a kicsomagoláshoz egy adott típus szükséges. A C# 4.0-tól kezdve használhatja a dinamikus típust az objektumtípus helyett, ami kiküszöböli az explicit típusú öntvény szükségességét.
dinamikus x = 42 ; int y = x ; // Implicit kicsomagolás.HÁLÓ | |
---|---|
Megvalósítások | |
Építészet | |
Infrastruktúra |
|
Microsoft nyelvek | |
Más nyelvek | |
Windows alapok | |
Alkatrészek | |
Összehasonlítások |
|
Jövő technológiái | |
Információs források |