在Dispose上调用方法的对象

时间:2016-09-13 11:24:58

标签: c# .net dispose idisposable try-finally

是否有.NET类在处理时调用方法,有时代替:

try
{
    ...
}
finally
{
    MyCleanupMethod()
}

我想:

using(new OnDisposed(MyCleanupMethod))
{
    ...
}

在我受到谴责之前,有三个原因:

  • 对于长try块,它允许读者在开始时查看需要清理的内容
  • try有一个暗示是它发现错误(它不是)
  • 保留处理代码private(如果从类中返回IDisposable对象)

这是有效的做法吗?如果是这样,.NET类是否可以执行此操作?

1 个答案:

答案 0 :(得分:3)

您可以添加一个执行操作的构造函数:

public class OnDisposed : IDisposable
{
    private readonly Action _disposeAction;
    public OnDisposed(Action disposeAction)
    {
        _disposeAction = disposeAction;
    }

    public void Dispose()
    {
        // ...
        if(_disposeAction != null)
            _disposeAction();
    }
}

例如:

using (new OnDisposed(() => Console.WriteLine("Dispose Called")))
{
    Console.WriteLine("In using...");
}