如果您必须在C#和托管C ++之间做出决定,您会选择哪个以及为什么?
托管C ++相对于C#有什么好处?你更喜欢哪种语言?在什么情况下你会做出什么决定?
答案 0 :(得分:22)
如果我:
,我会使用托管C ++已经掌握了一些C ++技能,因为上述任务需要经验丰富的C ++程序员。大多数时候,如果公司已经拥有C ++代码库,那么我只考虑托管C ++,否则谁将维护托管C ++代码。
在其他情况下,我总是选择C#。即使我选择托管C ++作为系统的一部分,我也会尽量在C#中编写尽可能多的系统。
将管理C ++视为桥梁构建工具包,以便在它之间进行 C / C ++的非托管世界和 管理的.NET世界。
如果您只需要从C#调用一些简单的API,那么请参阅pinvoke.net和this overview以了解如何从C#调用它们,作为几行复杂的pinvoke代码( C#中的预构建桥)通常比将C ++引入尚未使用它的项目更好。
答案 1 :(得分:5)
托管C ++的好处是什么? 在C#?
C ++ .net对于与C ++和C代码交互非常有用(即,调用外部C或C ++库,为使用C或C ++编写的外部模块提供回调函数等。
你们两种语言 喜欢?
除了上面介绍的情况(与C和C ++交互)之外,我更喜欢C#。
C#更易于编写,更简单,并且专门用于使用.NET平台。 C ++也可以做到这一点,但它具有C ++语言的所有复杂性以及使用.NET平台所需的扩展。
除非您需要与本机C ++或C代码进行交互,否则在大多数情况下(例如,如果您正在编写.NET平台),最好使用C#。
通常我更喜欢C ++,但是当需要为.NET编写代码时,它不会超过C#。
答案 2 :(得分:4)
托管C ++适用于与C ++互操作:例如,如果你有一个.NET应用程序,你的程序集必须与作为C ++ .lib文件(我不止一次)的本机接口进行交互,或者一个不错的C ++ API。
示例:Rithmic(不是您曾经听过的)直到最近才支持C ++ API。如果你试图从C#访问它们 - 祝你好运;)托管C ++允许我访问他们的API并公开漂亮的.NET对象。
基本上互操作。托管C ++真正与低级C / C ++ API互操作。
答案 3 :(得分:2)
当我需要构建具有大量C ++非托管代码的新.NET组件时,我使用了托管C ++。 我做了一个特定的类,用于从旧的C ++代码向前和向后传输一些对象。
答案 4 :(得分:2)
我遇到了一个在托管C ++中透明的问题,但在C#中引起了很大的麻烦 - 我不得不将回调函数发送到C ++非托管库,它将此回调定义为__cdecl。在C#中,默认的调用约定是__stdcall,并且它很适合将C#委托从__stdcall移动到__cdecl(实际上它需要'shim'非托管DLL才能这样做或者使用一些反射类)。 在C ++,(C ++ .Net)中,它只是一个简单的属性。
答案 5 :(得分:1)
我没有亲自编写或阅读过托管C ++中过多的代码行,但从我看到它看起来过于复杂和不完整。也就是说,如果你真的擅长C ++,你可能想要使用托管C ++,而当学习新语言的习语和模式时会有太大的风险。
如果您非常称职,请使用C#。如果您只是开始使用C ++和C#,我认为,C#是更容易实现的途径。
答案 6 :(得分:0)
由于广泛的.NET标准库,我更喜欢C#,特别是.NET,而不是C ++。