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

Private Methods และ Sealed Methods (Final) ใน C#

C# ไม่มีคีย์เวิร์ด final เหมือน Java ใช้ sealed แทนสำหรับห้าม Override เมธอด

1. Private Methods

เหมือนกันกับบทความก่อนหน้า — เข้าถึงได้เฉพาะในคลาสเดียวกัน

2. Sealed Methods (Final Methods)

ใช้ sealed override เพื่อห้ามให้ลูกคลาส Override ต่อไป

เงื่อนไข

  • ต้องเป็น override เมธอด (คือ Override มาจาก Base Class แล้ว)
  • อยู่ใน Derived Class (ไม่ใช่ Base Class ตรงๆ)
  • Base Method ต้องเป็น virtual หรือ abstract

ตัวอย่าง: Sealed Method

using System;

class BaseClass {
    public virtual void Display() {
        Console.WriteLine("BaseClass");
    }
}

class DerivedClass : BaseClass {
    // Override และ Seal — ลูกคลาสต่อไป Override ไม่ได้
    public sealed override void Display() {
        Console.WriteLine("DerivedClass: Sealed Method");
    }
}

class FurtherDerived : DerivedClass {
    // ❌ Compile Error: Cannot override sealed member
    // public override void Display() {
    //     Console.WriteLine("FurtherDerived");
    // }
}

class Program {
    static void Main() {
        BaseClass b = new BaseClass();
        b.Display(); // BaseClass
        
        DerivedClass d = new DerivedClass();
        d.Display(); // DerivedClass: Sealed Method
        
        BaseClass poly = new DerivedClass();
        poly.Display(); // DerivedClass: Sealed Method (Polymorphism ทำงาน)
        
        Console.ReadKey();
    }
}

Sealed Class

ใช้ sealed กับ Class เพื่อห้ามสืบทอด (Inherit) ทั้งหมด:

public sealed class FinalClass {
    public void Method() { }
}

// class Derived : FinalClass { } // ❌ Compile Error

สรุปการเปรียบเทียบ Java vs C#

JavaC#คำอธิบาย
final methodsealed overrideห้าม Override ต่อ
final classsealed classห้าม Inherit
final variablereadonly (field) / const (compile-time)ค่าคงที่
private methodprivate methodเข้าถึงได้เฉพาะในคลาส

เมื่อไหร่ควรใช้ Sealed

  • Library Author: ป้องกันการ Override ที่อาจทำลาย Invariant
  • Performance: JIT สามารถ Devirtualize Call ได้ (Inline)
  • Security: ป้องกัน Malicious Subclassing
  • Design: แสดงเจตนาชัดเจนว่า "Class/Method นี้สมบูรณ์ ไม่ควรขยาย"