c# - 手动销毁 C# 对象

标签 c# destructor idisposable using

我刚开始学习 C#(来自 Java 和 C++ 背景),我有一个关于手动垃圾处理的问题:是否有可能在 C# 中手动销毁对象?我知道 IDisposable 接口(interface),但假设我正在处理一个我没有编写并且没有实现它的类?它不会有 .Dispose() 方法,所以 using { } 已经过时了,.Finalize 总是 protectedprivate 所以这也不是一个选项。

(在这种情况下,我只是想了解 C# 中的可能。我想如果所有其他方法都失败了,我可以继承假设的 ImNotDisposable 类,以便它确实实现 IDisposable。)

最佳答案

您无需手动销毁 .Net 对象。这就是托管环境的意义所在。

事实上,如果对象实际上是可达的,这意味着您有一个引用可以用来告诉 GC 您想要销毁哪个对象,那么收集该对象将是不可能的。 GC 将永远不会 收集任何仍然可以访问的对象。

您可以做的是调用 GC.Collect() 来强制进行常规收集。然而,这几乎不是一个好主意。

相反,最好假装任何不使用非托管资源并且程序中任何其他对象都无法访问的对象会立即被销毁。我知道这不会发生,但在这一点上,该对象就像其他任何对象一样只是一 block 内存;你不能回收它,它最终会被收集起来,所以它对你来说也可能已经死了。

关于 IDisposable 的最后一点说明。您应该只将它用于包装非托管 资源的类型:诸如套接字、数据库连接、gdi 对象等,以及偶尔的事件/委托(delegate)订阅。

关于c# - 手动销毁 C# 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1987251/

相关文章:

javascript - 上传后从客户端 PC 删除文件,但仅在获得客户端许可后

c++ - 跳出 block : do destructors get called?

c# - 如果 using block 返回,是否会释放 IDisposable?

c# - 使用 'using' 语句声明对象以备后用

c# - 通过 C# 缩小 JavaScript 代码 - ASP.NET

c# - Julian 日期字符串到 DateTime

c# - 可以从 JavaScript 调用 C# 函数吗?

c++ - 跳过 C++ 全局析构函数

c++ - 在析构函数后打开一个新的 QMainWindow 崩溃

C# IDisposable 使用 : Best Practice