由於引入了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 int M(){...}」,它返回一個對整數變量 的引用。如果出於某種奇怪的原因我們決定允許在C#中使用 ,我們必須修復編譯器和驗證器,以便它們確保只有將ref返回到已知在堆中的變量 ,或者已知在堆棧 上比被調用者「降低」。
如果它是一個局部變量,那麼它肯定會在棧上 –
@EhsanSajjad如果它只是一個局部變量,那麼你不能從'ref'返回方法返回它。 – Servy
你能說一說你說的@Servy是什麼意思嗎? –