我应该处置给我的IDisposable吗?

可能重复:
当传入另一个对象时,谁应该在IDisposable对象上调用Dispose?

假设你有一个类似这样的接口的类:

public interface Foo
{
    Load(IDisposable something);
}

在实施这种方法时,我应该在完成后调用处置吗? 换句话说,当一个类的方法需要一个StreamReader或者其他任何一个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?