我应该处置给我的IDisposable吗?
可能重复:
当传入另一个对象时,谁应该在IDisposable对象上调用Dispose?
假设你有一个类似这样的接口的类:
public interface Foo
{
Load(IDisposable something);
}
在实施这种方法时,我应该在完成后调用处置吗? 换句话说,当一个类的方法需要一个Stream
, Reader
或者其他任何一个IDisposable
,这个方法是否应该处理这个流,或者这应该留给谁来调用这个方法?
我知道任何一种方式都可以工作,只是好奇别人更有经验会考虑好的行为:-)
您不应该在Load
方法中调用Dispose
,因为您可能会在IDisposable
对象中执行更多操作。 如果你不需要更多, using
应该使用外部处理。 示例代码:
using (var something = new Something())
{
IFoo foo = new Foo();
foo.Load(something);
// Do more with something
}
它取决于你的界面的记录行为。
如果流保持打开以供调用者'(重新)使用'是有意义的,那么你可以在某种文档状态下打开它(例如,在这样和那样的块之后的当前位置)。
否则,最有帮助的事情似乎是为用户处理它。
请注意,CLR框架类有时会有专门的重载以允许调用者指定应该发生的事情。 请参阅:http://msdn.microsoft.com/en-us/library/gg712952.aspx
public StreamReader(
Stream stream,
Encoding encoding,
bool detectEncodingFromByteOrderMarks,
int bufferSize,
bool leaveOpen
)
我会添加一个参数,所以调用者可以告诉我是否处置它(我也为方法返回类型添加了void
):
public interface Foo
{
void Load(IDisposable something, bool disposeSomething);
}
链接地址: http://www.djcxy.com/p/54515.html
上一篇: Should I dispose the IDisposable given to me?
下一篇: Why would a class implement IDisposable explicitly instead of implicitly?