托管C ++ / CLI与C#相比有什么主要优势吗?绝对不是我认为的语法,因为C ++ / CLI中的以下代码真的很难看,
C ++ / CLI代码:
[Out]List<SomeObject^>^% someVariable
将上述内容与C#代码进行比较:
out List<SomeObject> someVariable
出于好奇,与上述相比,C ++ / CLI中的语法是否更加丑陋。
答案 0 :(得分:13)
它几乎完全是一种互操作性语言 - 既允许.Net代码访问旧版C ++库,也可以用于扩展现有(本机)C ++代码库,可以访问.Net库(以及这些主题的一些变体)。
虽然 可以仅在C ++ / CLI中编写完全成熟的应用程序,它甚至可以为您提供纯C ++中不具备的一些语言功能(例如垃圾收集),但我怀疑有很多实际上会这样做的人。如果你已经离开了纯粹的C ++并且没有与.Net互操作的目标,那么可能有更多自然的选择(例如D或Scala - 取决于哪个方向你想进去。)
同样,从纯C#转向C ++ / CLI可以说可以带来C ++模板的优势,但是这种需求很少会导致你采取这一步骤。
答案 1 :(得分:12)
与本机C ++代码更容易的互操作是一个优势。
这是一个主要优势是主观的。
除非您想与现有的本机C ++代码混合使用,否则使用C#可能会好得多。
答案 2 :(得分:6)
我可以想到使用C ++ / CLI的三个主要原因:
答案 3 :(得分:5)
能够直接使用本机头文件是一个巨大的优势,但不是唯一的优势。
堆栈语义比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导出,指向成员的指针,以及可能还有其他一些我忘记的事情。
答案 4 :(得分:3)
使用C ++ / CLI可以很容易地与本机C ++代码进行交互
答案 5 :(得分:2)
托管C ++的优势在于可以轻松混合托管代码和非托管代码。但是,如果您的所有(或几乎所有)代码都将被管理,那么绝对应该使用C#(您仍然可以invoking unmanaged code from C#使用DllImport attribute)。
答案 6 :(得分:2)
与C#相比,CLI / C ++有许多优点。
我讨厌不得不相信GC才能找到一个停留在gen 2上的对象2. Lord知道什么时候会从托管堆中释放出来。
答案 7 :(得分:1)
作为一名以C#为主的程序员,我发现自己不得不使用C ++ / CLI带来一点痛苦。但是,作为一种互操作语言,它必须使用本机代码才能超过C#。 Visual Studio中的C ++ / CLI IDE缺少C#风格的许多功能。
总的来说,只要存在本机代码,它就有它的位置并且仍然可行。如果我不需要,我不想用C ++ / CLI IDE从头开始创建WinForm应用程序。
答案 8 :(得分:0)
你必须转向c ++ \ cli,如果你能用c#满足你的要求,为什么还要去c ++ \ cli
答案 9 :(得分:0)
通常,我认为C ++ / CLI的主要优点是对C ++开发人员的熟悉程度。如果你不是来自C ++背景,那就去C#。
答案 10 :(得分:0)
非托管c ++应用程序不需要运行框架,c#只能在具有dotnet框架1,2,3或4的机器上运行。令人惊讶的是有多少机器在没有这些框架的情况下仍然运行。