C# C++/CLI:与C相比的优势#
托管C++/CLI与C#相比有什么主要优势吗。绝对不是我想的语法,因为C++/CLI中的以下代码非常难看 C++/CLI代码:C# C++/CLI:与C相比的优势#,c#,c++-cli,declaration,C#,C++ Cli,Declaration,托管C++/CLI与C#相比有什么主要优势吗。绝对不是我想的语法,因为C++/CLI中的以下代码非常难看 C++/CLI代码: [Out]List<SomeObject^>^% someVariable [Out]列表^%someVariable 将上述代码与C#代码进行比较: out List someVariable 只是出于好奇,C++中有一个更丑陋的语法,与上面的比较,< P>托管C++的优点是易于混合托管代码和非托管代码。但是如果所有代码(或几乎所有)都将被管理,那么
[Out]List<SomeObject^>^% someVariable
[Out]列表^%someVariable
将上述代码与C#代码进行比较:
out List someVariable
只是出于好奇,C++中有一个更丑陋的语法,与上面的比较,
< P>托管C++的优点是易于混合托管代码和非托管代码。但是如果所有代码(或几乎所有)都将被管理,那么C肯定应该被使用(并且你仍然可以使用)。与本地C++代码更容易的互操作是一个优点。 这是否是一个主要优势是主观的
< C++ > C++ C++语言,很容易与C语言相结合。使用C++ +CLI,与本地C++代码< /p> 很容易交互。当你必须使用C++时,如果你能满足C的要求,那么为什么要去C++CLI < P>我认为C++的主要优点是简单地熟悉C++开发人员。如果你不是来自C++背景,那么就与C语言进行合作。 < P>它几乎完全是一种可互操作的语言——既允许.NET代码访问传统的C++库,也可以用于扩展的现有(原生)C++代码库,访问.NET库(以及这些主题的一些变体)。 虽然可以在C++或CLI中完全编写成熟的应用程序,但它甚至可以提供一些纯C++中不可用的语言特性(例如垃圾收集),我怀疑有很多人会真正做到这一点。如果你已经离开了纯C++,没有与.NET交互的目标,可能会有更多的自然选择(例如,或者取决于你想进入哪个方向)。
同样,从纯C到C++的CLI可以带来C++模板的优点,但是这种需求很难得到你的步骤。 < P>我可以想到使用C++ +CLI的3个主要原因: <>你已经有一个大的C++项目,想在.NET中使用.NET(你是否想在将来完全迁移它)
非托管C++应用程序不需要运行框架,C.*只在DOTNET框架1, 2, 3或4的机器上运行。令人惊讶的是,有多少机器仍然在没有这些框架的情况下运行。
作为一名主要的C#程序员,我发现自己不得不带着一点痛苦使用C++/CLI。然而,作为一种互操作语言,它远远超过了C语言,因为它必须使用本机代码。VisualStudio中的C++/CLI IDE缺少C风格的许多功能总的来说,它有自己的位置,只要本机代码存在,它就仍然是可行的。如果不是必须的话,我不想从头开始使用C++/CLI IDE创建WinForm应用程序。能够直接使用本机头文件是一个巨大的优势,但不是唯一的优势 堆栈语义比C#为
IDisposable
管理提供的任何功能都要好得多。C++/CLI有一个统一的语法,用于正确管理可IDisposable和不可IDisposable的变量(作为局部变量和成员字段)。比较:
ref class MyClass
{
FileStream fs;
}
vs
现在哪种语言看起来很丑
还有模板、
interior#ptr
、#define
、本机DLL导出、指向成员的指针,以及我可能忘记的其他一些东西。CLI/C++比C++有许多优点
我讨厌必须信任GC才能找到卡在gen 2上的对象。天知道它什么时候会从托管堆中释放。回答得好。但这并不是主观的——如果(并且只有当)你别无选择,只能处理现有的本地代码,这是一个主要的优势。这仍然是主观的。如果需要使用现有的DLL,可以选择使用C#和P/Invoke与现有代码进行互操作。对您来说,更容易进行互操作是“主要”优势还是“次要”优势,而拥有C#则是“主要”优势还是“次要”优势,完全取决于提出问题的人。我认为并非如此。我来自C++背景(与java和delphi混合),C语言很容易掌握。仅仅为了熟悉,不需要C++/CLI。我很幸运地摆脱了C++语法:有趣的是,我做过任何一段C++都有一段时间了,但是我认为C++和CLI语法比C语言更熟悉,但我想不是!你能详细说明关于语音识别或图像处理的3点吗?C++中的图像处理。在以前的项目中,我必须在C++的ASMX Web服务应用程序和IBM中间件之间编写一个接口,该中间件只有一个C++ API库(不是DLL,而是一个静态库)。C++/CLI是创建此桥的唯一选择。正在进行D.Net实现。也许在不久的将来,D可以与.Net进行互操作。我同意,除了#define。从我的观点来看,它在许多项目中的巨大而冷漠的使用是一个PITA。
ref class MyClass
{
FileStream fs;
}
class MyClass : IDisposable
{
FileStream fs;
void IDisposable.Dispose() { Dispose(true); }
~MyClass() { Dispose(false); }
public virtual void Dispose(bool disposing) { if (disposing) fs.Dispose(); }
}