加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 返回值内存范围

发布时间:2020-12-16 00:16:24 所属栏目:百科 来源:网络整理
导读:如果我有一个像这样的方法: public SomeObject GetObject(int ID){ SomeObject obj1 = new SomeObject(); obj1.ID = ID; return obj1;} 然后,如果我使用这样的方法: SomeObject obj2 = GetObject(4); obj2只是内存中对obj1的引用,还是会被复制到内存中并存
如果我有一个像这样的方法:

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(对象)的变量时,你基本上只是抓住一个指针.所以它会传递对象的相同引用.

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

obj2.ID = 3;
Console.WriteLine(obj1.ID); // => 3

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读