public ref int GetData()
{
var myDataStructure = new MyDataStructure();
return ref myDataStructure.Data;
}
public class MyDataStructure
{
private int _data;
public ref int Data => ref _data;
}
这使用了新的C#7参考返回功能。 GetData()返回后,什么保留在内存中?完整的MyDataStructure实例?还是只有整数?
如果MyDataStructure实例保留在内存中,因为有人持有对该实例字段的引用,那么在此示例中为什么不能将其保留在内存中:
public ref string GetString()
{
string s = "a";
return ref s;
}
最佳答案
GetData()返回后,什么保留在内存中?完整的MyDataStructure实例?还是只有整数?MyDataStructure
是。它存在于堆中,并且您可以引用其中的一个字段。
为什么在此示例中无法保存在内存中
因为虽然堆上指向的字符串存在于堆上,所以s
本身是不在堆上的本地变量。作为本地,方法完成后不再存在。