C# 主控台應用程式範本會產生最上層陳述式

從 .NET 6 開始,新 C# 主控台應用程式的專案範本會在 Program.cs 檔案中產生下列程式碼:

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

新的輸出會使用最新的 C# 功能,以簡化您撰寫程式所需的程式碼。 針對 .NET 5 和舊版,主控台應用程式範本會產生下列程式碼:

using System;

namespace MyApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

在上述程式碼中,實際命名空間取決於專案名稱。

這兩種形式都代表相同的程式。 而且在 C# 10.0 中都是有效的。 當您使用較新版本時,只需要撰寫 Main 方法的本文。 編譯器會產生具有進入點方法的 Program 類別,並將所有最上層陳述式置於該方法中。 產生之方法的名稱並不是 Main,而是程式碼無法直接參考的實作詳細資料。 您不需要加入其他程式元素,編譯器會為產生這些元素。 如想深入了解編譯器在使用最上層陳述時所產生的程式碼,請參閱《C# 指南》基本概念一節中的最上層陳述式

針對尚未更新為使用 .NET 6 以上範本的教學課程,您有兩個選項可以採用:

  • 新增功能時,使用新的程式樣式,並新增最上層陳述式。
  • 使用 Program 類別和 Main 方法,將新的程式樣式轉換為較舊的樣式。

如果您想使用舊範本,請參閱本文稍後的使用舊的程式樣式一節。

使用新的程式樣式

最上層陳述式、全域 using 指示詞隱含 using 指示詞功能讓新程式變得更易於使用。

最上層陳述式一詞指編譯器會為您的主要程式產生類別和方法元素。 編譯器產生的類別和進入點方法會在全域命名空間中宣告。 您可以查看新應用程式的程式碼,並想像由較早範本產生之 Main 方法中所包含的陳述式,不過是位於全域命名空間裡。

您可以將更多陳述式新增至程式,就像在傳統樣式中將更多陳述式新增至 Main 方法一樣。 您可以存取 args (命令列引數)使用 await,以及設定結束代碼。 甚至還可以新增函式。 系統會產生以巢狀方式置於進入點方法內的區域函式。 區域函式不得包含任何存取修飾詞 (例如 publicprotected)。

最上層陳述式和隱含 using 指示詞能夠簡化組成應用程式的程式碼。 如要遵循現有的教學課程,請在範本所產生的 Program.cs 檔案中新增任何新的陳述式。 您可以想像自己撰寫的陳述式位於教學課程說明內 Main 方法的左大括弧和右大括弧之間。

如果想要使用較舊的格式,可以從本文第二個範例中複製程式碼,然後照常繼續進行教學課程。

您可以在教學課程內探索最上層陳述式 的部分,更進一步了解最上層陳述式。

隱含 using 指示詞

隱含 using 指示詞是指編譯器根據專案類型自動新增的一組using 指示詞。 就主控台應用程式而言,下列指示詞會隱含在應用程式中:

  • using System;
  • using System.IO;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Net.Http;
  • using System.Threading;
  • using System.Threading.Tasks;

其他應用程式類型包含更多這些應用程式類型常用的命名空間。

如果您需要非隱含 using 指示詞,可以將其新增至包含最上層陳述式的 .cs 檔案,或其他 .cs 檔案。 如需應用程式中所有 .cs 檔案包含的 using 指示詞,請使用全域 using 指示詞

停用隱含 using 指示詞

如果您想移除此行為並手動控制專案中所有命名空間,請將 <ImplicitUsings>disable</ImplicitUsings> 新增至專案檔中的 <PropertyGroup> 元素,如以下範例所示:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    ...
    <ImplicitUsings>disable</ImplicitUsings>
  </PropertyGroup>

</Project>

全域 using 指示詞

全域 using 指示詞會匯入您整個應用程式的命名空間,而不只是單一檔案。 您可以將 <Using> 項目加入至專案檔,或將 global using 指示詞新增至程式碼檔案,以新增全域指示詞。

您也可以將具有 Remove 屬性的 <Using> 項目新增至專案檔,以移除特定的 隱含 using 指示詞。 舉例來說,如果使用 <ImplicitUsings>enable</ImplicitUsings> 來啟用隱含 using 指示詞功能,新增下列 <Using> 項目就會將隱含匯入的指示詞從 System.Net.Http 命名空間中移除:

<ItemGroup>
  <Using Remove="System.Net.Http" />
</ItemGroup>

使用舊的程式樣式

從 .NET SDK 6.0.300 開始,console 範本會有 --use-program-main 選項。 請使用此選項建立不採用最上層陳述式且具有 Main 方法的主控台專案。

dotnet new console --use-program-main

產生的 Program.cs 如下所示:

namespace MyProject;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

在 Visual Studio 中使用舊的程式樣式

  1. 您建立新專案時,設定步驟會瀏覽至 [其他資訊] 設定頁面。 請在這個頁面上選取 [不要使用最上層陳述式] 核取方塊。

    Visual Studio do not use top-level statements check box

  2. 專案建立完成後,Program.cs 的內容會如下所示:

    namespace MyProject;
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
    

注意

Visual Studio 會保留選項的值,供您下次使用同樣範本建立專案時使用,因此根據預設,您下次建立主控台應用程式專案時,[不使用最上層陳述式] 核取方塊會是已勾選的狀態。 為了符合全域 Visual Studio 文字編輯器設定或 EditorConfig 檔案中定義的程式碼樣式,Program.cs 檔案的內容可能會有所不同。

如需詳細資訊,請參閱使用 EditorConfig 建立可攜式自訂編輯器設定選項、文字編輯器、C#、進階