【发布时间】:2008-09-06 16:12:48
【问题描述】:
我通过IDisposable 获得了一个带有Dispose 函数的C# 类。它旨在用于using 块内,以便可以立即释放它处理的昂贵资源。
问题是在调用Dispose之前抛出异常,程序员忽略了使用using或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++。有 20 个嵌套 using 语句吗?
【问题讨论】:
标签: c# dispose idisposable using