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

c# – 如何使IDisposable对象成为类变量?

发布时间:2020-12-15 08:17:09 所属栏目:百科 来源:网络整理
导读:我正在使用C#使用Active Directory.实例化PrincipalContext对象似乎很昂贵,所以我想将一个存储在一个类变量中. 当使用PrincipalContext作为局部变量时,我可以使用方便的使用语法.将IDisposable对象存储在静态变量中时,如何确保对象被正确处理? 解决方法 一
我正在使用C#使用Active Directory.实例化PrincipalContext对象似乎很昂贵,所以我想将一个存储在一个类变量中.

当使用PrincipalContext作为局部变量时,我可以使用方便的使用语法.将IDisposable对象存储在静态变量中时,如何确保对象被正确处理?

解决方法

一般模式是在您的类上实现IDisposable接口.举个例子:
public class YourClass : IDisposable
{
    private OtherDisposableType yourResource;

    public YourClass()
    {
        yourResource = new OtherDisposableType();
    }

    public void Dispose()
    {
        yourResource.Dispose();
    }
}

这至少是您需要做的事情.

编辑

我之前的版本主张在所有情况下遵循终结器模式,这是(正确地)指出是违反框架设计指南.但是,如果您实际上正在处理非托管资源(例如,您正在进行直接P / Invoke调用并获取需要显式释放的句柄),建议您创建终结器并在其中调用Dispose防止使用代码并且不调用Dispose的人:

public class YourClass : IDisposable
{
    private OtherDisposableType yourResource;

    public YourClass()
    {
        yourResource = new OtherDisposableType();
    }

    public void Dispose()
    {
        yourResource.Dispose();

        GC.SuppressFinalize(this);
    }

    ~YourClass()
    {
        Dispose();
    }
}

(编辑:李大同)

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

    推荐文章
      热点阅读