Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La mayoría de los tipos de datos tienen una representación común en la memoria administrada y sin administrar, y no requieren un tratamiento especial por parte del serializador de interoperabilidad. Estos tipos se denominan tipos que pueden transferirse en bloque de bits porque no requieren conversión cuando se pasan entre código administrado y código no administrado.
Las estructuras que se devuelven de llamadas de invocación de plataforma deben ser tipos que pueden transferirse en bloque de bits. La invocación de plataforma no admite estructuras que no pueden transferirse en bloque de bits como tipos de valor devuelto.
Los siguientes tipos del espacio de nombres System son tipos que pueden transferirse en bloque de bits:
- System.Byte
- System.SByte
- System.Int16
- System.UInt16
- System.Int32
- System.UInt32
- System.Int64
- System.UInt64
- System.IntPtr
- System.UIntPtr
- System.Single
- System.Double
Los siguientes tipos complejos también son tipos que pueden transferirse en bloque de bits:
- Matrices unidimensionales de tipos primitivos que pueden transferirse en bloque de bits, como una matriz de enteros. Pero un tipo que contiene una matriz variable de tipos que pueden transferirse en bloque de bits no se puede transferir en bloque de bits.
- Los tipos de valor con formato que solo contienen tipos que pueden transferirse en bloque de bits (y clases si se serializan como tipos con formato). Para obtener más información sobre los tipos de valor con formato, consulte Serialización predeterminada para tipos de valor.
Las referencias a objetos no pueden transferirse en bloque de bits. Además, una matriz de referencias a objetos que se pueden dividir por sí mismos no es de tipo blittable. Por ejemplo, puede definir una estructura que sea blitable, pero no puede definir un tipo blitable que contenga una matriz de referencias a esas estructuras.
A modo de optimización, las matrices de tipos primitivos que pueden transferirse en bloque de bits y las clases que solo contienen miembros que pueden transferirse en bloque de bits se anclan en lugar de copiarse durante la serialización. Estos tipos pueden parecer serializados como parámetros In/Out cuando el autor y el destinatario de la llamada están en el mismo contenedor. Sin embargo, estos tipos realmente se marshalizan como parámetros de entrada, y se deben aplicar los atributos InAttribute y OutAttribute si se desea marshalizar el argumento como parámetro de entrada/salida.
Algunos tipos de datos administrados requieren una representación diferente en un entorno sin administrar. Estos tipos de datos que no pueden transferirse en bloque de bits se deben convertir a un formato que se pueda serializar. Por ejemplo, las cadenas administradas son tipos que no pueden transferirse en bloque de bits porque se deben convertir en objetos de cadena antes de que se puedan serializar.
En la tabla siguiente se enumeran los tipos del espacio de nombres System que no pueden transferirse en bloque de bits. Delegados, que son estructuras de datos que hacen referencia a un método estático o a una instancia de clase, y que tampoco pueden transferirse en bloque de bits.
| Tipo que no puede transferirse en bloque de bits | Descripción |
|---|---|
| System.Array | Se convierte en un array de estilo C o en un SAFEARRAY. |
| System.Boolean | Se convierte a un valor de uno, dos o cuatro bytes con true como 1 o -1. |
| System.Char | Se convierte en un carácter Unicode o ANSI. |
| System.Class | Se convierte a una interfaz de clase. |
| System.Object | Se convierte a una variante o una interfaz. |
| System.String | Se convierte a una cadena que termina en una referencia nula o a un tipo BSTR. |
| System.ValueType | Se convierte en una estructura con un diseño de memoria fijo. |
| T[] | Se convierte en un array de estilo C o en un SAFEARRAY. |
Solo se admiten los tipos de clase y objeto con la interoperabilidad COM.