Abstract Class (คลาสนามธรรม)
Abstract Class เป็นคลาสที่ประกาศด้วยคีย์เวิร์ด abstract มีลักษณะสำคัญดังนี้:
- ประกอบด้วยเมธอดนามธรรม (abstract methods) และเมธอดทั่วไป (non-abstract methods) ได้
- ไม่สามารถสร้างอินสแตนซ์ (instantiate) ได้โดยตรง
- ต้องมีคลาสลูก (derived class) มาสืบทอดและนำเมธอดนามธรรมไป implement
ตัวอย่าง Abstract Class
public abstract class Vehicle
{
public abstract void Display(); // เมธอดนามธรรม - ไม่มี implementation
public void StartEngine() // เมธอดทั่วไป - มี implementation
{
Console.WriteLine("เริ่มต้นเครื่องยนต์...");
}
}
เมธอดนามธรรมจะจบด้วย semicolon (;) เพราะไม่มีบอดี้ (body)
Sealed Class (คลาสซีล)
Sealed Class เป็นคลาสที่ประกาศด้วยคีย์เวิร์ด sealed มีลักษณะสำคัญดังนี้:
- ป้องกันการสืบทอด (inheritance) ไม่ได้
- ไม่สามารถใช้เป็น base class ได้
- เหมาะสำหรับคลาสที่ต้องการความปลอดภัยและไม่ต้องการให้แก้ไขพฤติกรรม
ตัวอย่าง Sealed Class
public sealed class SecurityManager
{
// ไม่มีคลาสอื่นสามารถสืบทอดจากคลาสนี้ได้
public void Authenticate() { /* ... */ }
}
Class Members ใน Abstract Class
สมาชิกในคลาสนามธรรมสามารถเป็นได้ดังนี้:
- Abstract members - ต้องถูก override ในคลาสลูก
- Virtual members - สามารถ override ได้แต่ไม่บังคับ
- Non-virtual members - ไม่สามารถ override ได้
- Fields, Properties, Events - เหมือนคลาสทั่วไป
ตัวอย่างการใช้งานจริง
public abstract class Shape
{
public abstract double Area(); // บังคับ implement
public virtual void Draw() // สามารถ override ได้
{
Console.WriteLine("วาดรูปทรง...");
}
}
public class Circle : Shape
{
public double Radius { get; set; }
public override double Area()
{
return Math.PI * Radius * Radius;
}
public override void Draw()
{
Console.WriteLine("วาดวงกลม...");
}
}
// Sealed class ไม่สามารถสืบทอดได้
public sealed class Calculator
{
public int Add(int a, int b) => a + b;
}
สรุปความแตกต่าง
| คุณสมบัติ | Abstract Class | Sealed Class |
|---|---|---|
| สร้างอินสแตนซ์ได้หรือไม่ | ไม่ได้ | ได้ |
| สืบทอดได้หรือไม่ | บังคับต้องสืบทอด | ห้ามสืบทอด |
| วัตถุประสงค์ | เป็นโครงสร้างพื้นฐาน | ป้องกันการเปลี่ยนแปลง |