Esta es una pregunta muy general. Soy un "programador" autodidacta que programa en C#. Un proyecto en el que me gustaría trabajar sería mucho más fácil (en el gran esquema de cosas) si supiera C++. ¿Qué tan fácil es pasar de C# a C++? ¿Alguna dificultad de la que debería estar pendiente? Y si estoy usando VS2010, ¿puedo programar (no en la misma clase, pero el mismo proyecto) algo en C# y C++?Pasar de C# a C++ (además de trabajar con ambos en la misma solución)
Respuesta
Pasar de C# a C++ no es fácil. La sintaxis básica puede aparecer igual (por ejemplo, si, para ...), pero existen diferencias profundas, p. Ej. el patrón RAII y las variables de semántica de pila cuyos destructores se invocan cuando salen del alcance, etc. no están presentes en C#.
Además, C# utiliza un recolector de basura no determinista (que puede estar bien para recursos de memoria, pero es inútil para otro tipo de recursos). En cambio, con C++ moderno, puede usar plantillas y punteros inteligentes (como std ::/boost :: * shared_ptr *), que le permiten tener determinista "recolección de basura" contada por referencia, que es muy eficiente, y es válido tanto para recursos de memoria como para recursos que no son de memoria (como manejadores de archivos, conectores, texturas ...).
Por otra parte, los C# genéricos son muy diferentes de las plantillas de C++ (C++ plantillas son muy de gran alcance, y permiten un nivel avanzado de programación llamado plantilla de meta-programación).
En VS2010 puede tener una solución para alojar proyectos C++ y C#. Para comunicarse entre los dos mundos (el mundo nativo de C++ y el mundo administrado de .NET/C#) puede usar C++/CLI como una especie de capa de puente.
En Windows 8 debe introducirse una nueva tecnología, llamada WinRT (basada en COM), que permite la comunicación entre idiomas. En este caso, puede usar C++ con WRL (una biblioteca basada en plantillas) o extensiones de lenguaje C++/CX para compilar componentes de C++ que se pueden usar desde C# y .NET.
Happy learning.
Gracias por su sólida respuesta. Ahora bien, no tengo idea de qué son las tres primeras cosas de las que hablas ... (RAII/stack sematics ??, recolector de basura no determinista ?? y plantillas ??) – keynesiancross
Si mencionas 'shared_ptr', deberías al menos también mencionar los problemas obvios con él en comparación con un GC (ciclos, subprocesamiento múltiple, rendimiento) de lo contrario, que podría conducir a sorpresas interesantes para los desconocedores. Nota menor: ref contando eficiente? No en realidad no. – Voo
@Voo: el conteo de ref es ciertamente más eficiente que tener un recolector de basura funcionando como un hilo de fondo y en algún punto en el tiempo congelar todo lo que marca la memoria y barrerlo. Además, creo que .NET GC se ejecuta bajo presión de memoria, pero no tiene ninguna pista sobre otros recursos (como conectores, o memoria de textura en tarjetas gráficas, etc.). En cambio, con los destructores de C++ y shared_ptr, todos los recursos (no solo la memoria del sistema) se liberan tan pronto como nadie los haga referencia. –
puedo programar (no en la misma clase, pero el mismo proyecto) algo tanto en C# y C++?
La respuesta es no, no se puede. Puede si usa Managed C++ & C++. Pero si se está trabajando con C# y luego no se puede tener C# y el código C++ dentro de un mismo proyecto
¿Es fácil pasar de C# para C++? `
que es un poco subjetivo, pero en mi opinión, será un paso muy difícil. C++ es un idioma diferente, así que será tan difícil como aprender un nuevo idioma :) otra vez es subjetivo, así que no entraré en detalles
Dado que está trabajando con .NET, supongo que está utilizando Visual Studio?
Es bastante fácil combinar C# y C++ en el mismo programa, utilizando la opción del compilador /clr
. Su código de C++ puede incluir tanto clases de C++ normales, que cumplen con el estándar, como objetos de .NET ref class
diseñados para usar desde C#. Los dos están separados pero se pueden acceder entre sí, a través de punteros desde ref class
hasta el nativo class
, y la plantilla gcroot
desde el class
nativo al ref class
.
Tenga en cuenta que he dicho "en el mismo programa ", no "en el mismo proyecto ". Tendrá que dividirse en dos partes, un proyecto de C# y un proyecto de C++/CLI, y uno será un archivo DLL que el otro cargará. También hay un truco para combinar los dos durante la compilación, por lo que terminas con un solo archivo ejecutable, pero eso es más problemas de lo que suele valer.
Nota, es posible encontrar esta clase puntero inteligente escribí útil, que hace que el uso de class
objetos nativos de ref class
.NET objetos mucho más fácil.
Vine a la inversa de C++ a C#. En muchos sentidos, eso fue un alivio. C++ tiene muchas más reglas que C# particularmente en cuanto a la asignación de memoria. La sintaxis también puede ser desafiante y es fácil perderse en la memoria fuera de límites. Sin embargo, C++ es mucho más adecuado para la programación a nivel del sistema, pero con gran potencia implica una gran responsabilidad.
Recomiendo primero agarrar una copia de Effective C++ de Scott Meyer y leerla de principio a fin. Este es el mejor recurso que conozco para obtener los conceptos básicos correctos y sin duda mejorar la calidad del código que estaba produciendo, incluso como un desarrollador de C++ "con experiencia". A continuación, tome un marco de prueba unitario y eche un vistazo a c++ kata (en este caso, un proyecto xcode pero aún así debería ser útil). Y familiarícese con el Standard Template Library que contiene un montón de códigos/clases útiles/eficientes para contenedores, algoritmos, etc.
Por último, la mejor de las suertes. Aprender un nuevo idioma es siempre un desafío y puede ser desalentador, pero la recompensa generalmente vale la pena. Si nada más, verás tu código C# con nuevos ojos.
- 1. C#/C++ en la misma solución - DllImport no encuentra DLL
- 2. interactuando entre un proyecto de C# y un proyecto de C++ en la misma solución
- 3. ¿Cómo referencia un proyecto C# de un proyecto C++/CLi en la misma solución?
- 4. Trabajar con diferentes versiones/ramas de la misma solución de Visual Studio 2005
- 5. Solución de problemas en C++ con STL
- 6. Pasar de C# a php
- 7. impresión en la misma línea con una pausa en C
- 8. ¿Cómo pasar la matriz C# a C++ y devolverla a C# con elementos adicionales?
- 9. Pasar de C# en Windows a Objective-C en Mac
- 10. Trabajar con JSON en C# Winforms Application
- 11. Orientación a 32 bits y a 64 bits con Visual Studio en la misma solución/proyecto
- 12. Qué usar además de enum para C#
- 13. Solución alternativa para la limitación de atributo genérico de C#
- 14. Agregando la misma referencia "* .dll" a múltiples proyectos en la misma Solución
- 15. ¿Cómo trabajar con "FIFO" en C# .NET?
- 16. Pasar mensaje de C++ con subprocesos múltiples
- 17. Necesito ayuda para trabajar con bases de datos en C#
- 18. iOS Obj-C. ¿Presentando la solución correcta?
- 19. ¿Cómo pasar una lista de objetos de C++ a C#?
- 20. ¿Hay alternativas de metaprogramación en C++ además de plantillas?
- 21. Pasar un Safearray de tipos personalizados de C++ a C#
- 22. Cómo pasar cadenas de C# a C++ (y de C++ a C#) usando DLLImport?
- 23. C#: ¿Qué más usa además DataSet
- 24. cómo pasar de C# a python?
- 25. ¿Cómo trabajar con campos de cadenas en una estructura C?
- 26. ¿Es posible trabajar con OrientDB usando C#?
- 27. C++ error de parámetro clase abstracta solución
- 28. ¿Usa tareas personalizadas de MSBuild desde la misma solución?
- 29. Pasar una Estructura a C++ API usando Marshal.StructureToPtr en C#
- 30. pasar instancias de clases C++ a python con boost :: python
Es más fácil [tirarse al pie en C++] (http://m5p.com/~pravn/foot.html) y le hará mucho más daño que en C#. –
@UweKeim Esto es hilarante, ¡me reí muy bien! ¡Gracias! – formatc
@keynesiancross Lamento decir que tiene algunos días ** realmente ** difíciles por delante ahahahahaah – Chani