gpt4 book ai didi

c# - 字符串、引用和垃圾收集

转载 作者:行者123 更新时间:2023-12-01 19:59:46 25 4
gpt4 key购买 nike

假设您有一个具有多个属性的对象。这些属性之一是字符串:

private class MyObject
{
public string PropertyOne {get; set;}
...
}

我现在根据 MyObject 上的内容创建一个新对象:

private class MySecondObject
{
public string PropertyOneCopy {get; set;}

public MySecondObject(MyObject myObject)
{
this.PropertyOneCopy = myObject.PropertyOne;
....
}
}

在调用场景中,我们有:

private class Scenario
{
private MySecondObject _mySecondObject;

public void Go()
{
MyObject myObject = new MyObject();
myObject.PropertyOne = "Hello, World!";

_mySecondObject = new MySecondObject(myObject);
}
}

MyObject 的原始实例现在超出了范围。 _mySecondObject 是长期存在的。

我的问题是......原始的 MyObject 会被垃圾收集吗?如果我使用 this.PropertyOneCopy = String.Copy(myObject.PropertyOne); 会是这样吗?

最佳答案

以前位于 myObject 中的对象将被正常垃圾回收,因为没有未完成的引用。

仍然存在对 string 对象的引用,该对象曾经是 myObjectPropertyOne 属性的值,但这只会防止字符串被回收,而不是整个MyObject实例。

String.Copy 没有什么特别的,它只是作为一个构造函数,接受 string 实例并创建一个重复的对象(System.String 没有这样的构造函数)。

关于c# - 字符串、引用和垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7309044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com