using IDisposable

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了using IDisposable相关的知识,希望对你有一定的参考价值。

using和IDisposable是组合使用的,像这种一个关键字和一个接口的组合,在C#中很少见的,using这个关键字,也就因为IDisposable多了一个身份。

其实很多人都知道IDisposable,有一个方法void Dispose(),通常是用来释放一些必须释放的资源时,要实现这个接口,这样,就可以在使用using后,调起这个Dispose()。

之前,在使用using时,需要给using一个使用范围,现在推荐不使用范围,那接下来看看有什么区别。

实现IDisposable接口的类:

class Test : IDisposable
{
    private readonly string _name;
    public Test(string name)
    {
        _name = name;
    }
    public void Dispose()
    {
        WriteLine($"{_name} Dispose");
    }
    public void CallMethod_1()
    {
        WriteLine("CallMethod_1");
    }
}

之前的用法,"1 end"在"1 Dispose"的后面,这个很好理解,因为using下面有一个{}范围。

void Call01()
{
    using (var test = new Test("1"))
    {
         test.CallMethod_1();    
    }
     WriteLine("1 end");
}

现在可以使用的用法,"2 end"始终在"2 Dispose"的前面,即使我们在WiteLine("2 end")前面调用test.Dispose(),也会在Call02方法结束后再调一次Dispose。

void Call02()
{
    using var test = new Test("2");
    test.CallMethod_1();
    WriteLine("2 end");
}

就按开始的说法,如果Dispose是释放一些资源,有些资源不能释放多次,这个时候就要注意了,不能多次调用Dispose(),所以即然用了using,就不用关注Dispose()了。

以上是关于using IDisposable的主要内容,如果未能解决你的问题,请参考以下文章

iDisposable

在 C# 中实现 IDisposable [重复]

IDisposable的另类用法

本地使用的 IDisposable 是不是有 FxCop 规则?

PetaPoco.Database 实现了 IDisposable,那么为啥大多数示例没有“使用”语句呢?

C# using()的本质