.Net/C#对象应该自己调用Dispose()吗?

Tom*_*ter 34 .net c# dispose web-services idisposable

以下是一位同事撰写的示例代码.这对我来说显然是错的,但我想检查一下.一个对象应该从一个自己的方法中调用自己的Dispose()方法吗?在我看来,只有对象的所有者/创建者在完成对象而不是对象本身时才应该调用Dispose().

它是一个.asmx web方法,在完成时调用Dispose().(事实上​​,这是一个Web方法可能是一般问题的偶然事实.)在我们的代码库中,我们有时在其他Web服务的方法中实例化Web服务类,然后调用它们上的方法.如果我的代码执行此操作来调用此方法,则该方法返回时该对象是toast,并且我无法再使用该对象.

[WebMethod]
public string MyWebMethod()
{
    try
    {
        return doSomething();
    }
    catch(Exception exception)
    {
        return string.Empty;
    }
    finally
    {
        Dispose(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:找到一些相关的链接:

我是否需要在ASP.NET中部署Web服务引用?

配置Web服务代理类?

Evg*_*vgK 34

当然,这不是一个好的赞美.调用者应该决定何时使用IDisposable对象,而不是对象本身.

  • 在这种情况下,@ David [ObjectDisposedException](http://msdn.microsoft.com/en-us/library/system.objectdisposedexception.aspx). (3认同)
  • 调用 Dispose 的正确语义是“最后一个离开房间的人请关灯”。如果其他对象仍然需要它们,则对象不应自行处理,但是如果一个对象发现不再需要它,并且没有其他人会及时处理它,则该对象应该自行处理。 (2认同)

小智 7

执行“自我处置”行动的正当理由很少。线程是我经常使用的一种。

我有几个“即发即忘”线程的应用程序。使用这种方法允许对象自我处置。

这有助于在没有线程管理器进程的情况下保持环境清洁。