Ser capaz de utilizar archivos de encabezados nativos directamente es una gran ventaja, pero no la única.
La semántica de la pila es mucho mejor que cualquier cosa C# tiene que ofrecer para la gestión IDisposable
. C++/CLI tiene una sintaxis uniforme para gestionar correctamente las variables que son IDisposable
y aquellas que no lo son, como variables locales y como campos de miembros. Comparación:
ref class MyClass
{
FileStream fs;
}
vs
class MyClass : IDisposable
{
FileStream fs;
void IDisposable.Dispose() { Dispose(true); }
~MyClass() { Dispose(false); }
public virtual void Dispose(bool disposing) { if (disposing) fs.Dispose(); }
}
Ahora que el lenguaje está mirando feo?
Luego están las plantillas, interior_ptr
, #define
, exportaciones nativas de DLL, puntero a miembro, y probablemente varias otras cosas que he olvidado.
Puedo agregar para apoyar esto. En un proyecto anterior tuve que escribir una interfaz entre una aplicación de servicio web C# asmx y un middleware de IBM que solo tenía una biblioteca api de C++ (no una DLL sino una lib estática). C++/CLI fue la única opción para crear este puente. – softveda
Una implementación D .Net está en proceso. Puede ser que, en el futuro cercano, D pueda interoperar con .Net. – dsimcha
@dsimcha - eso sería genial – philsquared