4月离开了上一家公司,有些不舍,但是还是离开了。找工作还是比较幸运,很快就面试上了一大公司。在面试过程中有几道比较有意思的题,特地拿出来更新下博客,博客也好久没更新了,X@8}U9MLE}EBUE273)]9PGF

   今天说一个简单的问题就是实现IDisposable接口的类的using用法的本质,其实这个是在[你必须知道的.NET]第十六回:深入浅出关键字---using全接触 中有讲解。我面试前并不知道。我带着猜测的回答了这个问题,我给面试官说:我猜测IL是try{}catch{}finally{},如果能给我Reflector,我肯定能解决,查看基本IL就知道了。

  于是面试完了回家,我打开电脑,测试了下:测试代码:

 

 1 using System.Data.SqlClient; 
 2 
 3 namespace BlogSample 
 4 
 5     public class DisposeSubstance 
 6     { 
 7         public void DisposeDemo() 
 8         { 
 9             using (SqlConnection con = new SqlConnection("ConnectionString")) 
10             { 
11                 var cmd = new SqlCommand(); 
12                 cmd.Connection = con; 
13                 cmd.CommandText = "sql"
14                 con.Open(); 
15                 cmd.ExecuteNonQuery(); 
16                 con.Close(); 
17             } 
18         } 
19     } 
20 }

Reflector反编译IL代码:

BILSC$6P~1[9IG4ZDTN4)OS

从上面可以看出来,是try{}finally{},讲Dispose方法放在finally中处理。

IDisposable是一种处理了.net非托管资源垃圾回收机制的方案。本质接口的Dispose方法在finally方法中处理。

作者: 破狼 发表于 2011-05-17 22:44 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架