如果我有这样的方法:
public SomeObject GetObject(int ID){
SomeObject obj1 = new SomeObject();
obj1.ID = ID;
return obj1;
}
如果我使用这样的方法:
SomeObject obj2 = GetObject(4);
obj2
只是内存中对obj1
的引用,还是将它复制到内存中并存在两个完整的对象?
如果后者为真,GC 何时会从内存中删除 obj1
?
最佳答案
这取决于类型。有值类型和引用类型。
Value types将值本身存储在内存中,每次传递它时,您只是复制值(因此,值类型),除非您使用类似 public void Test(ref int x)
的东西。 ref 的存在意味着通过引用传递整数。
当你有一个 reference type 的变量时(object) 你基本上只是捕获了一个指针。所以它会传递对象的相同引用。
您可以通过扩展您的代码来执行如下操作来确认这一点:
obj2.ID = 3;
Console.WriteLine(obj1.ID); // => 3
obj1(或对象本身,因为 obj1 只是一个引用)将在不再有对该对象的任何引用时被 GC。
关于c# - 返回值内存范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5738218/