4月离开了上一家公司,有些不舍,但是还是离开了。找工作还是比较幸运,很快就面试上了一大公司。在面试过程中有几道比较有意思的题,特地拿出来更新下博客,博客也好久没更新了,。
今天说一个简单的问题就是实现IDisposable接口的类的using用法的本质,其实这个是在[你必须知道的.NET]第十六回:深入浅出关键字---using全接触 中有讲解。我面试前并不知道。我带着猜测的回答了这个问题,我给面试官说:我猜测IL是try{}catch{}finally{},如果能给我Reflector,我肯定能解决,查看基本IL就知道了。
于是面试完了回家,我打开电脑,测试了下:测试代码:
using System.Data.SqlClient;
namespace BlogSample
{
public class DisposeSubstance
{
public void DisposeDemo()
{
using (SqlConnection con = new SqlConnection("ConnectionString"))
{
var cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "sql";
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
}
Reflector反编译IL代码:
从上面可以看出来,是try{}finally{},讲Dispose方法放在finally中处理。
IDisposable是一种处理了.net非托管资源垃圾回收机制的方案。本质接口的Dispose方法在finally方法中处理。
没有评论:
发表评论