C#快速入門教程(23)—— using語句和IDisposable介面

曹化宇發表於2018-11-05

程式碼中,經常會使用using語句引用名稱空間或定義類的別名;本課,我們將瞭解using關鍵字的另一個用途,即使用using語句結構引用物件,物件使用結束後可以自動釋放資源。

使用using語句結構物件的前提是,物件的型別必須實現IDisposable介面。首先來看一個using語句結構和IDisposable介面的基本工作方式,如下面的程式碼,我們定義了一個名為CDisposable的類。

using System;

namespace ConsoleTest
{
    public class CDisposable :IDisposable
    {
        // 建構函式
        public CDisposable()
        {
            Console.WriteLine("建立物件...");
        }
        // 釋放資源
        public void Dispose()
        {
            Console.WriteLine("自動釋放資源...");
        }
    }
}

本例中,CDisposable類實現了IDisposable介面,其中實現了Dispose()方法,此方法就是用於自動釋放資源的地方。下面的程式碼,我們使用using語句結構測試自動釋放資源機制的有效性。

static void Main(string[] args)
{
        using (CDisposable d = new CDisposable())
        {

        }
}

程式碼執行結果如下圖所示。

enter image description here

我們可以看到,在using關鍵字的後面的一對小括號裡定義了物件d,然後,在using後的一對花括號定義的語句塊中就可以使用這個物件,最後,當語句塊執行完成後,就會自動呼叫物件中的Dispose()方法,也就是執行自動釋放資源的操作。

在.NET Framework類庫中,有很多實現了IDisposable介面的型別,使用這些資源時,可以簡化程式碼的書寫,並且,無論程式碼是否正確執行,物件都可以自動釋放資源,以減少不必要的資源佔用,特別是有效避免了在出錯時資源無法回收的情況。

如後面課程需要使用的繪圖、資料庫等操作,都大量的應用了實現IDisposable介面的型別, 這些操作會佔用大量的記憶體和網路資源,所以,自動回收資源的操作顯得更加重要,如連線SQL Server資料庫的操作,就可以使用類似如下的程式碼。

using(SqlConnection cnn = new SqlConnection(cnnStr))
{
    cnn.Open();
    // 其他資料庫操作
}

SqlConnection物件用於連線SQL Server資料庫,其中的Open()方法用於開啟資料庫連線,在using語句結構結束時,SqlConnection物件就可以自動關閉資料庫的連線,這樣一來,無論資料操作是否成功,都會及時斷開連線,從而有效地提高了系統的整體效能。

CHY軟體小屋原創作品!

相關文章