ภาพรวม
คำสำคัญเหล่านี้มักปรากฏร่วมกันใน Main Method ซึ่งเป็น Entry Point ของโปรแกรม C#
โครงสร้าง Main Method
using System;
class Demo {
// public static void Main(string[] args)
public static void Main(string[] args) {
Console.WriteLine("My first program in C#!");
}
}
คำอธิบายแต่ละคำสำคัญ
| Keyword | ความหมาย | ใน Main Method |
public | Access Modifier: เข้าถึงได้จากที่ใดก็ได้ (Public Access) | Runtime ต้องสามารถเรียก Main จากภายนอก Assembly ได้ |
static | เป็นสมาชิกของ Type (Class) ไม่ใช่ Instance - เรียกใช้โดยไม่ต้อง new Object | Entry Point ต้องเรียกได้โดยไม่ต้องสร้าง Instance ของ Class |
void | Return Type: ไม่คืนค่า (No Return Value) | Main ไม่ต้องคืนค่า (แต่สามารถ return int ได้สำหรับ Exit Code) |
Main | Method Name: จุดเริ่มต้นการทำงานของโปรแกรม | ชื่อต้องเป็น Main ตรงตัว (Case-sensitive) |
รูปแบบ Main Method ทั้งหมดที่รองรับ
// 1. Classic
public static void Main(string[] args) { }
// 2. Return int (Exit Code)
public static int Main(string[] args) {
return 0; // Success
}
// 3. Async Main (C# 7.1+)
public static async Task Main(string[] args) {
await DoWorkAsync();
}
// 4. Async Main with Exit Code
public static async Task<int> Main(string[] args) {
await DoWorkAsync();
return 0;
}
// 5. Top-level Statements (.NET 6+, ไม่ต้องเขียน Main)
Console.WriteLine("Hello World!");
// Compiler สร้าง Main ให้อัตโนมัติ
Access Modifiers อื่นๆ
| Modifier | Visibility |
| public | ทุกที่ |
| private | ภายใน Class/Struct เดียวกัน |
| protected | Class เดียวกัน + Derived Classes |
| internal | ภายใน Assembly เดียวกัน |
| protected internal | Assembly เดียวกัน OR Derived Classes |
| private protected | Class เดียวกัน + Derived Classes ใน Assembly เดียวกัน |
Static Members
- Static Fields: แชร์ค่าเดียวกันทั้ง Application Domain
- Static Methods: เรียกผ่าน Class Name (
ClassName.Method())
- Static Constructor: รันครั้งเดียวก่อนการเข้าถึง Static Member ครั้งแรก
- Static Properties/Events: เหมือนกัน
Void vs Return Type
// void - ไม่คืนค่า
public void DoSomething() { }
// int - คืนค่า int
public int Add(int a, int b) => a + b;
// Task - Async Method
public async Task<string> GetDataAsync() { ... }