我有一个带有Dispose
函数的 C# 类IDisposable
。它旨在在using
块内使用,因此可以立即释放它处理的昂贵资源。
问题是在调用之前抛出异常时发生了错误Dispose
,而程序员忽略了使用using
or finally
。
在 C++ 中,我从来不用担心这个。对类的析构函数的调用将自动插入到对象作用域的末尾。避免这种情况发生的唯一方法是使用 new 运算符并将对象保存在指针后面,但这需要程序员额外的工作不是他们会偶然做的事情,比如忘记使用using
.
有什么方法using
可以在 C# 中自动使用块?
非常感谢。
更新:
我想解释一下为什么我不接受终结者的答案。这些答案本身在技术上是正确的,但它们不是 C++ 风格的析构函数。
这是我发现的错误,简化为基本要素...
try
{
PleaseDisposeMe a = new PleaseDisposeMe();
throw new Exception();
a.Dispose();
}
catch (Exception ex)
{
Log(ex);
}
// This next call will throw a time-out exception unless the GC
// runs a.Dispose in time.
PleaseDisposeMe b = new PleaseDisposeMe();
使用FXCop
是一个很好的建议,但如果这是我唯一的答案,我的问题将不得不成为 C# 人的请求,或者使用 C++。二十个嵌套 using 语句有人吗?