using 指令的多種用法using 敘述在 Dispose 模式中的應用.NET 關鍵字常身兼數職。如 new 除建立物件,在繼承體系隱藏基類別成員、泛型宣告約束型別參數(詳見第五回)。本文聚焦另一明星關鍵字 using,詳細討論其多重身份,了解 .NET 語言機制的簡便與深邃。
using 的多重身份:
用法:using Namespace;
最常見:using System; 封裝基本常用操作。引入後可直接使用命名空間型別,無需指定完整名稱。可存取巢狀命名空間。
邏輯組織結構,非物理結構,避免類別名稱衝突,組合劃分資料型別。基本型別在 System,資料操作在 System.Data。
using 類似 Java import,引入邏輯結構;不同於 C #include 引入實際類別庫。using 引入命名空間 ≠ 編譯器載入該命名空間所在組件。組件載入取決於程式碼是否存在調用操作。若無調用,編譯器忽略該組件。因此源檔開頭引入多個命名空間 ≠ 載入多個組件,不會造成「過度引用」弊端。用法:using alias = namespace | type;
namespace:建立命名空間別名type:建立型別別名using MSWord = Microsoft.Office.Interop.Word;
private static MSWord.Application ooo = new MSWord.Application();
using MyConsole = System.Console;
class UsingEx {
public static void Main() { MyConsole.WriteLine("應用了類別別名。"); }
}
同一 cs 檔引入不同命名空間含相同名稱型別時,設定別名解決:

比完整型別名稱更符合編碼規範。
理解 using 強制清理資源,先了解 Dispose 模式,再了解 .NET 垃圾回收機制。.NET 提供 Dispose 模式實現顯式釋放與關閉物件能力。
Dispose 模式:顯式清理物件資源的約定方式,用於釋放物件封裝的非受控資源。非受控資源不受 GC 控制,物件必須調用自身 Dispose() 釋放。概念上是約定,實現上是讓型別實作 IDisposable 介面,提供公有 Dispose 方法。
using 敘述提供強制清理資源的便捷操作,指定何時釋放資源。典型應用:
using (Font f = new Font("Verdana", 12, FontStyle.Regular))
{
Graphics g = e.Graphics;
Rectangle rect = new Rectangle(10, 10, 200, 200);
g.DrawString("Try finally dispose font.", f, Brushes.Black, rect);
} // 結束時自動呼叫 f.Dispose()
Font 實作 IDisposable:
public sealed class Font : MarshalByRefObject, ICloneable, ISerializable, IDisposable
編譯器自動將 using 轉為 try-finally,在 finally 區塊呼叫 Dispose():
.method public hidebysig static void Main() cil managed
{
.entrypoint
.maxstack 4
.locals init ([0] class [System.Drawing]System.Drawing.Font f, [1] bool CS$4$0000)
IL_0000: nop
IL_0001: ldstr "Verdana"
...
.try { ... } finally {
IL_001f: callvirt instance void [mscorlib]System.IDisposable::Dispose()
IL_0024: nop
IL_0025: endfinally
}
IL_0026: nop
IL_0027: ret
}
等效代碼:
Font f2 = new Font("Arial", 10, FontStyle.Bold);
try {
// 繪圖操作
} finally {
if (f2 != null) ((IDisposable)f2).Dispose();
}
using 僅用於實作 IDisposable 的型別,否則編譯錯誤。try-finally,巢狀 using 可能有隱藏 Bug(內層拋異常時外層資源無法釋放)。using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue))。不同型別可用 IDisposable 統一或 try-finally。Dispose 清理非受控資源,非釋放物件記憶體(記憶體仍由 GC 控制)。using 末尾退出;異常可能提前退出。using 前宣告:Font f3 = new Font(...); using (f3) { ... }一個簡單關鍵字,多種不同應用場合。本文從全面角度詮釋 using 在 .NET 中的多種用法(主要限 C#)。