Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

ความแตกต่างระหว่าง public, static, void ใน C#

ภาพรวม

คำสำคัญเหล่านี้มักปรากฏร่วมกันใน 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
publicAccess Modifier: เข้าถึงได้จากที่ใดก็ได้ (Public Access)Runtime ต้องสามารถเรียก Main จากภายนอก Assembly ได้
staticเป็นสมาชิกของ Type (Class) ไม่ใช่ Instance - เรียกใช้โดยไม่ต้อง new ObjectEntry Point ต้องเรียกได้โดยไม่ต้องสร้าง Instance ของ Class
voidReturn Type: ไม่คืนค่า (No Return Value)Main ไม่ต้องคืนค่า (แต่สามารถ return int ได้สำหรับ Exit Code)
MainMethod 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 อื่นๆ

ModifierVisibility
publicทุกที่
privateภายใน Class/Struct เดียวกัน
protectedClass เดียวกัน + Derived Classes
internalภายใน Assembly เดียวกัน
protected internalAssembly เดียวกัน OR Derived Classes
private protectedClass เดียวกัน + 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() { ... }