说说 C# 8 using 新特性

在 .NET 运行时 GC 会负责清理内存,可是咱们有时候须要手动清理资源(好比非托管资源再也不使用的时候),在之前对于实现了 IDisposable 接口的对象,咱们会使用 using 语句来清理掉。例如以下代码:ide

class Program
{
    static void Main(string[] args)
    {
        using(var demo=new Demo())
        {
            demo.Write();
        }
        Console.WriteLine("释放完毕!");
    }

}
public class Demo : IDisposable
{
    public void Dispose()
    {
        Console.WriteLine("我被using释放了");
    }
    public void Write()
    {
        Console.WriteLine("我被调用了!");
    }
   // more code
   //...........
   //...........
   //...........
}

上述代码运行后会首先输出 “我被调用了”,以后会输出 “我被using释放了”,最后输出 “释放完毕”。从8.0开始咱们能够使用 using 声明 来代替 using() ,这样代码会更简单明了。咱们将前面代码里的 Main 方法修改以下:spa

static void Main(string[] args)
{
    using var demo = new Demo();
    demo.Write();
    Console.WriteLine("释放完毕!");
}

执行修改后的代码,首先输出 我被调用了,以后会输出 释放完毕,最后输出 我被using释放了。从输出咱们能够看出,Dispose() 最后才会被调用,那么为何会是这样呢?其实很简单,是由于清理动做会发生在超出要清理的资源的做用域范围的时候,也就是离开 Main 方法时。code

相关文章
相关标签/搜索