我只在使用流和派生自DbConnection的类时才会使用using语句。如果需要清理非托管资源,我通常会使用finally块。
这是IDisposable接口的另一种用法,用于创建性能计时器,该计时器将在Dispose函数中停止计时并将时间记录到注册表中。http://thebuildingcoder.typepad.com/blog/2010/03/performance-profiling.html 这是IDisposable接口的好用法吗?它没有清理资源或处理任何其他对象。但是,我可以看出它如何通过将要分析的代码整洁地包装在using语句中来清理调用代码。
在使用using语句和IDisposable接口时,是否有不应该使用的情况?实现IDisposable或将代码包装在using语句中是否曾经给您带来问题?
谢谢
Dispose
方法都是有问题的。这就像从 C++ 析构函数中抛出异常一样(是不允许的)。 - Stephen ClearyIEnumerator
类没有实现IDisposable
,但如果它们实现了,我肯定会调用Dispose
或者直接使用foreach
结构,因为它会自动调用Dispose
。关于控件...在主流场景中,你不需要这样做,因为它们通常包含在另一个作为容器的Form
或Control
中,当必要时会正确地调用Dispose
。 - Brian GideonIEnumerator <>
派生类始终实现IDisposable
)。我认为我有点被误解了,因为我个人赞成使用using
。但是有时候这是不可行的(长时间存活的对象,即在会话或缓存中),或者根本不需要。与 Hans Passant进行这次讨论的一个有趣的副作用是他赞成不使用using
:https://dev59.com/2nA75IYBdhLWcg3wf5RV#3257928 - Abelusing
没有多大用处,但请记得手动调用Dispose
。顺便说一下,我没有看到 Hans 倾向于不使用using
,但是我对那个链接中的交流感到相当困惑。 - Brian Gideon