c# – 在每个函数中使用语句 – >通过适当的清理转换为类字段?

基本上我有一些看起来像这样的函数
class MyClass
{
    void foo()
    {
       using (SomeHelper helper = CreateHelper())
       {
           // Do some stuff with the helper
       }
    }

    void bar()
    {
        using (SomeHelper helper = CreateHelper())
        {
           // Do some stuff with the helper
        }
    }
}

假设我可以在每个函数中使用相同的资源而不是一个不同的[实例],那么在清理方面是否可以做到这样做?

class MyClass
{
    SomeHelper helper = CreateHelper();

    // ...foo and bar that Now just use the class helper....

    ~MyClass()
    {
      helper.dispose();
    }
}

解决方法

不,不要添加析构函数(Finalizer).

您可以重用资源,但您的类必须实现Idisposable.

sealed class MyClass : Idisposable
{
    SomeHelper helper = CreateHelper();

    // ...foo and bar that Now just use the class helper....

    //~MyClass()
    public void dispose()    
    {
      helper.dispose();
    }                         
}

现在你必须在using块中使用MyClass实例.它本身已成为一种托管资源.

析构函数是没有用的,每当收集MyClass实例时,关联的帮助器对象也将在同一个集合中.但是,使用析构函数仍会产生相当大的开销.

Idisposable的standard pattern使用虚拟void dispose(bool disposing)方法,但在密封类时,您可以使用上面的简约实现.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...