我该使用Managed C++还是C#来开发我的应用程序?

11
如果您必须在C#和Managed C ++之间进行选择,您会选择哪个并为什么?
在Managed C ++中是否有优势胜过C#?您更喜欢哪种语言?在什么情况下会做出什么决策?

2
我尝试过C++.NETC#:只有C++.NET让我头疼不已,感到非常困惑!它可能有其用途,但是在我的看法中,混合三个层次(CC++.NET)真的很难看。 - ereOn
2
这个问题可能已经被问过了,但我在Stackoverflow上找不到它。 - Ian Ringrose
@Ian 是的,我尝试过搜索它。但是...我觉得在SO上找到东西真的很难,因为已经有大量的问题了。 - OlimilOops
3
C++的托管变体被称为C++/CLI。曾经有一种叫做Managed C++的东西,相当可怕。而且从未有过C++.NET。 - Kate Gregory
鉴于当前的参数,这个问题没有客观答案。 - George Stocker
7个回答

22

如果我需要:

  • 与现有的C/C++代码进行集成
  • 将现有的C/C++代码移植到.NET
  • 从C++中使用.NET对象
  • 以比.NET更复杂的方式在COM上公开.NET对象
  • 直接访问硬件
  • 调用大量非托管API

我会使用托管C++,前提是我已经具备了一定的C++编程技能。大多数情况下,我只会考虑使用托管C++,如果公司已经有了C++代码库,否则谁来维护托管C++代码。

在其他情况下,我总是选择C#。即使我选择使用托管C++作为系统的一部分,我也会尽可能多地使用C#编写系统。

将托管C++视为一个桥梁建造工具包,用于在C/C++的非托管世界和.NET的托管世界之间进行切换。

如果你只需要从C#调用几个简单的API,请参见pinvoke.netthis overview,找出如何从C#调用它们,因为在不使用C++的项目中,几行复杂的PInvoke代码(预构建的桥梁)通常比引入C++更好。


5

管理的C++相对于C#有什么好处?

C++.net适用于与C++和C代码交互(即调用外部C或C++库,为以C或C++编写的外部模块提供回调函数等)。

你更喜欢哪种语言?

除了上述情况(与C和C++交互),我更喜欢使用C#。

C#更易于编写,更简单,并专门针对.NET平台使用。 C++也可以做到这一点,但它具有C++语言的所有复杂性以及使用.NET平台所需的扩展。

除非您需要与本机C++或C代码交互,否则在大多数情况下最好使用C#(即如果您正在为.NET平台编码)。

通常我更喜欢C ++,但是当需要为.NET编码时,C#更胜一筹。


4

托管C++非常适合与C++进行交互:例如,如果您有一个.NET应用程序,而您的程序集必须与作为C++ .lib文件提供的本机接口进行交互(我不止一次遇到过这种情况),或者与漂亮的C++ API进行交互。

例如:Rithmic(你可能从未听说过)直到最近仅支持C++ API。如果您尝试从C#访问它们-祝你好运;) 托管C++允许我访问他们的API并公开漂亮的.NET对象。

基本上是互操作性。托管C++在与低级C / C++ API的互操作方面真正闪耀。


+1 我在您编辑之前看到了您的回答,感谢您多加了一些"情感"。不过还是要感谢ChrisW将其编辑得更加适合SO。 - OlimilOops

2

当我需要构建大量C++非托管代码的新.NET组件时,我使用了托管C++。

我创建了一个特定的类,用于在旧的C++代码中向前和向后传递一些对象。


2
我遇到了一个问题,在managed C++中很透明,但在C#中却让我头痛不已——我需要将一个回调函数发送给一个定义了__cdecl回调的C++非托管库。在C#中,默认的调用约定是__stdcall,将一个C#委托从__stdcall移动到__cdecl相当复杂(实际上需要使用“shim”非托管DLL或使用一些反射类)。在C++(包括C++.Net)中,这只是一个简单的属性。

1

我个人没有写过太多的托管C++代码,也没有阅读过太多。但是从我所看到的来看,它看起来太复杂和不连贯了。话虽如此,如果你真的很擅长C++,并且学习新语言的习惯用法和模式会带来太大的风险,那么你可能想使用托管C++。

如果你相当熟练地掌握了C#,那么就使用C#吧。如果你刚开始学习C++和C#,我认为C#是更容易上手的。


0
我更喜欢使用C#或者是.NET,而不是C++,因为.NET标准库非常丰富。

3
这个问题涉及到具有访问.NET库的Managed C ++,因此您的回答没有帮助。 - Foole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接