C#7.0のリファレンス機能が導入されて以来、このような機能にはヒープ上にある変数にのみこの参照を格納するためにコンパイラの再配線が必要になるとの認識に基づいて、スタック上の変数への参照を返すか、または新しいref宣言が変数が常にヒープに格納されていることを確認しますか?C#7.0で参照によって返される値は、スタックまたはヒープに格納されますか?
ref int x = ref DoSomething(data);
// Is the value of x now on the stack or the heap? Or is x stored on the stack as a reference and the value on the heap?
私の理解では、this articleに基づいています。最後に
は、CLRは「REF戻り値の型」を認めていません。理論的には に、 整数変数への参照を返したメソッド "ref int M(){...}"があります。いくつかの奇妙な理由で、 をC#でコンパイラとベリファイアを修正して、 が確実にヒープ上にあることがわかっている変数への参照を返すことができるようにしなければならない、またはスタック上で "lower down"と指定されている場合は、 を呼び出してください。
ローカル変数の場合は、確実にスタックに置かれます。 –
@EhsanSajjadローカル変数の場合は、 'ref'を返すメソッドから返すことができませんでした。 – Servy
@Servyとは何を意味するのでしょうか? –