由于引入了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是什么意思吗? –