Lớp Sealed

Từ khoá sealed

Từ khoá sealed áp dụng cho một lớp nhằm ngăn chặn các lớp khác thừa kế tới lớp này. Trong ví dụ sau, lớp B từ kế từ lớp A, nhưng không một lớp nào khác có thể thừa kế tới lớp B.

class A {}      
sealed class B : A {}

Bạn cũng có thể dùng từ khoá sealed trước một phương thức hay một thuộc tính (property) ghi đè lên phương thức hay thuộc tính của lớp cha. Điều này cho phép hạn chế các lớp mà thừa kế tới lớp của bạn không được ghi đè lên những phương thức và thuộc tính virtual.

Ví dụ:

class X
{
    protected virtual void F() { Console.WriteLine("X.F"); }
    protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
    sealed protected override void F() { Console.WriteLine("Y.F"); }
    protected override void F2() { Console.WriteLine("Y.F2"); }
}
class Z : Y
{
    // Attempting to override F causes compiler error CS0239.
    // protected override void F() { Console.WriteLine("C.F"); }
    // Overriding F2 is allowed.
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

Một số lưu ý:

  • Khi bạn định nghĩa một phương thức hay thuộc tính mới, bạn có thể hạn chế các lớp con ghi đè lên chúng bằng cách không thêm bổ từ virtual đằng trước
  • Sẽ có lỗi nếu dùng bổ từ abstract đi với sealed
  • Khi áp dung với phương thức và thuộc tính thì bổ từ sealed luôn phải sử dụng với bổ từ override

Complete and Continue