C#7 ref return:什么留在内存中:class 实例还是 ref returned 属性?
C#7 ref return: what stays in memory: the class instance or the ref returned property?
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 ref return 特性。在 GetData() returns 之后,内存中保存了什么?完整的 MyDataStructure 实例?还是只有整数?
如果 MyDataStructure 实例保存在内存中,因为有人持有对该实例字段的引用,为什么不能在本例中 s 保存在内存中:
public ref string GetString()
{
string s = "a";
return ref s;
}
因为s
在栈上,当方法执行完成时绞盘丢失。
After GetData() returns, what is kept in memory? The complete MyDataStructure instance? Or only the integer?
MyDataStructure
是。它存在于堆上,您可以引用其中的一个字段。
why can't s be kept in memory in this example
因为虽然它指向的堆上的字符串存在于堆上,但是s
本身是一个不在堆上的local。作为本地,方法完成后它不再存在。
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 ref return 特性。在 GetData() returns 之后,内存中保存了什么?完整的 MyDataStructure 实例?还是只有整数?
如果 MyDataStructure 实例保存在内存中,因为有人持有对该实例字段的引用,为什么不能在本例中 s 保存在内存中:
public ref string GetString()
{
string s = "a";
return ref s;
}
因为s
在栈上,当方法执行完成时绞盘丢失。
After GetData() returns, what is kept in memory? The complete MyDataStructure instance? Or only the integer?
MyDataStructure
是。它存在于堆上,您可以引用其中的一个字段。
why can't s be kept in memory in this example
因为虽然它指向的堆上的字符串存在于堆上,但是s
本身是一个不在堆上的local。作为本地,方法完成后它不再存在。