2

C++/CLI と C# のコードが混在する大きなアプリケーションがあります。リファクタリングの過程で、C++/CLI に継承されるインターフェイスを C# で作成したいと考えています。問題ありません、私は過去に何度もそれをしました。しかし、この新しいインターフェイスのメソッド シグネチャに問題があります。それを継承する C++ クラスには、次のようなメソッドがあります。

void MethodName(DateTime ^A)

DateTime が C# の参照型である場合、上記の署名をこれに置き換えることができます。

void MethodName(DateTime A)

DateTime は値型であるため、問題が発生します。ただし、ハンドルを介してアクセスされます。ハンドルは C++/CLI の概念であり、C# に変換する方法がわかりません。

この問題を解決するために C# で必要なメソッド シグネチャを誰か教えてもらえますか?

4

3 に答える 3

3

DateTime^C++/CLI に直接相当する C# はありません。そのタイプのパラメーターは、C# には存在しません。

ref DateTime近いですが、それは ではDateTime%なく C++/CLI になりますDateTime^

含まれているソース コードを変更できる場合は、 またはDateTime^のいずれかに変更しDateTimeますDateTime%。元の作成者は がDateTime必要ないことを認識していなかった^可能性があるため、そのパラメーターを参照ではなく通常の値によるパラメーターとして使用している可能性があります。どちらに変更しても、C# から簡単に呼び出せるようになります。

于 2013-05-23T21:18:03.817 に答える
2

不可能です

ILDasm は、このメソッドが次のようにコンパイルされることを示しています。

void MethodName (
    class [mscorlib]System.ValueType
    modopt([mscorlib]System.DateTime)
    modopt([mscorlib]System.Runtime.CompilerServices.IsBoxed) 
    A
) cil managed 

C# で表現することは不可能です (任意の modopt 値をエンコードすることはできません。これらは属性ではありません)。

なしで DateTime を使用しないのはなぜ^ですか? DateTime オブジェクトは不変で小さいため、ハンドルを使用することで得られるメリットはわかりません。

于 2013-05-23T21:29:46.120 に答える
1

これはリファレンスです。C# ではキーワード ref を使用する必要があります。

void MethodName(ref DateTime A)

これがお役に立てば幸いです。

于 2013-05-23T21:10:51.600 に答える