对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?()
A.Close B.Dispose C.Finalize D.using E.Quit
这个题有谁能给我讲讲么?
A.E 显然是错的,我们不能因为SqlConnection实现了一个Close方法,就说Close方法能够释放非托管资源对吧?B肯定是对的,既然实现了IDisposable,那么释放非托管资源的代码应当实现在Dispose方法里。C很模棱两可,应该算是对,但是我怕面试官想考你Finalize跟析构函数的区别,那估计面试官就算错了,严格来讲C应该写成析构函数而不是Finalize。 D看起来也对,但是using本质是调用IDisposable.Dispose,严格来讲并不是using本身具备了这个功能,它只是调用了具有这个功能的某个方法而已,看面试官是不是钻牛角尖了。
是丫,我也很纠结,这是惠普的一道面试题,最近因为要找工作所以做一些面试题防备一下,可是答案都是让我很纠结的..郁闷
@微澜: 只要你真的理解了,面试官能看出来的。
新手 回答是 A,B,D,E, 如有不对之处,请指出
A,B 主要针对 显示调用close(),Dispose()等等方法,例如 SqlConnection对象的 close(),Dispose()都可以释放资源
D也可以释放资源,但是必须将需要释放的资源使用using包裹起来,例如 using(SqlConnection conn = GetConn()){}
E也可以释放资源,但是E必须显示调用,即使使用了using也不管用,主要针对 操作execl等等com组件的情况