在 .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