C# 删除类的实例?

Fat*_*eep 2 c# class instance

我是 C# 的新手,我有一个关于类实例的快速问题。有人告诉我,在类的实例上仅使用“null”不足以删除整个实例及其所有资源,例如指针等。所以我有: ClassHere myClass = new ClassHere()myClass = null

我真的必须考虑这个太难了......我将举一个例子来弄清楚GC是如何工作的。

假设我们有 3 个实例:x1、x2、x3。每个实例都将映射到一个变量:ClassHere myClass = new ClassHere()除非您拥有 x1、x2 和 x3 而不是 myClass。

然后说实例 x2 和 x3 对 x1 进行某种引用。假设 x1 在被 x2 和 x3 引用后什么也不做。GC 只会在 x2 之后拾取 x1,而 x3 对 x1 的引用将被删除,对吗?

如果它即使使用这些引用也能找到它。GC 如何知道我是否真的需要 x2 和 x3 引用的实例 x1 而不是删除它?

还是我在这里遗漏了什么?

Nic*_*rey 5

好吧,销毁的唯一方法是将其从源代码树中删除 :D 您可以,尽管销毁类的实例

不像 C# 没有确定性析构函数。一个对象实例成为合格当对象实例变得不可用于垃圾收集。这可能是由于

  • 对它的所有引用都被释放(例如,变量超出范围),或
  • 对它的所有引用本身都不可达(例如,对象实例是集合中的引用,而集合本身是不可达的。

对象实例何时以及是否被垃圾收集取决于应用程序域(进程)内的内存/资源压力。但是,当应用程序域结束时,所有内容都会被垃圾收集。

通常你想让重要的事情实现IDisposable,所以持有的非托管资源可以通过using块等确定性地释放。

这是一个简单的答案,但其要点是:不要担心。