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)
.NET中的垃圾收集器是不确定的.一旦没有对它的引用,对象就"准备好收集",但这并不意味着它会立即被收集.
在您的代码中,cameraList具有名称为"Camera1"的对象,因为它引用它,因此无论范围如何,它都会阻止它被收集.
范围适用于变量,而不适用于对象.对象是内存中的引用,而变量只是指向这些引用的指针.你丢失了变量tempCamera,但没有丢失它指向的对象