Net高级技术——IDisposable.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Net高级技术——IDisposable

Net高级技术——IDisposable IDisposable概述   GC(垃圾收集器)只能回收托管(Managed)内存资源,对于数据库连接、文件句柄、Socket连接等这些资源(非托管资源,UnManaged)就无能为例,必须程序员自己控制资源的回收。非托管资源:SqlConnection、FileStream等。   对于使用非内存资源的类,完全可以自己定义一个销毁资源的方法来供程序员回收,.net推荐实现IDisposable接口(为了规范非托管资源的回收),在Dispose方法中进行回收。   实现了IDisposable接口的对象都可以使用using进行资源管理。using就是帮我们做了: 复制代码 1 FileStream fs = new F..... 2 try { 3 fs.read().... 4 } 5 finally { 6 fs.Dispose(); 7 } 复制代码   实现了IDisposable接口的对象都要进行回收,否则很可能有内存泄露。   非托管内存资源才需要实现IDisposable IDisposable例子 复制代码 1 namespace 资源回收 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 //使用using对实现IDisposable的类了进行资源管理 8 /*拿到一个对象的时候,首先判断这个对象是否实现了IDisposable接口,如果实现了,最好就用using包裹住这个对象,保证这个对象用完之后被释放掉,否则很可能出现资源泄露的问题 9 */ 10 using (Telphone t1 = new Telphone()) 11 { 12 t1.Open(); 13 t1.Speak(hello); 14 t1.Bomb(); 15 //t1.Dispose();//如果在这里调用了Dispose()方法释放资源,那么在执行t1.Open()方法就出错,电话线已经被剪断了,无法再打电话了 16 t1.Open(); 17 t1.Speak(I am back!); 18 }//代码执行到这里后,就会调用Dispose方法来进行资源回收 19 Console.ReadKey(); 20 } 21 } 22 /// summary 23 /// Telphone类实现了IDisposable接口 24 /// /summary 25 class Telphone : IDisposable 26 { 27 /// summary 28 /// 电话状态 29 /// /summary 30 private TelphoneState state; 31 /// summary 32 /// 打电话 33 /// /summary 34 public void Open() 35 { 36 if (state == TelphoneState.Disposed) 37 { 38 throw new Exception(电话线已经被剪断,无法打开!); 39 } 40 state = TelphoneState.Open; 41 Console.WriteLine(拿起电话); 42 } 43 /// summary 44 /// 说话 45 /// /summary 46 /// param name=s说话内容/param 47 public void Speak(string s) 48 { 49 if (state != TelphoneState.Open) 50 { 51

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档