在 Dispose 上调用方法的对象
Object that calls a method on Dispose
是否有 .NET class 在处理时调用方法,有时而不是:
try
{
...
}
finally
{
MyCleanupMethod()
}
我愿意:
using(new OnDisposed(MyCleanupMethod))
{
...
}
在我被斥责之前,出于三个原因:
- 对于长
try
块,它允许 reader 在开始时查看需要清理的内容
try
暗示它捕获了一个错误(它不是)
- 保留处置代码
private
(如果IDisposable
对象是从class返回的)
这是有效的做法吗?如果是这样,.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...");
}
是否有 .NET class 在处理时调用方法,有时而不是:
try
{
...
}
finally
{
MyCleanupMethod()
}
我愿意:
using(new OnDisposed(MyCleanupMethod))
{
...
}
在我被斥责之前,出于三个原因:
- 对于长
try
块,它允许 reader 在开始时查看需要清理的内容 try
暗示它捕获了一个错误(它不是)- 保留处置代码
private
(如果IDisposable
对象是从class返回的)
这是有效的做法吗?如果是这样,.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...");
}