c# - 返回值内存范围

标签 c# memory garbage-collection return-value

如果我有这样的方法:

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/

相关文章:

c# - 网络核心 : Swashbuckle Set operationId Automatically on to Controller Action Method

c# - 'AnyCPU' 平台目标上的内存分配模式

c# - GC.KeepAlive() 和 System.Timers.Timer

c# - 如何使用 NSubstitute 模拟对同一方法的一系列调用以返回 AutoFixture 中的不同值?

c# - 系统管理管理异常

c# - 使用 .NET WebClient 模拟 XmlHttpRequest

debugging - 如何检查我的汇编 8086 程序是否运行良好

php - 是什么导致 PHPExcel 在使用分块过滤器读取文件时使用如此多的内存?

java - 为什么等待太久从年轻一代提升一个对象会导致效率低下?

java - Mule3.2 重负载下 GC 频率过高