g.f*_*ley 3 c# memory garbage-collection return-value
如果我有一个像这样的方法:
public SomeObject GetObject(int ID){
SomeObject obj1 = new SomeObject();
obj1.ID = ID;
return obj1;
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我使用这样的方法:
SomeObject obj2 = GetObject(4);
Run Code Online (Sandbox Code Playgroud)
将obj2仅仅作为内存中的引用obj1,还是将其复制到内存中并存在两个完整的对象?
obj1如果后者是真的,GC什么时候会从内存中删除?
这取决于类型.有值类型和引用类型.
值类型将值本身存储在内存中,每次传递它时,只是复制值(因此,值类型),除非你使用类似的东西public void Test(ref int x).ref存在的事实意味着通过引用传递整数.
当你有一个引用类型(对象)的变量时,你基本上只是抓住一个指针.所以它会传递对象的相同引用.
您可以通过扩展代码来执行以下操作来确认:
obj2.ID = 3;
Console.WriteLine(obj1.ID); // => 3
Run Code Online (Sandbox Code Playgroud)
obj1(或对象本身,因为obj1只是一个引用)将在没有任何对该对象的引用时进行GC.