从legecy系统中读取一些代码。
假设我有一个A类实例,然后将其添加到集合中,然后将其丢弃。
我只是无法理解在这里使用隐式处理有什么意义,因为代码仍然使用myControlCollcetion,这意味着无论如何cltCheckBoxA都不会真正被释放。
为什么?
using (UserControlA cltCheckBoxA = new UserControlA())
{
//some operation
base.myControlCollcetion.Add(cltCheckBoxA);
}
//Other operation against myControlCollcetion
答案 0 :(得分:4)
处理对象与释放它的托管内存完全不同(这是GC所做的)。 Dispose显式清理垃圾收集器无法释放的所有非托管资源。
这意味着在调用Dispose
之后使用对象时,有很多可能性。 (这不是一个详尽的清单。)
DataTable
就是一个例子;它的Dispose
什么也没做。在这种情况下,对象在处理后会正常工作。Dispose
之后,可能只有一部分功能变得无法使用,在这种情况下,只要稍后只使用那些有限的方面就可以正常工作。答案 1 :(得分:2)
你是对的,没有理由这样做,即使有,这也是错误的代码,非常令人困惑。
开发人员可能打算在Dispose(..)
上明确地UserControlA
致电(出于某种原因。例如,在标有//some operation
的代码部分中可能会执行一些分配非托管资源的函数,并尝试这样做,以避免添加额外的try/catch
序列(using
自动处理)。
但我重申这是不是一个好的代码。