谁能告诉我为什么,伟大的微软创造了C#语言,现在我们在C# 4.0,没有C++\CLI的一个重要功能!!,那就是直接编译和链接非托管c++ ??
发布于 2010-04-02 14:55:46
C#是一种不同的语言。它不一定要包含任何其他语言的所有功能才能对其用户社区有用。特别是,C# 4.0的重点是通过吸收动态(脚本)语言的特性来与C++完全相反的方向。此外,当C#与C/C++共享特性(例如指针)时,它们被隔离在一个特殊的“不安全”模式中,以表明它们通常是不受欢迎的。
此外,由于.NET是一个多语言平台,因此不需要每种语言都包含其他语言的所有功能才能实现互操作。无论如何,他们可以很容易地互相呼叫。
请注意,C++和C#在许多关键字和运算符的含义上根本不一致。例如:
class C { }(先不考虑它后面是否应该有一个分号(前面可以有一个逗号分隔的变量声明列表),这将很难统一。)
C是否应该是一个本机C++类,可以分配非托管内存并传递给其他本机代码,而不必固定在GC中?或者它应该是一个可以传递给其他.NET库的.NET类?
或者是这样:
C c;应该声明对C引用,还是应该创建一个C实例
或者是这样:
new C()应该在本地C++堆上还是在GC .NET堆上进行分配?
在C++/CLI中,所有这些问题都必须得到解决。从以前版本中出现的混乱中吸取教训,微软通过使用不同的关键字,如gcnew而不是new,清楚地将C++/CLI中的两个世界分开。
如果您试图让C#像现在这样编译C++,那么您将不得不重命名许多已经是C#基础的操作,从而破坏与所有现有C#程序的兼容性。
有什么意义呢?
发布于 2010-04-02 14:49:51
因为C#是一种托管语言,打算用来编写托管代码,而C++/CLI已经存在,可以弥补那些需要直接链接非托管C/C++代码的人的差距?
我不知道为什么除了DllImport/PInvoke之外,你还想要更多的原生互连支持。再多一点,你只需要重新创建语法稍有不同的C++/CLI即可。
发布于 2010-04-02 14:50:10
您可以使用PInvoke调用C++代码,即使它是不同的。
https://stackoverflow.com/questions/2565392
复制相似问题