分几层说吧:
1. using会在complie的时候自动扩展成try finally。如果被wrap的object implement
了IDisposal interface,就会在finally 里call这个object的dispose() method.然后
,using的任务完成了‘
2. 在dispose method里,具体的实现来完成具体的工作。例如是db connection的话,
dispose会call close把链接关掉(大多数的情况下其实是把connection返回给pool)
。这样,从caller的角度来看,你已经把resource release了。
3. resource 分成manager的和unmanager的。manager一般就是.NET的object,
unmanage的一般是各种resource的handler,如db的链接,io的链接。对于manage的,一
般就是把他mark成没有reference了,这样下次GC运行的时候就可以清掉了。 好像有个
method叫GC.Supress什么,这个好像是主动运行GC。这块我也不是非常清楚,不过,好
像也还是一个suggestion,GC动不动,里面还有算法的。
4. 对于unmanage的resource,一般是通过一个.net的object wrapper来管理。当你
call dispose的时候,这个object的dispose method 负责call具体的resource的close
method来清理内存什么的。
5.有时候你可能会用到destructor。这个应该是极不推荐的,具体的可以看看CLR via
C#。那里有很好的例子