首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# using 關鍵字三大用法全解析:命名空間、別名、資源釋放

     編輯:關於C#

using 是 C# 中最常見卻常被誤解的關鍵字,實際上有三種截然不同的用途:引入命名空間、建立型別別名、定義資源釋放範圍。本文逐一說明語法、適用場景與最佳實踐。

1. 引入命名空間(最常見)

using System;           // 引入整個命名空間
using System.Collections.Generic;
  • 優點:程式碼簡潔,無須寫完整型別名稱。
  • 缺點:引入過多命名空間易造成型別名稱衝突。

衝突時使用完整型別名稱

// 兩個命名空間皆有 Console 類別
System.Console.WriteLine("Hello");        // 明確指定
MyNamespace.Console.DoSomething();

2. 型別別名(解決名稱衝突)

using Zip = System.IO.Compression;        // 命名空間別名
using GZip = System.IO.Compression.GZipStream; // 型別別名

// 使用
var stream = new GZip();

雙重衝突完整範例

using System;
using AClass = NameSpace1.MyClass;
using BClass = NameSpace2.MyClass;

namespace NameSpace1 { public class MyClass { public override string ToString() => "NameSpace1"; } }
namespace NameSpace2 { public class MyClass { public override string ToString() => "NameSpace2"; } }

class Program {
    static void Main() {
        AClass a = new AClass();
        BClass b = new BClass();
        Console.WriteLine(a); // NameSpace1
        Console.WriteLine(b); // NameSpace2
    }
}

注意:若兩個同名型別皆需使用,兩者都必須定義別名,否則編譯器仍無法辨識。

3. using 陳述式:確定性資源釋放(IDisposable 模式)

語法

using (var resource = new MyResource()) {
    // 使用 resource
} // 離開區塊自動呼叫 resource.Dispose()

等價的 try/finally 寫法

MyResource resource = new MyResource();
try {
    // 使用 resource
}
finally {
    if (resource != null) resource.Dispose();
}

支援多資源(C# 8+ 可省略大括號)

using (var fs = File.OpenRead("a.txt"))
using (var sr = new StreamReader(fs)) {
    Console.WriteLine(sr.ReadToEnd());
}

適用時機

  • 實作 IDisposable 的物件:檔案流、資料庫連線、圖形物件、網路連線等。
  • 需確保即使發生例外也能釋放非受控資源。

常見錯誤與迷思

錯誤寫法問題正確做法
using (var x = GetObj()) { } 但 GetObj() 回傳非 IDisposable編譯錯誤確認型別實作 IDisposable
在 using 區塊外使用已釋放物件ObjectDisposedException所有操作置於區塊內
以為 using 能管理記憶體僅釋放非受控資源,記憶體仍由 GC 管理理解 Dispose 與 Finalize 差異

總結

  • using namespace:簡化型別名稱,注意衝突。
  • using Alias = Type:解決同名型別衝突,雙方皆需別名。
  • using (var r = ...):確保 IDisposable 物件正確釋放,優於手動 try/finally。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved