【发布时间】:2025-12-20 21:50:13
【问题描述】:
我最近在 Jeffery Richter 的“CLR via C#”中读到了这篇文章;
重要如果一个类定义了一个字段,该字段的类型 实现了 dispose 模式,类本身也应该实现 处置模式。 Dispose 方法应该处理对象 领域所指。这允许使用该类的人调用 Dispose 就可以了,反过来释放对象使用的资源 自己。
在下面的例子中是这样吗?
public class SomeClass
{
private readonly StreamReader _reader; //a disposable class
public SomeClass(StreamReader reader)
{
_reader = reader;
}
}
虽然 StreamReader 是一个一次性类,但它的实例已通过构造函数传入,因此它可能会在其他地方被引用,因此在 SomeClass 上实现 IDisposable 以便可以处置 _reader 似乎是个坏主意。 Jeffery Richter 试图提出的观点是否仅适用于一次性类的实例在该类中实例化的类?
【问题讨论】:
-
您可能会考虑一个接受
bool closeStream参数的构造函数,以便调用者可以控制流是否在处理时关闭。即使在这种情况下,我仍然会实现 IDisposable 并在Dispose()方法中,如果实例化器希望流关闭,则关闭流。
标签: c# .net idisposable