3

私は C++ プログラマーで、C++ コードを C# に変換する必要がある移行プロジェクトに取り組んでおり、C# に関する知識はほとんどありません。

私が移行している C++ コードには、次のような多くのポインター操作があります。

Hdr->States = (DspState*)baseAddress; // Converting the buffer to other type.

私の質問は、

  1. メモリを適切に追跡している限り、C# で安全でないプログラミングを行っても害はありますか。
  2. または、C#でこれらの種類のポインター操作(ダブルポインターの場合もあります)を処理する他の方法はありますか。
4

2 に答える 2

2

プロジェクトを C++ から C# に移植する場合、最初の目標は、マネージ コードの安全な世界に完全にとどまることです。C++ コードでポインターを使用していたからといって、C# でも同じことをしなければならないわけではありません。C# の安全でないコードは、実際には最後のオプションであり、非常に特殊な状況でのみ必要になります。

あなたの例のコードは、C# でこのようにすることができ、ポインターや安全でない操作はまったく必要ありません。

BaseAddress baseAddress = ...
Hdr->States = (DspState)baseAddress;

または型チェックされたキャスト操作として

Hdr->States = baseAddress as DspState;

C# / .NET では常に参照が使用されます。参照はポインターに似ていますが、ポインター演算の危険はありません。

于 2013-05-24T11:27:06.007 に答える
0

C# はポインターの使用を許可するために unsafe コンテキストを承認します。そのため、コードが C++ で動作していた場合は C# でも問題なく動作するはずですが、やりたいことによっては最適な解決策である必要はありません。たとえば、C# に存在する C++ ライブラリを使用する場合、C++ ではポインターを使用する必要があるかもしれませんが、C# では代わりに参照が使用されます。投稿で示した種類の操作しか使用しない場合は、安全でないコンテキストを使用してポインタを参照および逆参照するべきではなく、コードの完全な変換を行う必要があると思います。

于 2013-05-24T11:17:49.933 に答える