我一直在使用C#.net很长一段时间,最近我决定切换到C ++ / CLI会很有用。所以,我决定使用转换器并将我的一个较大的项目转换为C ++ / CLI,我发现了一个非常好的转换器,只有几个大问题:
对于我在C#项目中使用的每个非静态类,编译器在代码创建新实例时都会出现错误。 “缺少类型说明符 - 假设为int ...”所有类都标题为public ref class ClassName : BaseClassName
这也是非常令人困惑的,因为应该是静态的类和不应该是静态的类都标题为这样。
转换器还在代码中的位置留下了注释:
//C++ does not allow initialization of non-static fields in their declarations:
这些总是在我原来的非静态类之一,并且总是紧随其后
Type VariableName
或Type ^VaribleName
因为很明显我不明白C ++ / CLI类是如何工作的,我的问题是:C#和C ++ / CLI中动态类有什么不同?如何创建动态C ++ / CLI类以及我可能做错了什么?为什么所有的类,在C#中都是静态的,在C ++ / CLI中以“ref”为前缀?另外,在任何情况下,这与在一个文件中包含多个类有什么关系吗?
如果您需要更多信息,请告诉我。
答案 0 :(得分:1)
您需要了解C ++ / CLI才能真正理解转换器创建的代码。
基本上,在C ++ / CLI中,ref class
是一个C#样式类。普通class
(不ref
)是本机C ++类定义。
从C#转换时,所有C#类声明都将以ref class
结尾,因为它们是托管(.NET)类。
//C++ does not allow initialization of non-static fields in their declarations
的注释是因为你不能拥有一个在C ++ / CLI中定义其成员内联的类。例如,这个C#:
class Foo
{
private int test = 3;
}
需要使用构造函数转换为C ++ / CLI:
ref class Foo
{
private:
int test;
public:
Foo()
{
test = 3;
}
};