0

私は非常に長い間 C#.net を使用してきましたが、最近、C++/CLI に切り替えることが有益であると判断しました。そこで、コンバーターを入手して、大規模なプロジェクトの 1 つを C++/CLI に変換することにしました。非常に優れたコンバーターを見つけましたが、いくつかの大きな問題がありました。

C# プロジェクトに含まれていたすべての非静的クラスについて、コードが新しいインスタンスを作成するたびに、コンパイラでエラーが発生しました。「型指定子がありません - int と仮定されます...」 すべてのクラスにタイトルが付けられているpublic ref class ClassName : BaseClassName これも、静的であるはずのクラスと静的ではないはずのクラスの両方がこのようにタイトル付けされているため、非常に混乱します。

コンバーターは、コード内の場所に次のようなコメントも残しました。 //C++ does not allow initialization of non-static fields in their declarations: これらは常に、元の非静的クラスの 1 つにあり、常に Type VariableNameorが続きます。Type ^VaribleName

C++/CLI クラスがどのように機能するかを明らかに理解していないので、私の質問は次のとおりです。C# と C++/CLI の動的クラスの違いは何ですか? 動的な C++/CLI クラスを作成するにはどうすればよいですか? また、何が間違っている可能性がありますか? C++/CLI では、C# で天気が静的であるかどうかにかかわらず、すべてのクラスに "ref" というプレフィックスが付いているのはなぜですか? また、ひょっとして、これは 1 つのファイルに複数のクラスがあることと関係がありますか?

さらに情報が必要な場合は、教えてください。

4

1 に答える 1

1

コンバーターが作成するコードを実際に理解するには、C++/CLI を理解する必要があります。

基本的に、C++/CLI ではref classC# スタイルのクラスです。通常の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 に答える