C#使用指令和.NET 8型別別名
[[academy-video-youtube({"vid": "GiVZzrL2EIM", "start_time": "0", "title": "C# 於 .NET 8 中的 using 指令和型別別名", "creator": "Tim Corey", "length": "9m 03s"})]]
C# 中的 using 關鍵字不止一種功能,其基本形式和新功能之間的差距比大多數開發者想像的要大。命名空間快捷方式從一開始就存在,靜態類別導入在 .NET 6 中出現,而 .NET 8 擴展了別名字元,涵蓋任何型別,包括元組。 了解這三種形式可以讓您在文件頂部將重複的型別聲明減少到單一可讀名稱。
本指南探討在 .NET 8 控制台應用程式中 using 指令 的每種形式,基於 Tim Corey 對最新功能的詳細說明。 從熟悉的命名空間快捷方式開始,逐步構建到新的型別別名字元。
起始點:基本命名空間指令
[0:35 - 1:35] 設置從關閉隱式 using 開始,以便每個指令在程式碼中清晰可見。 在頂部沒有 using 語句時,調用 Console.WriteLine 需要完整的限定名稱:System.Console.WriteLine。 新增一條指令即可解決這個問題:
using System;using System;這一行讓 System 內的每一個型別都可以通過其短名稱使用。 該指令在庫的意義上不是導入; 沒有新的程式碼被引入。 它是一個命名空間快捷方式,告訴編譯器在遇到未限定型別名稱時去何處尋找。
使用靜態:跳過類別名稱
[2:19 - 2:45] using static 形式針對特定的靜態類別而非命名空間。 將它指向 System.Console 後,該類別的每個靜態成員都可以在不帶前綴的情況下使用:
using static System.Console;
WriteLine("Hello, world!");using static System.Console;
WriteLine("Hello, world!");不用再 Console.WriteLine,直接呼叫 WriteLine。 這種形式在 .NET 6 中出現,最有用的是在一個文件中多次調用相同的靜態類別。 消除重複的類別名稱減少了每個調用點的視覺噪音。
型別別名:命名任何型別
[3:41 - 6:40] .NET 8 擴展了別名字元,以便 using 可以為任何型別分配簡短名稱。 一個激勵範例是 命名元組。 當一個方法需要返回幾個相關值而不進行完整的類定義時,元組是常見的返回型別,但在一個文件中多次聲明相同的元組型別會產生大量的重複:
// Without an alias, each declaration repeats the full tuple type
(string FirstName, string LastName) GetUser() { ... }
(string FirstName, string LastName) person = GetUser();// Without an alias, each declaration repeats the full tuple type
(string FirstName, string LastName) GetUser() { ... }
(string FirstName, string LastName) person = GetUser();將型別別名轉化為文件頂部的單一聲明:
using Person = (string FirstName, string LastName);using Person = (string FirstName, string LastName);自此以後,文件中的 Person 表示完整的元組定義:
Person GetUser() { ... }
Person person = GetUser();Person GetUser() { ... }
Person person = GetUser();該別名僅存在於它所宣告的文件內。 它不會跨應用程式傳播。 需要注意的是,如果您需要應用程式範圍內可用的型別,記錄或類別是最合適的選擇。
別名 vs. 記錄或類別
[5:32 - 6:23] 常見的一個問題是:如果 Person 看起來像一個記錄,為什麼不直接宣告一個? 答案在於範圍和重量。 一個 記錄或類別 是一個命名型別,存在於整個專案中、帶有自己的文件,並隨著程式碼庫的演變需要維護。 元組別名是一個文件本地的便利方式。 當您在一個類別文件內部進行兩到三次的兩字段元組使用時,建立完整的型別定義會增加別名避免的維護負擔。 .NET 團隊的目的是提供一個選項的漸變,而不是在原始元組和完整類別之間強制做出二元選擇。
結論
這三個 using 形式涵蓋不同的需求。 基本命名空間指令縮短文件中的合格型別名稱,而 using static 刪除靜態成員調用中的類別前綴。 .NET 8 型別別名為任何型別(包括元組)分配一個可讀名稱,並限制在一個文件內。每一種形式都減少重複而不改變您程式碼的底層行為。
觀看 Tim Corey 的 YouTube 頻道上的完整影片,以查看在一個實際的 .NET 8 專案中所有三種形式的現場演示。

