2012-08-06 34 views
-1

实例我一直在使用C#.NET很长一段时间,最近我决定,这将是有益的,切换到C++/CLI。所以,我决定购买一个转换器,并将我的一个大型项目转换为C++/CLI,我发现了一个非常好的转换器,只有几个BIG问题:类和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#的前缀,在C++/CLI中都以“ref”为前缀?另外,无论如何,这是否与在一个文件中拥有多个类有关?

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

+0

你应该尝试信任**任何**自动转换器之前学习C++/CLI,因为自动转换工具不能很好地处理到C++的转换。 – 2012-08-06 19:48:35

+0

想我可以通过继续发展,但交换学习,这就是我从VB了解到C#,我已经明白这一点反正... – 2012-08-06 19:52:33

回答

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; 
    } 
}; 
+0

哦,哈哈,我看到的评论字初始化,但它没有处理在我脑海里。我认为这解决了我的一个问题。谢谢。 – 2012-08-06 19:55:05