[英]What are the advantages of using C++/CLI instead of C# for wrapping a (third party) C-library (dll)?
[英]C++/CLI : Advantages over C#
托管C ++ / CLI与C#相比有什么主要优势吗? 绝对不是我想的语法,因为C ++ / CLI中的以下代码真的很难看,
C ++ / CLI代码:
[Out]List<SomeObject^>^% someVariable
比较上面的C#代码:
out List<SomeObject> someVariable
出于好奇,与上面相比,C ++ / CLI中的语法更加丑陋。
与本机C ++代码更容易的互操作是一个优势。
它是否具有主要优势是主观的。
除非你想与现有的原生C ++代码混合使用,否则你可能会更好地使用C#。
我可以想到使用C ++ / CLI的3个主要原因:
能够直接使用本机头文件是一个巨大的优势,但不是唯一的。
堆栈语义比C#为IDisposable
管理提供的任何东西都要好得多。 C ++ / CLI有一个统一的语法,用于正确管理IDisposable
变量和非变量变量,包括局部变量和成员字段。 比较:
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(); }
}
现在哪种语言看起来很难看?
然后是模板, interior_ptr
,# #define
,本机DLL导出,指向成员的指针,以及可能还有其他几件我忘记的事情。
使用C ++ / CLI,可以很容易地与本机C ++代码进行交互
托管C ++的优点是可以轻松混合托管代码和非托管代码。 但是如果要管理所有(或几乎所有)代码,那么绝对应该使用C#(你仍然可以使用DllImport属性 从C#调用非托管代码 )。
CLI / C ++比C#有许多优点。
我讨厌必须相信GC才能找到一个停留在gen 2上的对象。Lord知道什么时候会从托管堆中释放出来。
作为一名以C#为主的程序员,我发现自己不得不使用C ++ / CLI带来一点痛苦。 但是,作为一种互操作语言,它必须使用本机代码才能超过C#。 Visual Studio中的C ++ / CLI IDE缺少C#风格的许多功能。
总的来说,只要存在本机代码,它就有它的位置并且仍然可行。 如果我不需要,我不想用C ++ / CLI IDE从头开始创建WinForm应用程序。
你必须转向c ++ \\ cli,如果你能用c#满足你的要求,为什么还要去c ++ \\ cli
一般来说,我认为C ++ / CLI的主要优点是对C ++开发人员的熟悉程度。 如果您不是来自C ++背景,那么请使用C#。
非托管c ++应用程序不需要运行框架,c#只能在具有dotnet框架1,2,3或4的机器上运行。令人惊讶的是有多少机器在没有这些框架的情况下仍然运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.