C ++ / CLI:优于C#的优势

时间:2009-12-11 09:33:34

标签: c# c++-cli declaration

托管C ++ / CLI与C#相比有什么主要优势吗?绝对不是我认为的语法,因为C ++ / CLI中的以下代码真的很难看,

C ++ / CLI代码:

[Out]List<SomeObject^>^% someVariable

将上述内容与C#代码进行比较:

out List<SomeObject> someVariable

出于好奇,与上述相比,C ++ / CLI中的语法是否更加丑陋。

11 个答案:

答案 0 :(得分:13)

它几乎完全是一种互操作性语言 - 既允许.Net代码访问旧版C ++库,也可以用于扩展现有(本机)C ++代码库,可以访问.Net库(以及这些主题的一些变体)。

虽然 可以仅在C ++ / CLI中编写完全成熟的应用程序,它甚至可以为您提供纯C ++中不具备的一些语言功能(例如垃圾收集),但我怀疑有很多实际上会这样做的人。如果你已经离开了纯粹的C ++并且没有与.Net互操作的目标,那么可能有更多自然的选择(例如DScala - 取决于哪个方向你想进去。)

同样,从纯C#转向C ++ / CLI可以说可以带来C ++模板的优势,但是这种需求很少会导致你采取这一步骤。

答案 1 :(得分:12)

与本机C ++代码更容易的互操作是一个优势。

这是一个主要优势是主观的。

除非您想与现有的本机C ++代码混合使用,否则使用C#可能会好得多。

答案 2 :(得分:6)

我可以想到使用C ++ / CLI的三个主要原因:

  1. 您已经拥有一个大型C ++项目,并希望在其中使用.NET(无论您是否希望将来完全迁移它)
  2. 您想要使用用C或C ++编写的库。对于简单的库,您可以使用C#/ PInvoke,但是如果libary带有复杂类型系统,那么最好不要创建C ++ / CLI包装器而不是在C#中重新创建类型系统
  3. 项目中的部分最好用C ++编写。例如。如果你正在进行语音识别或图像处理,C ++可能只是更适合这项任务。

答案 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 ++有许多优点。

  1. STD图书馆
  2. 反汇编程序(如Reflector)无法查看本机C ++ / C,因为它们实际上不是CLI(不需要混淆(尽管一个好的黑客已经可以通过它获取))。
  3. Mingling C / C ++项目作为与.Net语言一起使用的包装器。 C ++ / CLI不是一种语言,只是通过C / C ++添加了对.Net的支持。
  4. 通过指向堆上C / C ++对象的C / C ++指针对内存进行一些控制。
  5. 我讨厌不得不相信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的机器上运行。令人惊讶的是有多少机器在没有这些框架的情况下仍然运行。