IDisposable资源释放接口
微软自带的注释摘要
// 摘要:
// 定义一种释放分配的资源的方法。
[ComVisible(true)]
public interface IDisposable
{
// 摘要:
// 执行与释放或重置非托管资源相关的应用程序定义的任务。
void Dispose();
}
此接口的主要用途是释放非托管资源。当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存。但无法预测进行垃圾回收的时间。另外,垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知。
将此接口的Dispose方法与垃圾回收器一起使用来显式释放非托管资源。当不再需要对象时,对象的使用者可以调用此方法
因为IDisposable.Dispose实现由类型的使用者调用时,实例属于自己的资源不再需要,您应将包装在SafeHandle(建议使用的替代方法) 的托管对象,则应该重写Object.Finalize来释放非托管资源,忘记在使用者调用Dispose条件下。
使用对象实现 IDisposable才能直接,使用非托管资源需要实现IDisposable。如果应用程序使用对象实现IDisposable,不提供IDisposable实现。而,那么,当您使用时完成,应调用对象的IDisposable.Dispose实现。根据编程语言中,可以为此使用以下两种方式之一:
使用一种语言构造 (在 C# 和 Visual Basic 中的using语句。
通过切换到实现IDisposable.Dispose的调用在try/catch块。
//使用一种语言构造(在C#和VisualBasic中的using语句usingSystem;usingSystem.IO;usingSystem.Text.RegularExpressions;publicclassWordCount{privateStringfilename=String.Empty;privateintnWords=0;privateStringpattern=@"\b\w+\b";publicWordCount(stringfilename){if(!File.Exists(filename))thrownewFileNotFoundException("Thefiledoesnotexist.");this.filename=filename;stringtxt=String.Empty;using(StreamReadersr=newStreamReader(filename)){txt=sr.ReadToEnd();sr.Close();}nWords=Regex.Matches(txt,pattern).Count;}publicstringFullName{get{returnfilename;}}publicstringName{get{returnPath.GetFileName(filename);}}publicintCount{get{returnnWords;}}}
usingSystem;usingSystem.IO;usingSystem.Text.RegularExpressions;publicclassWordCount{privateStringfilename=String.Empty;privateintnWords=0;privateStringpattern=@"\b\w+\b";publicWordCount(stringfilename){if(!File.Exists(filename))thrownewFileNotFoundException("Thefiledoesnotexist.");this.filename=filename;stringtxt=String.Empty;StreamReadersr=null;try{sr=newStreamReader(filename);txt=sr.ReadToEnd();sr.Close();}catch{}finally{if(sr!=null)sr.Dispose();}nWords=Regex.Matches(txt,pattern).Count;}publicstringFullName{get{returnfilename;}}publicstringName{get{returnPath.GetFileName(filename);}}publicintCount{get{returnnWords;}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。