Přenositelné a nepřenositelné typy

Většina datových typů má společnou reprezentaci ve spravované i nespravované paměti a nevyžaduje zvláštní zpracování zprostředkovatele komunikace. Tyto typy se nazývají blittable typy , protože nevyžadují převod, když jsou předány mezi spravovaným a nespravovaným kódem.

Struktury vrácené voláním platformy musí být blitelné typy. Vyvolání platformy nepodporuje nelimitovatelné struktury jako návratové typy.

Následující typy z System oboru názvů jsou typy blittable:

Následující komplexní typy jsou také blitelné typy:

  • Jednorozměrná pole primitivních typů, například pole celých čísel. Typ obsahující proměnnou pole blittable typů však není sám o sobě blittable.

  • Formátované typy hodnot, které obsahují pouze blittable typy (a třídy, pokud jsou zařazovány jako formátované typy). Další informace o formátovaných typech hodnot naleznete v tématu Výchozí zařazování pro typy hodnot.

Odkazy na objekty nejsou blitelné. To zahrnuje pole odkazů na objekty, které jsou samy o sobě blitelné. Můžete například definovat strukturu, která je blittable, ale nemůžete definovat blittable typ, který obsahuje pole odkazů na tyto struktury.

Při optimalizaci jsou pole primitivních typů a tříd, které obsahují pouze blittable členy, připnuté místo kopírování během zařazování. Tyto typy se můžou zdát zařazované jako parametry In/Out, pokud jsou volající a volaný ve stejném bytě. Tyto typy jsou však ve skutečnosti zařazovány jako v parametrech a pokud chcete zařazovat argument jako parametr In/Out, musíte použít InAttribute a OutAttribute atributy.

Některé spravované datové typy vyžadují v nespravovaném prostředí jinou reprezentaci. Tyto nelimitovatelné datové typy musí být převedeny do formuláře, který lze zařašovat. Spravované řetězce jsou například nelimitovatelné typy, protože je nutné je před zařazování převést na objekty řetězců.

Následující tabulka uvádí neschovatelné typy z System oboru názvů. Delegáti, což jsou datové struktury, které odkazují na statickou metodu nebo instanci třídy, jsou také nelimitovatelné.

Neschovatelný typ Popis
System.array Převede na pole ve stylu jazyka C nebo na SAFEARRAY.
System.Boolean Převede se na hodnotu 1, 2 nebo 4 bajtů s true hodnotou 1 nebo -1.
System.Char Převede se na znak Unicode nebo ANSI.
System.Class Převede na rozhraní třídy.
System.object Převede na variantu nebo rozhraní.
System.Mdarray Převede na pole ve stylu jazyka C nebo na SAFEARRAY.
System.string Převede na řetězec ukončující v odkazu na hodnotu null nebo na BSTR.
System.Valuetype Převede se na strukturu s pevným rozložením paměti.
System.Szarray Převede na pole ve stylu jazyka C nebo na SAFEARRAY.

Typy tříd a objektů jsou podporovány pouze zprostředkovatele komunikace modelu COM. Odpovídající typy v jazyce Visual Basic, C# a C++ najdete v přehledu knihovny tříd.

Viz také