C#快速入門教程(23)—— using語句和IDisposable介面
程式碼中,經常會使用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())
{
}
}
程式碼執行結果如下圖所示。
我們可以看到,在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軟體小屋原創作品!
相關文章
- C#快速入門教程(12)—— if語句結構C#
- C#快速入門教程(13)—— switch語句結構C#
- C#快速入門教程(14)—— 迴圈語句結構C#
- C#快速入門教程(16)—— 介面C#
- C++入門教程(3):語句和縮排C++
- 《C#快速入門教程》目錄C#
- C#快速入門教程(6)——方法C#
- C#快速入門教程(11)—— 字元和字串型別C#字元字串型別
- go語言快速入門教程Go
- C#快速入門教程(26)—— 繪圖C#繪圖
- C#快速入門教程(21)—— 泛型C#泛型
- C#快速入門教程(15)—— 繼承C#繼承
- C#快速入門教程(8)——整數C#
- C#的IDisposable 介面和解構函式C#函式
- C++入門教程(9):while 語句C++While
- C#快速入門教程(28)—— ADO.NETC#
- C#快速入門教程(25)—— 日期與時間C#
- C#快速入門教程(22)—— 常用集合型別C#型別
- C#快速入門教程(30)—— 繼續學習C#
- C#快速入門教程(18)—— 異常處理C#
- C#快速入門教程(27)—— SQL Server資料庫C#SQLServer資料庫
- C#快速入門教程(19)—— 索引器與陣列C#索引陣列
- C#快速入門教程(5)——欄位與屬性C#
- C#快速入門教程(7)——資料型別概述C#資料型別
- C#快速入門教程(2)——程式碼與測試C#
- C#程式語言及.NET 平臺快速入門指南C#
- Go快速入門 03 | 控制結構:if、for、switch 邏輯語句Go
- C#快速入門教程(20)—— 字串與正規表示式C#字串
- C#快速入門教程(4)——類成員的作用域C#
- C#快速入門教程(1)——物件導向程式設計C#物件程式設計
- Materialize快速入門教程
- Flutter小白教程系列(三) --- Dart語言快速入門FlutterDart
- C#快速入門教程(3)——類的靜態成員和例項成員C#
- C語言快速入門教程1快速入門 2指令 3條件選擇C語言
- C#快速入門教程(24)—— 路徑、目錄與檔案C#
- C#快速入門教程(17)—— 委託、事件與Lambda表示式C#事件
- 入門MySQL——DML語句篇MySql
- Python入門 - 判斷語句Python