一、導入其餘命名空間或命名空間中定義的類型,這樣就能夠沒必要對類型使用徹底限定名了。程序員
注意:(1) using引入命名空間,並不等於編譯器編譯時加載該命名空間所在的程序集,程序集的加載決定於程序中對該程序集是否存在調用操做,若是代碼中不存在任何調用操做則編譯器將不會加載using引入命名空間所在程序集。所以,在源文件開頭,引入多個命名空間,並不是加載多個程序集,不會形成「過分引用」的弊端。
(2)使用using System指令後,一個有趣的結果是,可使用不一樣的大小寫形式來表示字符串數據類型:String 或者string。前一個版本依賴於using System指令,後一個版本使用string關鍵字。二者在C#中都合法地引用了System.String數據類型,最終生成的CIL代碼毫無區別。spa
(3)using指令不只能夠在文件的頂部聲明,還能夠在命名空間聲明的頂部進行聲明。對象
例如:namespace Awl.Michaelis.EssentialCSharp接口
{ using System;資源
.............字符串
}編譯器
二者的區別在於:後者的using指令只在你聲明的那個命名空間內有效。例如在命名空間Awl.Michaelis.EssentialCSharp的外部又聲明瞭一個新的命名空間,那麼新的命名空間不會受到using System指令的影響。string
二、爲命名空間或類型建立別名。編譯
例如:using MyCompany = PC.Company; //命名空間的別名。
using Project = PC.Company.Project; //類型的別名變量
注意:爲命名空間或類型建立別名一般有如下兩個緣由:
(1) 縮寫一個長名稱。
(2)消除同名的兩個類型的歧義。
例如:在於同一文件中引入的不一樣命名空間中包括了相同名稱的類型,如SharpMap.Geometries.Point與System.Drawing.Point。爲了不出現名稱衝突,能夠經過設定別名來解決:
using SGPoint = SharpMap.Geometries.Point;
using SDPoint = System.Drawing.Point;
儘管咱們能夠經過類型全名稱來加以區分,可是這顯然不是最佳的解決方案。用using指令建立別名,有效的解決了這種可能的命名衝突,纔是最佳的解決方案。
2、using做爲語句,用於定義一個範圍,在此範圍的末尾將釋放對象。
一、使用方法
using 語句容許程序員指定使用資源的對象應當什麼時候釋放資源。using 語句中使用的對象必須實現 IDisposable 接口。此接口提供了 Dispose 方法,該方法將釋放此對象的資源。
①能夠在 using 語句以前聲明對象。
Font font2 = new Font("Arial", 10.0f);
using (font2)
{
// use font2
}
②能夠在 using 語句之中聲明對象。
using (Font font2 = new Font("Arial", 10.0f))
{
// use font2
}
③能夠有多個對象與 using 語句一塊兒使用,可是必須在 using 語句內部聲明這些對象。
using (Font font3=new Font("Arial",10.0f), font4=new Font("Arial",10.0f))
{
// Use font3 and font4.
}
二、注意事項
①using只能用於實現了IDisposable接口的類型,禁止爲不支持IDisposable接口的類型使用using語句,不然會出現編譯錯誤;
②using語句適用於清理單個非託管資源的狀況,而多個非託管對象的清理最好以try-finnaly來實現,由於嵌套的using語句可能存在隱藏的Bug。內層using塊引起異常時,將不能釋放外層using塊的對象資源;
③using語句支持初始化多個變量,但前提是這些變量的類型必須相同,例如:
using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue))
{
//
}
④針對初始化多個不一樣類型的變量時,能夠都聲明爲IDisposable類型,例如:
using (IDisposable font = new Font("Verdana", 12), pen = new Pen(Brushes.Black))
{
float size = (font as Font).Size;
Brush brush = (pen as Pen).Brush;
}
三、using語句的實質
在程序編譯階段,編譯器會自動將using語句生成爲try-finally語句,並在finally塊中調用對象的Dispose方法,來清理資源。因此,using語句等效於try-finally語句,例如: Font f2 = new Font("Arial", 10, FontStyle.Bold); try { //執行文本繪製操做 } finally { if (f2 != null) ((IDisposable)f2).Dispose(); }