說說 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

相關文章
相關標籤/搜索