Static Class
- Keyword:
static class - มีได้แค่ Static Members เท่านั้น
- เก็บใน Stack (Static Memory)
- **ไม่สามารถ** Implement Interface, Inherit Class, Pass as Parameter
- ไม่มี Constructor, ไม่มี Instance
- ไม่สามารถ Dispose ได้
Singleton
- Design Pattern (Creational)
- เป็น Object Instance เดียว (Normal Class)
- เก็บใน Heap
- **สามารถ** Implement Interface, Inherit Base Class, Pass as Reference
- มี Private Constructor
- รองรับ Disposal (IDisposable)
- สามารถ Clone ได้ (ถ้า Implement ICloneable)
- สอดคล้อง OOP Principles
Comparison Table
| Aspect | Static Class | Singleton |
|---|---|---|
| Type | Language Feature | Design Pattern |
| Inheritance | No | Yes (Base Class) |
| Interfaces | No | Yes |
| Parameters | No | Yes (Pass by Ref) |
| Memory | Static/Stack | Heap |
| Lifetime | App Domain | Controlled (Lazy/Eager) |
| Testability | Hard (Mocking) | Easier (Interface) |
| Disposal | No | Yes (IDisposable) |
เมื่อไหร่ใช้ไหน?
- Static Class: Utility Functions, Extension Methods, Pure Functions, Constants
- Singleton: Shared State, Resource Management (DB Connection, Cache), Service Pattern, ต้องการ Polymorphism