我有一个带有Dispose函数的 C# 类IDisposable。它旨在在using块内使用,因此可以立即释放它处理的昂贵资源。
问题是在调用之前抛出异常时发生了错误Dispose,而程序员忽略了使用usingor 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 语句有人吗?