三種C# using的用法
C# using的用法很廣泛,最常見C# using的用法莫過于在程序文件的開頭引入System命名空間。同時還有別的用法,在本文有更多的解釋。
C# Using
(1)引用命名空間
using作為引入命名空間指令的用法規(guī)則為:
using Namespace;
在.NET程序中,最常見的代碼莫過于在程序文件的開頭引入System命名空間,其原因在于System命名空間中封裝了很多最基本最常用的操作,下面的代碼對我們來說最為熟悉不過:
using System;
這樣,我們在程序中就可以直接使用命名空間中的類型,而不必指定詳細的類型名稱。using指令可以訪問嵌套命名空間。
關于:命名空間
命名空間是.NET程序在邏輯上的組織結(jié)構(gòu),而并非實際的物理結(jié)構(gòu),是一種避免類名沖突的方法,用于將不同的數(shù)據(jù)類型組合劃分的方式。例如,在.NET中很多的基本類型都位于System命名空間,數(shù)據(jù)操作類型位于System.Data命名空間,
(2)創(chuàng)建命名空間別名
using為命名空間創(chuàng)建別名的用法規(guī)則為:
using alias = namespace | type;
其中namespace表示創(chuàng)建命名空間的別名;而type表示創(chuàng)建類型別名。例如,在.NET Office應用中,常常會引入Microsoft.Office.Interop.Word.dll程序集,在引入命名空間時為了避免繁瑣的類型輸入,我們通常為其創(chuàng)建別名如下:
- using MSWord = Microsoft.Office.Interop.Word;
這樣,就可以在程序中以MSWord來代替Microsoft.Office.Interop.Word前綴,如果要創(chuàng)建Application對象,則可以是這樣,而且還有一個好處就是,在一個.CS文件中引入了不同的命名空間但是相同的類名的時候,用別名就可以解決這問題了。
(3)強制資源清理
用途:清理非托管資源,不受GC控制的資源。Using結(jié)束后會隱式的調(diào)用Disposable方法。
用法:
- using (Class1 c = new Class1())
- }//清理非托管不受GC控制的資源
但是當對象使用using關鍵字的時候,必須實現(xiàn)IDisposable接口。其實using的使用和try-catch-finaly中,在finaly代碼域調(diào)用Disposable方法效果一樣。注意Using不能使用多個不同的類
- Class1 f = new Class1();
- try
- { //執(zhí)行代碼
- }
- catch()
- {
- //異常處理
- }
- finally
- {
- f.Disposable();
- }
using 語句獲取一個或多個資源,執(zhí)行一個語句,然后處置該資源。
C# using的用法:
using ( 資源獲取 ) 嵌入語句
資源獲?。?
局部變量聲明
表達式
資源是實現(xiàn)System.IDisposable 的類或結(jié)構(gòu),它包含名為Dispose 的單個無參數(shù)方法。(如:截圖2)正在使用資源的代碼可以調(diào)用Dispose以指示不再需要該資源。如果不調(diào)用Dispose,則最終將因為垃圾回收而發(fā)生自動處置。
如果資源獲取的形式是局部變量聲明,那么此局部變量聲明的類型必須為System.IDisposable 或是可以隱式轉(zhuǎn)換為 System.IDisposable 的類型。如果資源獲取的形式是表達式,那么此表達式必須是System.IDisposable 或是可以隱式轉(zhuǎn)換為System.IDisposable 的類型。
在資源獲取中聲明的局部變量必須是只讀的,且必須包含一個初始值設定項。
using 語句被翻譯成三個部分:獲取、使用和處置。資源的使用隱式封閉在包含一個 finally 子句的 try語句中。此 finally 子句處置資源。如果獲取了 null 資源,則不進行對 Dispose 的調(diào)用,也不引發(fā)任何異常。
例如,下列形式的C# using語句
- using (R r1 = new R()) {
- r1.F();
- }
- 完全等效于
- R r1 = new R();
- try {
- r1.F();
- }
- finally {
- if (r1 != null) ((IDisposable)r1).Dispose();
- }
截圖1:
using確保執(zhí)行IDisposable接口的對象在退出塊時立即釋放,主要是為了防止忘記關閉數(shù)據(jù)庫連接可能導致的.net可執(zhí)行程序的各種問題。
截圖2:
【編輯推薦】