返回值内存范围

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什么时候会从内存中删除?

Cha*_*ran 5

这取决于类型.有值类型和引用类型.

值类型将值本身存储在内存中,每次传递它时,只是复制值(因此,值类型),除非你使用类似的东西public void Test(ref int x).ref存在的事实意味着通过引用传递整数.

当你有一个引用类型(对象)的变量时,你基本上只是抓住一个指针.所以它会传递对象的相同引用.

您可以通过扩展代码来执行以下操作来确认:

obj2.ID = 3;
Console.WriteLine(obj1.ID); // => 3
Run Code Online (Sandbox Code Playgroud)

obj1(或对象本身,因为obj1只是一个引用)将在没有任何对该对象的引用时进行GC.