创建对象就是删除旧对象

本文关键字:对象 删除 创建对象 | 更新日期: 2023-09-27 17:56:49

假设我创建了一个对象:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CreateObjOnobj
{
class Program
{
    static void Main(string[] args)
    {
        testcreate myobjecttotest;
        myobjecttotest = new testcreate();
        myobjecttotest.num = 20;
        myobjecttotest.bill = true;
        myobjecttotest = new testcreate();
        Console.WriteLine(myobjecttotest.bill.ToString());
        Console.ReadKey();
    }
}
class testcreate
       {
        public int num = 0;
        public bool bill = false;
       }
}

此代码是否会自动删除对象并创建一个新对象而不会丢失内存?

谢谢

创建对象就是删除旧对象

完全是。

实际发生的是,您更改了指向第一个对象的变量,现在它指向第二个对象。从那一刻起,再也没有人指向第一个物体了。

由于 .NET 配备了自动内存管理功能,因此垃圾回收器会定期检查没有"根"的对象,即没有人引用的对象。它从内存中删除此类"孤立"对象。

但是 - 您不能假设垃圾回收何时发生。它有时会在以后发生,这就是你所知道的。

通常,当您创建第二个对象并将变量更改为指向第二个对象时,最终会在内存中留下两个对象。有时稍后,垃圾回收器将删除第一个对象。

基本上

是的,但更详细地说没有。

重新赋值变量时,对 previos 对象的引用会丢失。但是,只要垃圾回收器不踢它,实例本身仍然存在。无论如何,只要不处理非托管引用,您就不会太在意这一点 - 例如.COM您必须以某种方式释放的对象。因此,当您创建类的实例并"离开"该变量的作用域时,会发生相同的情况:

void MyMethod() 
{
    var myVar  new MyClass();
}

当您离开该方法时,变量以及因此对MyClass实例的所有引用都将被删除,因此被标记为垃圾回收。但是,您不知道何时会发生这种情况。

是的,它将自动进行垃圾回收,除非有另一个实例指向该对象。

例如:

我们创建了另一个testcreate实例,该实例将分配第一个实例的指针值。

 testcreate myobjecttotest = new testcreate();
 testcreate myobjecttotest2 = myobjecttotest;

因此,如果我们重新实例化myobjecttotest = new testcreate()

不会删除上一个对象,因为myobjecttotest2当前指向它