C ++ / CLI中的类和实例

时间:2012-08-06 19:43:27

标签: c# class c++-cli converter instances

我一直在使用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 VariableNameType ^VaribleName

因为很明显我不明白C ++ / CLI类是如何工作的,我的问题是:C#和C ++ / CLI中动态类有什么不同?如何创建动态C ++ / CLI类以及我可能做错了什么?为什么所有的类,在C#中都是静态的,在C ++ / CLI中以“ref”为前缀?另外,在任何情况下,这与在一个文件中包含多个类有什么关系吗?

如果您需要更多信息,请告诉我。

1 个答案:

答案 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;
    }
};