You should implement IDisposable only if your type uses unmanaged resources directly.
我主要是 Java 背景,这对我来说听起来很奇怪。假设我有一个包含 IDisposable 成员的类:
class Foo : IDisposable {
private StreamWriter sw;
...
}
... 并且假设这个类被用作,例如,作为一种过滤器,它接受字符串并修改它们,然后使用 StreamWriter sw
输出它们.我想像使用 Writer 一样使用这个类。
为什么我不想实现 Dispose(bool)
这将调用 sr.Dispose()?
如果我用 Java 编写代码(Java Closable
接口(interface)类似于 .NET 的 IDisposable
,尽管在某些方面有所不同),这就是我必须要做的事情。然而文档说我不应该这样做,因为我没有直接使用非托管资源。
如果我不覆盖 Dispose(bool)
,托管资源如何sw
当我离开由 using
启动的 block 时被处置声明?
最佳答案
当您的类包含 IDisposable
字段(例如 StreamWriter
)时,您应该实现 IDisposable
。
在这种情况下,您可以假设您的类型在幕后确实使用了非托管资源(通过 StreamWriter
类),并且您应该始终处置任何实现了 IDisposable
的对象> 在您使用完它们后立即界面。
Why wouldn't I want to implement
IDisposable(bool)
which would callsr.Dispose()
?
你当然会。
If I don't override
Dispose(bool)
, how does the managed resourcesw
get disposed when I leave the block started by theusing
statement?
事实并非如此。底层非托管资源最终可能会被终结器释放(取决于 IDisposable
类的实现),但托管对象不会被释放,除非您在您的类中显式释放它。
关于c# - 为什么要实现 IDisposable 以仅清理非托管资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48869997/