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

Non-Static Class ใน C# คืออะไร

Non-Static Class (คลาสทั่วไป / Instance Class)

คลาสที่สามารถสร้าง Instance (Object) ได้หลายตัว โดยใช้คีย์เวิร์ด new แต่ละ Instance จะมีสำเนาของ Instance Members (Fields, Properties, Methods) ของตัวเอง

Static Class (คลาสสแตติก)

คลาสที่ ไม่สามารถสร้าง Instance ได้ มีเพียง Static Members เท่านั้น เข้าถึงผ่านชื่อคลาสโดยตรง

ตารางเปรียบเทียบ

คุณสมบัติ Non-Static Class Static Class
Instantiation (สร้าง Instance) ได้ (new MyClass()) ไม่ได้ (Compile Error)
Instance Members มีได้ (Fields, Properties, Methods) ไม่มี (Error)
Static Members มีได้ มีได้ (บังคับต้องเป็น Static ทั้งหมด)
Constructor Instance Constructor + Static Constructor มีได้แค่ Static Constructor
Inheritance สืบทอดได้ (ถ้าไม่ sealed) ไม่ได้ (Implicit Sealed)
Interface Implementation Implement ได้ ไม่ได้
การเข้าถึง ผ่าน Instance (obj.Method()) ผ่าน Class Name (MyClass.Method())

ตัวอย่าง Non-Static Class

public class Calculator {
    // Instance Field - แต่ละ Object มีค่าแยกกัน
    private int _memory = 0;
    
    // Instance Method
    public int Add(int a, int b) {
        int result = a + b;
        _memory = result; // เก็บค่าล่าสุด
        return result;
    }
    
    public int GetMemory() {
        return _memory;
    }
    
    // Static Method - ใช้ร่วมกันทุก Instance
    public static int StaticAdd(int a, int b) {
        return a + b;
    }
}

// การใช้งาน
Calculator calc1 = new Calculator();
Calculator calc2 = new Calculator();

calc1.Add(10, 5);  // calc1._memory = 15
calc2.Add(20, 30); // calc2._memory = 50

Console.WriteLine(calc1.GetMemory()); // 15
Console.WriteLine(calc2.GetMemory()); // 50

// เรียก Static Method ผ่าน Class Name
int sum = Calculator.StaticAdd(5, 3); // 8

ตัวอย่าง Static Class

public static class MathUtils {
    // ทุก Member ต้องเป็น Static
    public const double PI = 3.14159;
    
    public static double CircleArea(double radius) {
        return PI * radius * radius;
    }
    
    public static double CircleCircumference(double radius) {
        return 2 * PI * radius;
    }
    
    // Static Constructor - เรียกครั้งเดียวก่อนใช้งานครั้งแรก
    static MathUtils() {
        Console.WriteLine("MathUtils initialized");
    }
}

// การใช้งาน - ไม่ต้อง new
double area = MathUtils.CircleArea(5); // 78.53975
// MathUtils m = new MathUtils(); // Compile Error!

เมื่อไหร่ควรใช้ Static Class?

  • กลุ่ม Utility Functions ที่ไม่มี State (Stateless)
  • Extension Methods
  • Constants และ Configuration
  • Singleton Pattern (บางกรณี)

เมื่อไหร่ควรใช้ Non-Static Class?

  • ต้องการ State (ข้อมูลที่แต่ละ Instance แตกต่างกัน)
  • ต้องการ Polymorphism (Inheritance, Interface)
  • ต้องการสร้างหลาย Instance
  • Domain Objects (Entity, Model, DTO)