0

我已经使用 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 VariableNameorType ^VaribleName

因此,显然我不了解 C++/CLI 类是如何工作的,所以我的问题是:C# 和 C++/CLI 中的动态类有什么区别?如何制作动态 C++/CLI 类,我可能做错了什么?为什么 C# 中的所有类(无论是否为静态天气)都在 C++/CLI 中以“ref”为前缀?另外,这是否与在一个文件中包含多个类有关?

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

4

1 回答 1

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;
    }
};
于 2012-08-06T19:47:58.293 回答