C# using 技巧

using 靜態成員類別名稱(static)

在 C# 中我們很常使用下面的程式碼在控制台中顯示內容:
    
    Console.WriteLine("Hello, World!");
    

WriteLine 是一個靜態方法
    
public static class Console
{
	public static void WriteLine(string? value) => Console.Out.WriteLine(value);
}
    

對於靜態方法我們可以使用 using static 的方式將類別名稱匯入,這樣以後只要使用 WriteLine 就可以了,不需要寫完整的 Console.WriteLine
    
using static Console;

// Console.WriteLine("Hello, World!");
WriteLine("Hello, World!");
    

平時我們很少會將 Console.WriteLine 使用 using static 來簡化成 WriteLine ,因為我們非常習慣原本的方式,這樣簡化很可能更難閱讀/理解,不過對於套件或是自訂的靜態方法來說,使用 using static 的方式可以大大簡化程式碼的長度。

using 別名(alias)

一樣使用上面的例子,每次都需要寫 Console.WriteLine 很長,我們可以把 Console 取一個別名,例如 C ,這樣我們以後就可以使用 C.WriteLine 來輸出訊息了:
    
using C = Console;

// Console.WriteLine("Hello, World!");
C.WriteLine("Hello, World!");
    

ㄜ...其實正常情況下應該不會有人這樣用,和上面的原因一樣,因為大家已經習慣使用 Console.WriteLine 了,自己隨便取一個別名會增加使用的成本,讓其他開發人員不容易理解。

不過在某些特定的情況下很好用,例如「不明確參考(Ambiguous reference)」

假設我們建立了一個 Version 的類別(class):
    
public class Version
{
    public int Id { get; set; }
}
    

不過因為 Version 這個名字太棒了,在 C# 中已經被使用過了,就是 System.Version ,所以在使用時很可能就會出現以下錯誤:
    
Ambiguous reference:   ConsoleAppUsingTest1028.Version	System.Version match
    

註:這裡的專案名稱為 ConsoleAppUsingTest1028

很可能就需要使用完整的 namespace 或是較長的 namespace 來確保指向我們想要使用的物件:
    
ConsoleAppUsingTest1028.Version version = new ConsoleAppUsingTest1028.Version();
    

在這裡使用別名 using 就非常方便,只要先指定 Version 代表的是 ConsoleAppUsingTest1028.Version ,就不會優先使用系統提供的 System.Version 了:
    
using Version = ConsoleAppUsingTest1028.Version;

// ConsoleAppUsingTest1028.Version version = new ConsoleAppUsingTest1028.Version();
Version version = new Version();
    

當然,如果需要使用到 System.Version 還是可以使用完整 namespace 的方式使用:
    
using Version = ConsoleAppUsingTest1028.Version;

// ConsoleAppUsingTest1028.Version version = new ConsoleAppUsingTest1028.Version();
Version version = new Version();

System.Version systemVersion = new System.Version();
    



參考資料:
Microsoft.Learn - using directive

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com