Typy kopiowalne i niekopiowalne

Większość typów danych ma wspólną reprezentację zarówno w pamięci zarządzanej, jak i niezarządzanej i nie wymaga specjalnej obsługi przez międzyoperatora. Te typy są nazywane typami blittable, ponieważ nie wymagają konwersji, gdy są przekazywane między zarządzanym i niezarządzanym kodem.

Struktury zwracane z wywołań wywołań wywołań platformy muszą być typami blittable. Wywołanie platformy nie obsługuje struktur nienależących do blittable jako typów zwracanych.

Następujące typy z System przestrzeni nazw to typy blittable:

Następujące złożone typy są również typami blittable:

  • Jednowymiarowe tablice typów pierwotnych, takich jak tablica liczb całkowitych. Jednak typ, który zawiera tablicę zmiennych typów blittable, nie jest sam blittable.

  • Sformatowane typy wartości zawierające tylko typy blittable (i klasy, jeśli są rozdzielane jako typy sformatowane). Aby uzyskać więcej informacji na temat sformatowanych typów wartości, zobacz Domyślne marshalling dla typów wartości.

Odwołania do obiektów nie są modyfikowalne. Obejmuje to tablicę odwołań do obiektów, które są samodzielnie modyfikowane. Można na przykład zdefiniować strukturę, która jest blittable, ale nie można zdefiniować typu, który zawiera tablicę odwołań do tych struktur.

W ramach optymalizacji tablice typów pierwotnych i klas pierwotnych, które zawierają tylko elementy członkowskie tabeli blittable, są przypięte zamiast kopiowane podczas marshalingu. Te typy mogą być wyświetlane jako parametry in/out, gdy obiekt wywołujący i wywoływany znajdują się w tym samym mieszkaniu. Jednak te typy są rzeczywiście marshalled jako W parametrach i należy zastosować InAttribute atrybuty i OutAttribute , jeśli chcesz marshaling argumentu jako parametru in/out.

Niektóre typy danych zarządzanych wymagają innej reprezentacji w środowisku niezarządzanym. Te nielittable typy danych muszą być konwertowane na formularz, który można zmienić. Na przykład ciągi zarządzane są typami nienależących do blittable, ponieważ muszą być konwertowane na obiekty ciągów, aby można je było rozmieścić.

W poniższej System tabeli wymieniono typy niezwiązane z przestrzeni nazw. Delegaty, które są strukturami danych odwołującymi się do metody statycznej lub wystąpienia klasy, są również nielittable.

Typ nielittable opis
System.array Konwertuje na tablicę w stylu C lub SAFEARRAY.
System.Boolean Konwertuje na wartość 1, 2 lub 4-bajtową z wartością true 1 lub -1.
System.char Konwertuje na znak Unicode lub ANSI.
System.Class Konwertuje na interfejs klasy.
System.object Konwertuje na wariant lub interfejs.
System.Mdarray Konwertuje na tablicę w stylu C lub SAFEARRAY.
System.string Konwertuje na ciąg kończący się odwołaniem o wartości null lub do ciągu BSTR.
System.valuetype Konwertuje na strukturę ze stałym układem pamięci.
System.Szarray Konwertuje na tablicę w stylu C lub SAFEARRAY.

Klasy i typy obiektów są obsługiwane tylko przez międzyoperajności MODELU COM. Odpowiednie typy w języku Visual Basic, C# i C++można znaleźć w temacie Omówienie biblioteki klas.

Zobacz też