Cuál es la diferencia entre los componentes .NET y los componentes COM, a veces utilizamos los componentes .NET para incluirlos en nuestros proyectos y, a veces, incluimos la referencia COM. ¿Cuál es la idea detrás? Gracias por adelantado.Cuál es la diferencia entre los componentes .NET y los componentes COM
Respuesta
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.
. 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.
¿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
@sipwiz No revisé todo [repo de CoreCLR] (https://github.com/dotnet/coreclr) pero aún no encontré ninguna COM. – jrh
@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
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.
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 –
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? –
divo Investigué y tienes razón;) –
Algunos más información sobre este tema
- 1. Diferencia entre "COM" tradicional y COM + (en servicios de componentes)
- 2. ¿Hay alguna diferencia entre las manchas y los componentes conectados?
- 3. ¿Cuál es la diferencia entre un lenguaje orientado a componentes y orientado a objetos?
- 4. Java: diferencia entre los métodos setPreferredSize() y setSize() en los componentes
- 5. Diferencia entre componentes, módulos, extensiones y complementos en Joomla
- 6. ¿Cuál es el nombre propiedad de los componentes oscilantes?
- 7. .Net - ¿Cuál es la diferencia entre una Session Facade y Business Delegate?
- 8. Diferencia entre el módulo y componentes en Joomla
- 9. Symfony: ¿Es posible configurarTemplate para los componentes?
- 10. ¿Cuál es la diferencia entre pInvoke y COM Interop?
- 11. ¿Cuál es la diferencia entre COM y OLE?
- 12. ¿Cuál es la diferencia entre los recursos administrados y los nativos al deshacerse? (.NET)
- 13. Extendiendo los componentes de Richfaces
- 14. ¿Cómo obtener los parámetros de los componentes?
- 15. ¿Cuál es la diferencia entre una cadena COM (BSTR) y una cadena .NET?
- 16. ¿Cuál es la diferencia entre los eventos Control.Enter y Control.GotFocus?
- 17. ¿cuál es la diferencia entre los navegadores y el nodo?
- 18. ¿Cuál es la diferencia entre los archivos .lib y .a?
- 19. ¿Cuál es la diferencia entre los algoritmos genéticos y evolutivos?
- 20. ¿Cuál es la diferencia entre los datos-dojotype y dojoType?
- 21. ¿Cuál es la diferencia entre todos los proyectos y subproyectos
- 22. ¿Cuál es la diferencia entre los métodos iterator y view?
- 23. ¿Cuál es la diferencia entre los archivos apklib y jar?
- 24. ¿Cuál es la diferencia entre los certificados rapidSSL y geotrust?
- 25. ¿Cuál es la diferencia entre los archivos .class y .dex?
- 26. ¿Cuál es la diferencia entre los paquetes android.opengl y javax.microedition.khronos.opengles?
- 27. ¿Cuál es la diferencia entre los archivos .so y .a?
- 28. ¿Cuál es la diferencia entre los archivos .htc y .js?
- 29. ¿Cuál es la diferencia entre los atributos "wairole" y "role"?
- 30. ¿Cuál es la diferencia entre Rack y Rails Metal (Ruby)?
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. –
Puede usar regasm para consumir cualquier componente .NET desde COM; sigue siendo un componente .NET ... –
@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. –