C#对象范围

Jos*_*shD 0 c# reference object recycle

我试图了解何时回收物品.例如,在类中,我有一个List声明和此类中的方法,通过声明和初始化临时对象然后将此对象添加到列表来填充列表.

我的困惑:由于临时对象是在方法体内声明的,当方法返回时,这些对象不会被回收,因此持有对它们的引用的列表现在会丢失它们的对象的值吗?方法完成后,我的代码仍保留对象值(并且可能是完整引用).

public class CameraTest
{

    private List <Camera> cameraList;
    public CameraTest()
    {
        AddCamera();
    }

    private void AddCamera()
    {
        Camera tempCamera = new Camera();
        tempCamera.Name="Camera1";
        cameraList.Add(tempCamera);
    }

   //Why would cameraList still have the "Camera1" object here?

}
Run Code Online (Sandbox Code Playgroud)

Jcl*_*Jcl 6

.NET中的垃圾收集器是不确定的.一旦没有对它的引用,对象就"准备好收集",但这并不意味着它会立即被收集.

在您的代码中,cameraList具有名称为"Camera1"的对象,因为它引用它,因此无论范围如何,它都会阻止它被收集.

范围适用于变量,而不适用于对象.对象是内存中的引用,而变量只是指向这些引用的指针.你丢失了变量tempCamera,但没有丢失它指向的对象

  • `一旦没有对它的引用,对象就是"准备收集"了.这是不正确的.如果是的话,你可以在.net中找到隔离岛.相反,你可能想写一个"一个对象已经准备好收集",当它不再是根源时 (2认同)