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本身是不在堆上的本地变量。作为本地,方法完成后不再存在。

10-07 14:54