「頂層語句(Top-level statements)」是 C# 9(.NET 5 時期)新增的語言功能,允許在程式檔案中直接撰寫語句,而不必顯式定義 Program 類別或 Main 方法。
我找 GitHub dotnet/roslyn 專案,主要由知名的 Mads Torgersen 發起的 issue ,主要來龍去脈,早期的 C# 腳本方言在 Roslyn 問世後,C# 有所謂 scripting/interactive 模式(例如 .csx、Try.NET、Jupyter notebooks)。在這種模式裡可以直接寫陳述式與函式,不必加上 class Program { static void Main(...) { ... } }
。
設計概念是將以下
Console.WriteLine("Hello");
編譯結果
partial class Program
{
static void <GeneratedMain>(string[] args)
{
Console.WriteLine("Hello");
}
}
但這造成「標準 C#」與「腳本 C#」語言體驗有落差:開發者可以在互動環境能直接寫程式,但轉向正式專案時卻需要接受額外的樣板,造成像是我需要用 LINQPad 工具,去解決輕量化的測試需求。
所以 2019年 Mads Torgersen 在 csharplang 倉庫提出 #2765,討論將頂層語句納入正式語言。反覆調整後,納入 C# 9.0 對應 .NET 5 / Visual Studio 16.8,影響之後 Minimal APIs 功能可以使用此特性優化開發體驗。
只需要這樣寫即可創建一個 web api
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello");
app.Run();
頂層語句方便,但是會有以下限制