Main 函式
程式的進入點
每一支 C# 程式都必須包含一個類別,該類別內要有名為 Main 的函式。前面範例所展示的程式碼中,這個函式定義在名為 Program 的類別裡。
不過新版的 C# 提供頂層陳述式功能,不用手動撰寫 Main 函式,直接書寫的程式碼預設就等同 Main 的函式主體。
- C# 程式的執行起點,是
Main函式內第一行程式指令。 - 函式名稱
Main開頭的 M 一定要大寫。
Main 函式最精簡寫法:
static void Main( )
{
程式陳述
}Code language: JavaScript (javascript)
專案裡不能沒有 Main 函式,也不能同時存在多個,有且僅能有一個。
為方便各位實作示範,我們使用 VS2022 建立僅支援 Windows 平台的 .NET Framework 專案。

請選擇下方的主控台應用程式範本。

框架版本部分,我們選用最新的 .NET 4.8.1。
新建專案後,Program.cs 預設內容如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloDemo
{
internal class Program
{
static void Main(string[] args)
{
}
}
}
Code language: PHP (php)
開頭數行用來匯入多個命名空間,我們就能使用這些命名空間內建的各種類別,這些都是 .NET 原生提供的型別。
接著在 Main 函式內輸入一行程式碼:
Console.WriteLine(“hello foxdevelop.com”);

點擊 Visual Studio 上方綠色三角形「Start」按鈕執行程式。

程式執行時,預設會跑 Main 裡的第一行程式碼。
如果複製一份 Main 函式貼上,畫面會立刻出現錯誤標記

錯誤原因:同一個命名空間下不能存在同名函式。那我們建立兩個不同命名空間試試看。

此時程式碼不會出現紅色波浪底,看似正常,但嘗試編譯專案
點擊 Start

編譯依舊報錯,底部的錯誤清單(Error List)面板會顯示詳細錯誤資訊

若介面沒顯示 Error List 面板,可從頂部功能表開啟。

錯誤清單會標示出程式碼出錯的位置

空白字元(Whitespace)
程式碼中的空白字元指不會產生可見輸出的符號。編譯器會忽略原始碼內所有空白,開發者加入空白只是為了讓程式結構清晰、方便閱讀。
常見空白字元包含:
- 半形空白(Space)
- 定位字元(Tab)
- 換行字元(New line)
- 歸位字元(Carriage return)
範例:下方兩段程式碼排版差異極大,但編譯器會視為完全相同的邏輯
// 整齊排版版本
Main()
{
Console.WriteLine("Hi, there!");
}
// 緊縮連寫版本
Main(){Console.WriteLine("Hi, there!");}Code language: JavaScript (javascript)
以下是格式正常的 Main 函式
static void Main(string[] args)
{
Console.WriteLine("hello foxdevelop.com");
}Code language: JavaScript (javascript)
我們把所有空白全部刪除、壓縮成一行,程式依舊能正常編譯,對編譯器來說兩者沒有任何區別。
static void Main(string[] args){Console.WriteLine("hello foxdevelop.com");}Code language: JavaScript (javascript)

陳述式(Statements)
C# 的陳述式語法與 C、C++ 相近。本章先介紹陳述式通用規則,各類特殊陳述後續會詳細說明。
陳述式是單行原始碼指令,用來定義資料型別或是命令程式執行特定操作。
簡單陳述必須以分號 ; 作結尾。下方兩行連續簡單陳述:第一行宣告整數變數 var1 並賦值 5;第二行將變數數值輸出至主控台視窗。
int var1 = 5;
System.Console.WriteLine("The value of var1 is {0},welcome to foxdevelop.com", var1);Code language: JavaScript (javascript)

上面 Main 範例包含兩行陳述,先前示範都只有單行。第一段程式碼建立名為 var1 的整數變數,存入數值 5;第二行輸出文字到主控台,文字內的 {0} 是佔位符,會自動替換成後方 var1 的數值。
程式碼區塊(Blocks)
程式碼區塊由一組成對大括號包覆零至多筆陳述式,語法上會被視作單一陳述處理。
將上例兩行陳述包進一對大括號,就構成完整程式碼區塊:
{
int var1 = 5;
System.Console.WriteLine("The value of var1 is {0},welcome to foxdevelop.com", var1);
}Code language: JavaScript (javascript)

程式碼區塊核心規則:
- 當語法只允許單一陳述,但業務邏輯需要多個操作時,使用區塊把所有程式碼包覆。
- 部分語法結構強制要求使用程式碼區塊,無法只用單行陳述取代。
- 簡單陳述末尾要加分號,但程式碼區塊結尾不須加分號。(編譯器允許在
}後補分號,只會解讀為空陳述,屬不規範寫法)
圖解說明:
{
int var2 = 5; // 單筆陳述結尾需加分號
System.Console.WriteLine("The value of var1 is {0}", var1); // 單筆陳述結尾需加分號
} // 大括號結尾不加結尾分號Code language: JavaScript (javascript)

一般獨立陳述的結尾都需要加上 ;

以下完整範例可直接複製執行
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloDemo
{
internal class Program
{
static void Main(string[] args)
{
{
int var1 = 5;
System.Console.WriteLine("The value of var1 is {0},welcome to foxdevelop.com", var1);
}; ; ; ;
}
}
}
Code language: C# (cs)