Consideraciones generales
Todas las llamadas realizadas entre el código administrado y no administrado deben negociar los requisitos impuestos por cada modelo de programación respectivo. Los modelos de programación administrado y no administrado son diferentes en numerosos aspectos. En la siguiente tabla se muestran las características que definen cada modelo.
Característica | Modelo no administrado | Modelo administrado |
---|---|---|
Modelo de codificación |
Basado en interfaces |
Basado en objetos |
Identidad |
GUID |
Nombres seguros |
Mecanismo de control de errores |
Valores HRESULT |
Excepciones |
Compatibilidad de tipos |
Estándar binario |
Estándar de tipo |
Definiciones de tipo |
Biblioteca de tipos |
Metadatos |
Seguridad de tipos |
Sin seguridad de tipos |
Con seguridad de forma opcional |
Control de versiones |
Inmutable |
Resiliente |
Algunas características del modelo de programación tienen entidades asociadas que puede ver, como las bibliotecas de tipos y los metadatos. Algunas de ellas pueden pasarse como argumentos, como los identificadores únicos globales (GUID) y los nombres seguros. Otras características son más conceptuales: sin duda alguna tendrá en cuenta su impacto en el diseño de su aplicación, pero no encontrará ninguna asignación directa entre los modelos administrado y no administrado para estas características.
En las siguientes secciones se explica con más detalle cada una de estas características.
Modelos de codificación
Los objetos no administrados siempre se comunican a través de interfaces; las clases y los objetos administrados pueden pasar datos directamente sin implementar interfaces.De manera predeterminada, la interoperabilidad COM genera una interfaz de clase para exponer funcionalidad administrada mediante una interfaz a COM cuando el objeto o la clase no implementa ninguna.
- Mecanismos de control de errores
Los métodos COM suelen devolver un valor HRESULT, que indica que la llamada se realizó correctamente o produjo un error. El código administrado incorpora excepciones. De manera predeterminada, la interoperabilidad COM asigna las excepciones administradas a valores HRESULT de error.
- Identidades
Los GUID identifican un tipo administrado específico y no proporcionan información de ubicación para dicho tipo. Los nombres seguros constan de un nombre de ensamblado único además de un nombre de tipo. Como el nombre de ensamblado identifica de forma única el tipo, puede reutilizar un nombre de tipo en varios ensamblados. Un ensamblado también proporciona información de clave, versión y ubicación a un tipo administrado. Los servicios de interoperación generan GUID y tienen nombres seguros.
- Compatibilidad de tipos
Los tipos varían entre el código administrado y no administrado, y también entre los lenguajes.
- Definiciones de tipo
Si está acostumbrado a trabajar con bibliotecas de tipos, sabe que sólo contienen tipos públicos. Además, una biblioteca de tipos es opcional. En el modelo de programación administrado, la información de tipos es obligatoria para todos los tipos. Los servicios de interoperación proporcionan herramientas que convierten las bibliotecas de tipos en metadatos en los ensamblados y los metadatos en bibliotecas de tipos.
- Seguridad de tipos
Los compiladores no administrados no proporcionan comprobación de tipos para los tipos de puntero, lo que hace al código susceptible de posibles actividades peligrosas. En general, el código administrado requiere un nivel de confianza superior. Los programadores pueden seguir utilizando punteros en código administrado, aunque el código tiene restricciones debido a su comportamiento no seguro. Los servicios de interoperación impiden que el código administrado que no es de confianza tenga acceso al código no administrado.
- Control de versiones
Las interfaces COM son inmutables. Si cambia una interfaz, debe cambiar su nombre con un nuevo GUID. Los tipos administrados pueden evolucionar y conservar el mismo nombre.