Tipos que pueden o que no pueden transferirse en bloque de bits

La mayoría de los tipos de datos tienen una representación común tanto en la memoria administrada como en la no administrada y no requieren un tratamiento especial por parte del administrador de serialización 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:

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. Esto incluye una matriz de referencias a objetos que pueden transferirse en bloque de bits por sí mismos. Por ejemplo, se puede definir una estructura que puede transferirse en bloque de bits, pero no se puede definir un tipo que puede transferirse en bloque de bits que contiene 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 se serializan realmente como parámetros In y se deben aplicar los atributos InAttribute y OutAttribute si se quiere serializar el argumento como parámetro In/Out.

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 deben convertirse 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 a una matriz de estilo de C o a una SAFEARRAY.
System.Boolean Se convierte a un valor de uno, dos o cuatro bytes con true como 1 o -1.
System.Char Se convierte a un carácter ANSI o Unicode.
System.Class Se convierte a una interfaz de clase.
System.Object Se convierte a una variante o una interfaz.
System.Mdarray Se convierte a una matriz de estilo de C o a una SAFEARRAY.
System.String Se convierte a una cadena que termina en una referencia nula o a un tipo BSTR.
System.Valuetype Se convierte a una estructura con un diseño de memoria fijo.
System.Szarray Se convierte a una matriz de estilo de C o a una SAFEARRAY.

Solo se admiten los tipos de clase y objeto con la interoperabilidad COM. Para obtener los tipos correspondientes en Visual Basic, C# y C++, vea el artículo de introducción a la biblioteca de clases.

Vea también