C# Using 用法

來源:互聯網
上載者:User

標籤:style   http   color   io   os   使用   ar   strong   檔案   

using 語句允許程式員指定使用資源的對象應當何時釋放資源。為 using 語句提供的對象必須實現 IDisposable 介面。此介面提供了 Dispose 方法,該方法將釋放此對象的資源。 一起來看本文的介紹。

AD:2014WOT全球軟體技術峰會北京站 課程視頻發布

 

在.NET大家庭中,有不少的關鍵字承擔了多種角色,例如new關鍵字就身兼數職,除了能夠建立對象,在繼承體系中隱藏基類成員,還在泛型聲明中約束可能用作型別參數的參數,在詳細討論using的多重身份的基礎上來瞭解.NET在語言機制上的簡便與深邃。

那麼,using的多重身份都體現在哪些方面呢,我們先一睹為快吧:

1、引入命名空間

2、建立別名

3、強制資源清理

下面,本文將從這幾個角度來闡述using的多彩應用。

(1)引用命名空間

using作為引入命名空間指令的用法規則為:

  1. using Namespace;  

在.NET程式中,最常見的代碼莫過於在程式檔案的開頭引入System命名空間,其原因在於System命名空間中封裝了很多最基本最常用的操作。

關於:命名空間 

命名空間是.NET程式在邏輯上的組織圖,而並非實際的物理結構,是一種避免類名衝突的方法,用於將不同的資料類型組合劃分的方式。例如,在.NET中很多的基本類型都位於System命名空間,資料操作類型位於System.Data命名空間,

(2)建立命名空間別名

using為命名空間建立別名的用法規則為:

  1. using alias = namespace | type;  

其中namespace表示建立命名空間的別名;而type表示建立類型別名。例如,在.NET Office應用中,常常會引入Microsoft.Office.Interop.Word.dll程式集,在引入命名空間時為了避免繁瑣的類型輸入,我們通常為其建立別名如下:

  1. using MSWord = Microsoft.Office.Interop.Word;  

這樣,就可以在程式中以MSWord來代替Microsoft.Office.Interop.Word首碼,如果要建立Application對象,則可以是這樣, 
而且還有一個好處就是,在一個.CS檔案中引入了不同的命名空間但是相同的類名的時候,用別名就可以解決這問題了。

3)強制資源清理 

用途:清理非託管資源,不受GC控制的資源。Using結束後會隱式的調用Disposable方法。

用法:

  1. using (Class1 c = new Class1())   
  2. {   
  3. }//清理非託管不受GC控制的資源  

但是當對象使用using關鍵字的時候,必須實現IDisposable介面。其實using的使用和try-catch-finaly中,在finaly代碼域調用Disposable方法效果一樣。注意Using不能使用多個不同的類。

  1. Class1 f = new Class1();   
  2. try   
  3. { //執行代碼   
  4. }   
  5. catch()   
  6. {   
  7. //異常處理   
  8. }   
  9. finally   
  10. {   
  11. f.Disposable();   

using 語句擷取一個或多個資源,執行一個語句,然後處置該資源。 

using 語句: using ( 資源擷取 ) 嵌入語句

資源擷取: 局部變數聲明

運算式

資源是實現 System.IDisposable 的類或結構,它包含名為 Dispose 的單個無參數方法。正在使用資源的代碼可以調用 Dispose 以指示不再需要該資源。如果不調用 Dispose,則最終將因為記憶體回收而發生自動處置。

如果資源擷取的形式是局部變數聲明,那麼此局部變數聲明的類型必須為System.IDisposable 或是可以隱式轉換為 System.IDisposable 的類型。如果資源擷取的形式是運算式,那麼此運算式必須是 System.IDisposable 或是可以隱式轉換為 System.IDisposable 的類型。

在資源擷取中聲明的局部變數必須是唯讀,且必須包含一個初始值設定項。

using 語句被翻譯成三個部分:擷取、使用和處置。資源的使用隱式封閉在包含一個 finally 子句的 try語句中。此 finally 子句處置資源。如果擷取了 null 資源,則不進行對 Dispose 的調用,也不引發任何異常。

例如,下列形式的 using 語句

  1. using (R r1 = new R()) {   
  2. r1.F();   
  3. }  

完全等效於

  1. R r1 = new R();   
  2. try {   
  3. r1.F();   
  4. }   
  5. finally {   
  6. if (r1 != null) ((IDisposable)r1).Dispose();   

一個簡單的關鍵字,多種不同的應用場合。本文從比較全面的角度,詮釋了using關鍵字在.NET中的多種用法,值得指出的是這種用法並非實現於.NET的所有進階語言,本文的情況主要局限在C#中。

【轉載】http://developer.51cto.com/art/201105/263550.htm 

C# Using 用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.