2026-04-27 static void Main(string[] args)

‘2026-04-27 static void Main(string[] args) ‘

我:
static void Main(string[] args) 這個我非常不懂, 為什麼 Main 不用傳參數, 但確要寫 (string[] args) 感覺好像是要傳參數進去, 為什麼不寫 Main() 就好?
還有 Main 前面一定要寫 static void?

GPT:
你的問題非常好!讓我們一步一步來解釋 static void Main(string[] args) 這個方法的每個部分,包括為什麼我們需要 string[] args,以及為什麼 Main 前面要寫 static void。我們會從這些關鍵字和參數的功能出發,幫助你理解它們在 C# 中的作用。


1. Main 方法的作用

Main 方法是 C# 程式的入口點。當你執行一個 C# 程式時,程式從 Main 方法開始運行。所以,Main 方法是非常特殊的,它告訴編譯器程式應該從哪裡開始執行。

Main 方法的定義

Main 方法的定義通常是:

1
2
3
4
static void Main(string[] args)
{
// 程式碼
}

讓我們來逐個了解它的各部分。

string[] args 的作用

  • string[] args 代表的是「命令列參數(Command-line Arguments)」。
  • 當你在命令提示符中執行程式時,你可以在命令後面附加參數,例如:MyProgram.exe param1 param2。這些附加的參數就會被存放在 args 陣列中,讓你的程式能夠根據使用者的輸入做出不同的行為。

例如,考慮以下的程式:

1
2
3
4
5
6
7
8
9
10
11
static void Main(string[] args)
{
if (args.Length > 0)
{
Console.WriteLine($"Hello, {args[0]}!");
}
else
{
Console.WriteLine("Hello, World!");
}
}

如果你用命令列執行這個程式,並加上參數 Alice

1
MyProgram.exe Alice

這時候程式的輸出會是:

1
Hello, Alice!

如果沒有傳入任何參數,則會輸出:

1
Hello, World!

這樣,string[] args 就能讓你的程式根據不同的輸入執行不同的邏輯。

為什麼可以不用寫 string[] args

在你不需要命令列參數的情況下,Main 方法也可以定義為不帶參數的形式:

1
2
3
4
static void Main()
{
Console.WriteLine("Hello, World!");
}

這樣的寫法是合法的,但只是在某些情況下使用。如果你不需要處理命令列輸入,可以省略 args,這樣 Main 方法也能正常運行。

2. staticvoid 的作用

static 關鍵字

  • static 的作用是表示這個方法是屬於類別本身,而不是屬於類別的某個實例。
  • 這意味著你可以在沒有創建這個類別物件的情況下直接呼叫 Main 方法。由於 Main 方法是整個程式的入口點,必須在執行時被呼叫,因此它必須是 static 的。

例如,如果 Main 不是 static 的,那麼就需要創建類別的實例來呼叫它:

1
2
3
4
5
6
7
8
9
10
11
class Program
{
void Main() // 這樣寫是錯誤的,因為 Main 不能是非 static
{
// 程式碼
}
}

// 如果 Main 不是 static,你需要這樣做(但這是錯誤的)
Program p = new Program();
p.Main();

這顯然不符合 Main 作為入口點的要求,因此它必須是 static

void 關鍵字

  • void 表示這個方法不會返回任何值。
  • Main 方法通常不需要返回值,因為它的主要功能是啟動和控制整個程式的運行。
  • 在某些情況下,Main 方法也可以返回一個整數(int),通常表示程式的退出狀態。例如:
1
2
3
4
5
static int Main()
{
// 執行一些操作...
return 0; // 返回 0 表示程式正常結束
}

這樣的 Main 方法有時用於大型系統或批次腳本中,返回值可以用來標示程式執行的狀態,例如成功(0)或失敗(非零值)。

小結

  • Main 方法 是程式的入口點,從這裡開始執行所有程式碼。
  • static 表示 Main 方法可以在不創建類別實例的情況下被呼叫,這符合程式入口點的要求。
  • void 表示這個方法沒有返回值,因為 Main 只是用來啟動程式的執行。
  • string[] args 是命令列參數,你可以根據輸入的參數控制程式的執行行為。

問題

問題 1:
為什麼 Main 方法前面必須加上 static

問題 2:
string[] argsMain 方法中有什麼作用?在什麼情況下可以省略這個參數?


當你回答完這些問題後,如果有需要進一步的解釋或有其他疑問,我們可以再繼續往下學習!