对象销毁的标准语法
Framework在销毁对象的逻辑方面遵循一套规则,这些规则并不限用于.NET Framework或C#语言;这些规则的目的是定义一套便于使用的协议。这些协议如下:
- 一旦销毁,对象
不可恢复
。对象不能被再次激活,调用对象的方法或者属性抛出ObjectDisposedException异常 重复地调用
对象的Disposal方法会导致错误- 如果一个可销毁对象x 包含或包装或处理另外一个可销毁对象y,那么x的Dispose方法自动调用y的Dispose方法,除非另有指令(不销毁y)
Close和Stop
有一些类型除了Dispose方法之外,还定义了Close方法。Framework对于Close方法并没有保持完全一致性,但在几乎所有情况下,它可以:
- 要么在功能上与Dispose一致
- 或只是Dispose的一部分功能
对于后者一个典型的例子就是IDbConnecton类型,一个Closed的连接可以再次被打开
;而一个Disposed的连接对象则不能。
另外一个例子就是Windows程序使用ShowDialog的激活某个窗口对象;Close方法隐藏该窗口;而Dispose释放窗口所使用的资源。
有一些类定义Stop方法(比如Timer或HttpListener)。与Dipose方法一样,Stop方法可能会释放非托管资源;但是与Dispose方法不同的是,它允许重新启动
。.