我爱Aspx >> Asp.Net >> 利用C#实现标准的 Dispose模式实现IDisposable接口是一种标准的途径,它通知用户和运行时系统持有资源的对象必须及时地释放。IDisposable接口仅仅包含一个方法:
public interface IDisposable
{
void Dispose( );
}
你对IDisposable.Dispose()方法的实现(implementation)负责下面四个事务:
1、释放所有的非受控资源。
2、释放所有的受控资源(包括未解开事件)。
3、设置标志表明该对象已经被处理过了。你必须在自己的公共方法中检查这种状态标志并抛出ObjectDisposed异常(如果某个对象被处理过之后再次被调用的话)。
4、禁止终结操作(finalization)。你调用GC.SuppressFinalize(this)来完成这种事务。
通过实现IDisposable接口你完成了两个事务:你为客户端及时地释放自己持有的所有受控资源提供了机制;你为客户端提供了一种释放非受控资源的标准途径。这是一个很大的进步。当你在类型中实现了Idisposable接口的时候,客户端可以避免终结操作的开销,你的类就成为.NET世界中的"良民"了。
但是在你建立的这种机制中仍然存在一些问题。怎样在衍生类清理自己资源的时候同时也让基类能够清理资源?如果衍生类重载了终结操作,或者添加了自己的IDisposable实现,那么这些方法必须调用基类,否则,基类就不能正确地进行清理操作。同样,finalize(终结操作)和Dispose参与分担了一些相同的职责。Finalize方法和Dispose方法的代码几乎相同。而且在重载接口函数后并不像你预料的那样工作。标准的Dispose模式中的第三个方法是一个受保护的虚拟辅助函数,它分解出这些共同的事务,并给衍生类添加一个用于释放资源的"钩子(hook)"。基类包含了核心接口的代码。作为对Dispose()或终结操作的响应,该虚拟函数为衍生类清除资源提供了"钩子":
Ҷƪл˵?
关于C#中属性及值类性引用类型的..[05-20]
c#.net常用函数列表[05-20]
深入理解C#编程中的组件-事件-委..[05-20]
在C#中利用DirectX实现声音播放[05-20]
C#实现文件下载[05-20]
Visual C# 3.0 新特性概览 (二)[05-20]
Visual C# 3.0 新特性概览(一)[05-20]
C#中调用Windows API的要点[05-20]
c#收取邮件[05-20]
用Visual C#实现P2P应用程序[05-20]
关于C#中属性及值类性引用类型的..[05-20]
c#.net常用函数列表[05-20]
ASP.NET程序中常用的三十三种代码[05-20]
深入理解C#编程中的组件-事件-委..[05-20]
在C#中利用DirectX实现声音播放[05-20]
ASP.NET程序中常用编程代码(一)[05-20]
为ASP.NET 2.0菜单控件增加targe..[05-20]
JavaScript去除空格的三种方法 (..[05-20]
ASP.NET程序中常用编程代码(二)[05-20]
C#实现文件下载[05-20]