2009-03-27 16 views

Respuesta

12

componentes .NET se gestionan código (eliminación de la memoria se hace para usted)

COM es un estándar de interfaz para los componentes de software. Los componentes COM son código no administrado (la eliminación de la memoria se realiza mediante el recuento de referencias).

De here:

cómo se relacionan COM y .NET?

COM y .NET son tecnologías complementarias de desarrollo . .NET Common Language Runtime proporciona una integración transparente bidireccional, con COM. Esto significa que las aplicaciones COM y .NET y los componentes pueden usar la funcionalidad de cada sistema. Esto protege sus inversiones existentes en las aplicaciones COM mientras le permite aprovechar .NET a un ritmo controlado . COM y .NET pueden lograr resultados similares . .NET Framework proporciona a los desarrolladores un número significativo de de ventajas que incluyen un modelo de seguridad basado en evidencia más robusto, , gestión de memoria automática y nativos soporte de servicios web. Para el nuevo desarrollo , Microsoft recomienda .NET como una tecnología preferida debido a su potente entorno de tiempo de ejecución administrado y servicios.

+1

Gestionado frente unmanged no es realmente una diferencia. También podría tener componentes COM creados en un lenguaje .NET. La pregunta como tal no es absolutamente correcta, porque los componentes .NET y los componentes COM no son complementarios. –

+2

Puede usar regasm para consumir cualquier componente .NET desde COM; sigue siendo un componente .NET ... –

+1

@Mitch: creo que deberías corregir tu respuesta. Todavía muchos componentes COM están escritos en VB6, que utiliza el recuento de referencias para gestionar la eliminación de memoria de forma automática. Es por eso que su punto COM == no administrado vs. .NET == administrado no es correcto. –

5

. Los componentes .NET se ejecutan en el CLR, mientras que los componentes COM son esencialmente DLL nativas de Windows.

. Los componentes .NET también exponen muchos más metadatos que los componentes COM. Este rediseño se realizó en parte para hacer que los componentes fueran más interoperables. En particular, los componentes de .NET no hacen suposiciones específicas de la plataforma sobre el diseño de datos y las convenciones de llamadas.

Ver Don Box.

+2

¿El CLR está realmente escrito usando COM? Sé que muchas de las bibliotecas de framework son envoltorios alrededor de las bibliotecas COM existentes, pero ¿es el tiempo de ejecución real utilizando bibliotecas COM? – sipwiz

+0

@sipwiz No revisé todo [repo de CoreCLR] (https://github.com/dotnet/coreclr) pero aún no encontré ninguna COM. – jrh

+1

@jrh, he eliminado la declaración. Eso se basó en el libro de Don Box sobre el funcionamiento interno de CLR, que leí en 2005 y ya no tengo una copia. Fue escrito en contra de una versión muy temprana de .NET (* long * before ".NET Core") y sospecho que algunos de ellos estaban desactualizados antes de que el libro siquiera se imprimiera. Baste decir que .NET ya no está basado en COM (si es que alguna vez lo fue). – harpo

5

Los componentes COM son componentes de código C++ no administrados diseñados para hacer que el software sea reutilizable a nivel binario. Los componentes NET son similares, aunque 1) se pueden crear en lenguajes CLR, mientras que los componentes COM se pueden compilar solo con C++ 2) Están pensados ​​para ejecutarse bajo un tiempo de ejecución administrado. Creo que esas son diferencias esenciales.

EDIT:

C++ es el lenguaje más "natural" en el COM, pero los componentes COM se puede crear en muchas idiomas. Gracias por los comentarios, gente.

+3

Esto no es del todo cierto. Los componentes COM se pueden crear en muchos idiomas diferentes, entre ellos C++, VB y lenguajes .NET como C# o VB.Net –

+0

VB? No uso eso desde 5.0 días, pero eso puede ser cierto. ¿Cómo puede VB manejar, por ejemplo, esos parámetros de puntero a puntero para algunas funciones COM? –

+1

divo Investigué y tienes razón;) –

Cuestiones relacionadas