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

Abstract Class vs Sealed Class และ Class Members ใน C#

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
สร้างอินสแตนซ์ได้หรือไม่ ไม่ได้ ได้
สืบทอดได้หรือไม่ บังคับต้องสืบทอด ห้ามสืบทอด
วัตถุประสงค์ เป็นโครงสร้างพื้นฐาน ป้องกันการเปลี่ยนแปลง