【发布时间】:2016-09-13 11:24:57
【问题描述】:
是否有一个 .NET 类在释放时调用方法,有时而不是:
try
{
...
}
finally
{
MyCleanupMethod()
}
我想:
using(new OnDisposed(MyCleanupMethod))
{
...
}
在我被斥责之前,出于三个原因:
- 对于长
try块,它允许读者在开始时看到需要清理的内容 -
try暗示它捕获了一个错误(它不是) - 保留处置代码
private(如果IDisposable对象从类返回)
这是有效的做法吗?如果是这样,是否有一个 .NET 类可以做到这一点?
【问题讨论】:
-
没有什么可以阻止您自己编写它,但我不得不说“try-finally”是标准的,对 C# 开发人员来说更清晰,并且非常适合您的用例。
-
你可以自己做。包括一个构造函数参数,该参数是您的对象中实现 IDisosable 的函数。调用 OnDispose 中的函数
-
我不同意你的第二点,
try/finally是一个非常常见的结构,我怀疑任何有经验的开发人员都会认为你一定会抓住一些东西。但我会发现你的语法也是可以接受的,只要它被一致使用。 -
@Baldrick 相反,不仅习惯使用
Dispose进行清理,而且在.NET 1.1 中添加using的语言非常普遍。这是一种非常非常普遍的模式。 -
@c-z Dispose 模式非常普遍,以至于 .NET 语言都有特殊的关键字使其更容易(C# 中的
using,F# 中的use)。使用 IDisposable 包装资源是一个有效的选择,但如果该资源自己实现 IDisposable 会更好
标签: c# .net dispose idisposable try-finally