加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我为什么要使用IDisposable而不是在c#中使用?

发布时间:2020-12-15 20:50:28 所属栏目:百科 来源:网络整理
导读:今天,我想用文件执行操作,所以我想出了这段代码 class Test1 { Test1() { using (var fileStream = new FileStream("c:test.txt",FileMode.Open)) { //just use this filestream in a using Statement and release it after use. } } } 但在代码审查中,我
今天,我想用文件执行操作,所以我想出了这段代码

class Test1
    {
        Test1()
        {
            using (var fileStream = new FileStream("c:test.txt",FileMode.Open))
            {
                //just use this filestream in a using Statement and release it after use. 
            }
        }
    }

但在代码审查中,我被要求实现IDisposable接口和Finalizer方法

class Test : IDisposable
    {
        Test()
        {
            //using some un managed resources like files or database connections.
        }

        ~Test()
        {
            //since .NET garbage collector,does not call Dispose method,i call in Finalize method since .net garbage collector calls this
        }

        public void Dispose()
        {
            //release my files or database connections
        }
    }

但是,我的问题是我为什么要这样做?

虽然根据我不能证明我的方法是合理的,但为什么我们在使用语句时可以使用IDisposable本身可以释放资源)

任何特定的优点或我在这里缺少一些东西?

解决方法

“No One”给出的答案是正确的,即使用块只能用于实现IDisposable接口的类,并且对它的解释是完美的.你方面的问题是“为什么我需要在Test类上添加IDisposable,但在代码审查时,我被要求在Test类上实现IDisposable接口和Finalizer方法.” 答案很简单 1)按照许多开发人员遵循的编码标准,在使用某些资源的类上实现IDisposable总是好的,一旦该对象的范围超过该类中的Dispose方法,将确保所有资源都已用完释放. 2)已编写的类永远不会在将来不会进行任何更改,如果进行了此类更改并添加了新资源,则开发人员知道他必须在Dispose函数中释放这些资源.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读