在 Dispose 上调用方法的对象

Object that calls a method on Dispose

是否有 .NET class 在处理时调用方法,有时而不是:

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

我愿意:

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

在我被斥责之前,出于三个原因:

这是有效的做法吗?如果是这样,.NET class 是这样做的吗?

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

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...");
}