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
感謝教學~
回覆刪除