为什么需要IDisposable接口?
为什么需要IDisposable接口?
此问题已经有答案了:
我已经阅读了很多文章,它们都说IDisposable的目的是关闭不受管理的对象,比如数据库连接和第三方报告。但我的问题是,如果我可以在我的方法中处理不受管理的对象,为什么要定义Dispose方法呢?
例如,
class Report : IDisposable { public void GenerateReport() { Report rpt=new Report() //unmanaged object created rpt.Dispose(); // Disposing the unmanaged object } private void Dispose() { //not sure why this block is needed } }
我的理解正确吗?
admin 更改状态以发布 2023年5月21日
你的理解是正确的,在你的例子中不需要实现IDisposable。但如果你在你编写的类的生命周期中保留了一个长期存在的对象,那么你就需要实现它。比如说你有这样一个代码:
public class Report : IDisposable { private Stream _reportStream; // This variable lives a long time. public void WriteToStream(byte[] data) { _reportStream.Write(data, 0, data.Length); } public void Dispose() { _reportStream?.Dispose(); } }
这是一个相当简单的例子,但它显示了_reportStream
对象的生命周期与类的生命周期相同,需要在类被清理和垃圾回收的同时进行清理。你可以创建一个名为CleanupObject()
的公共方法来完成同样的事情,但这样做就无法使用using
块来自动调用Dispose()方法:
using (var myReport = new Report()) { // do a bunch of things with myReport; } // Here the runtime will call myReport.Dispose() for you. // myReport isn't accessible from here, as it was declared in the using block