你從這些核心建構模組來建構 C# 程式:命名空間組織你的型別、型別(類別、結構體、介面、枚舉和代理),定義行為與資料,而敘述和表達式則在執行時執行。 你如何設計入口點,取決於你選擇的應用程式風格。
選擇你的申請風格
當你建立 C# 程式時,請做出兩個獨立的結構選擇:
-
是檔案型還是專案型?
- 一個檔案式應用程式是從單一
.cs檔案執行,沒有專案檔案。 - 專案型應用程式使用
.csproj檔案,並可跨越多個原始檔案。
- 一個檔案式應用程式是從單一
-
是頂層陳述還是
Main方法?- 頂層語句讓你能直接在檔案頂端寫出可執行程式碼。
- 方法
Main會將入口點包裹在明確的靜態方法中。
專案式應用程式與檔案式應用程式皆支援任一入口點式樣式。
檔案式應用程式與專案式應用程式的比較
從 C# 14 和 .NET 10 開始, 基於檔案的應用程式 允許你在單一檔案中執行包含 *.cs 的程式,而非專案檔案。 請將以下程式碼儲存在一個名為 hello-world.cs 的檔案中,然後使用 dotnet run hello-world.cs 或 dotnet hello-world.cs 執行它:
#!/usr/bin/env dotnet
Console.WriteLine("Hello, World!");
備註
此 #! 線可讓 Unix shell 直接執行該檔案。 在任何 Unix 系統上,設定執行+x()權限,並從命令列執行該檔案。
檔案式應用程式支援所有 C# 語法,並可使用 預處理器指令 來配置建置系統。 使用檔案型應用程式來製作小型命令列工具、原型和實驗。 基於檔案的應用程式由目錄中的單一檔案組成:
my-app/
└── hello-world.cs
專案型應用程式 使用 .csproj 檔案和 .NET CLI 指令dotnet new, dotnet build以及 dotnet run 工作流程。 當您的程式跨多個檔案或需要細緻的建置設定時,請選擇專案型應用程式。 專案型應用程式包含一個專案檔案與一個或多個原始碼檔案:
my-app/
├── my-app.csproj
├── Program.cs
├── Models/
│ └── Person.cs
└── Services/
└── GreetingService.cs
如果你的檔案型應用程式成長,可以輕鬆轉換成專案型應用程式。 執行 dotnet project convert 以從你現有的原始檔案產生專案檔案。
如果你一開始就知道你的應用程式需要多個原始檔案,建議從專案型應用程式開始。 你省去了轉換步驟,可以立刻把程式碼整理成獨立檔案。
頂層語句與 Main 方法
透過使用 頂層語句,你可以直接在一個檔案中撰寫可執行程式碼,而不必將其包裝成類別與 Main 方法。 這種樣式是你建立新 dotnet new console控制台應用程式時的預設格式。 以下範例展示了一個使用 頂層語句的現代 C# 程式:
Console.WriteLine("Hello, World!");
namespace YourNamespace
{
class YourClass
{
}
struct YourStruct
{
}
interface IYourInterface
{
}
delegate int YourDelegate();
enum YourEnum
{
}
}
專案中只有一個檔案可以有頂層語句,入口點是該檔案中程式的第一行文字。 隨著你建立更大的程式,你會加入更多程式元素。
你也可以定義一個明確的靜態 Main 方法作為程式的入口點:
// A skeleton of a C# program using an explicit Main method
namespace YourNamespace;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
這兩種入門式樣式都能適用於檔案型和專案型應用程式。 兩種風格都支援相同的功能。
建置和執行 C# 程式
C# 是 編譯 的語言。 對於專案型應用程式,請使用 dotnet build 指令將原始碼檔案編譯成二進位套件。 用dotnet run來進行編譯並運行。
dotnet.NET SDK 中包含的 CLI 提供了許多工具來建立、建置和管理 C# 專案。
對於基於檔案的應用程式,直接 dotnet run hello-world.cs 編譯並執行單一檔案——不需要專案檔案。
表達式和語句
如果你有照著 Get Start 教學做,你已經寫好表達式和語句了。 你打的每一行程式碼都是其中一種(或兩者都有)。 現在讓我們來定義這些術語。
表達式與陳述式是 C# 程式的基本建構組件。 一個 表達式 產生一個值。 陳述句執行動作,通常以分號結尾。
以下是表達式:
-
42(字面值) -
x + y(算術運算) -
Math.Max(a, b)(產生值的方法呼叫) -
condition ? trueValue : falseValue(條件表示式) -
new Person("John")(物件建立)
陳述句執行一個動作。 語句控制程式流程、宣告變數或呼叫操作。 以下是陳述:
-
int x;(宣告聲明) -
int x = 42;(帶初始化的宣告語句) -
Console.WriteLine("Hello");(方法呼叫語句) -
if (condition) { /* code */ }(條件語句) -
return result;(return 語句)
語句通常包含表達式,且表達式可以嵌套在其他表達式中。 例如,以下宣告語句將 f 指派給加法表達式的結果。 該加法表達式會將兩個方法呼叫表達式的結果相加:
var maxResult = Math.Max(a, b) + Math.Max(c, d);
如需查看有關敘述的詳細資訊,請參閱敘述。 關於表達體構件的資訊,請參見表達體構件。