C#-using用法詳解

using 關(guān)鍵字有兩個主要用途:

(一).作為指令,用于為命名空間創(chuàng)建別名或?qū)肫渌臻g中定義的類型。

(二).作為語句,用于定義一個范圍,在此范圍的末尾將釋放對象。

using指令

①允許在命名空間中使用類型,這樣,您就不必在該命名空間中限定某個類型的使用:

using System.Text;

using PC.Company;

②為命名空間或類型創(chuàng)建別名。

using MyCompany = PC.Company;//命名空間的別名。

using Project = PC.Company.Project;//類型的別名

using引入命名空間,并不等于編譯器編譯時加載該命名空間所在的程序集,程序集的加載決定于程序中對該程序集是否存在調(diào)用操作,如果代碼中不存在任何調(diào)用操作則編譯器將不會加載using引入命名空間所在程序集。因此,在源文件開頭,引入多個命名空間,并非加載多個程序集,不會造成“過度引用”的弊端。

創(chuàng)建別名的另一個重要的原因在于同一文件中引入的不同命名空間中包括了相同名稱的類型,如SharpMap.Geometries.Point與System.Drawing.Point。為了避免出現(xiàn)名稱沖突,可以通過設(shè)定別名來解決:

using SGPoint = SharpMap.Geometries.Point;

using SDPoint = System.Drawing.Point;

盡管我們可以通過類型全名稱來加以區(qū)分,但是這顯然不是最佳的解決方案。用using指令創(chuàng)建別名,有效的解決了這種可能的命名沖突,才是最佳的解決方案。

using語句

using 語句允許程序員指定使用資源的對象應(yīng)當(dāng)何時釋放資源。using 語句中使用的對象必須實現(xiàn) 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 語句內(nèi)部聲明這些對象。

using (Font font3=new Font("Arial",10.0f), font4=new Font("Arial",10.0f))

{

// Use font3 and font4.

}

使用規(guī)則

①using只能用于實現(xiàn)了IDisposable接口的類型,禁止為不支持IDisposable接口的類型使用using語句,否則會出現(xiàn)編譯錯誤;

②using語句適用于清理單個非托管資源的情況,而多個非托管對象的清理最好以try-finnaly來實現(xiàn),因為嵌套的using語句可能存在隱藏的Bug。內(nèi)層using塊引發(fā)異常時,將不能釋放外層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實質(zhì)

在程序編譯階段,編譯器會自動將using語句生成為try-finally語句,并在finally塊中調(diào)用對象的Dispose方法,來清理資源。所以,using語句等效于try-finally語句,例如:

Font f2 = new Font("Arial", 10, FontStyle.Bold);

try

{

//執(zhí)行文本繪制操作

}

finally

{

if (f2 != null) ((IDisposable)f2).Dispose();

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容