内部的な話もしておきましょう。内部的には、参照渡しとポインターは似たようなものです。型システム上の扱いとしては、以下のような差があります。「アンマネージ型」と呼ばれる一部の型しか参照できないしかし、読み書きに使われる命令的には参照渡しとポインターは全く同じだったりします。以下の2つのメソッドを見てみましょう。y;}やっていることは全く同じで、ただ型的に参照渡しかポインターかが違います。このコードのコンパイル結果は、下図のように、ほとんど同じになります。型としては、引数と戻り値のところを見ての通り、&と*の差があります(&が参照渡しで、*がポインターです)。一方で、メソッドの中身に関しては一字一句たがわず同じです。ポインターと参照でまったく同じ命令を使います。あるわけで、やろうと思えば参照渡しとポインターの間で相互変換が可能です。C#を使って書けるコードではありませんが、ILを使えば書けます。そのILで書かれたライブラリを参照すれば、C#からも参照渡し⇔ポインターの変換ができます。CoreFXによる公式実装があって、以下のように、NuGetパッケージとして公開されています。System.Runtime.CompilerServices.Unsafeこのパッケージ中にあるUnsafeクラスを使うと、以下のようなコードが書けます。なってる}これで何がうれしいかというと、以下のように、タイプが異なるいろんなメモリ領域を統一的に扱えたりすることです。ポインターを使う部分にはunsafeコンテキストが必要ですが、作られたクラスを使うだけなら、使う側にはunsafeを求めません。管理外の世界からもらったアンマネージなメモリ領域を手軽に参照できるのは、パフォーマンスの改善に大きく寄与します。一方で、もちろん、unsafeコンテキストを経由するので、通常のC#の感覚からするとおかしなこともできます。この制約を破ることができます。以下のようなコードで、「参照渡しのnull」を作れます。}}注意して使いましょう。まで気兼ねなくご連絡ください。ついて運営者について。