sealed 키워드
sealed 키워드
- 클래스에 적용된 경우 다른 클래스가 해당 클래스에서 상속하는 것을 막음
class A {} // A는 다른 클래스가 상속 가능
sealed class B : A {} // B는 다른 클래스에서 상속 불가능
class C : A {} // 가능
class D : B {} // error
- 기본 클래스의 가상 메서드 또는 속성을 재정의하는 메서드 또는 속성에 sealed 한정자를 사용 가능
- 사용자 클래스에서 클래스가 파생되고 특정 가상 메서드 또는 속성을 재정의하지 못하도록 막음
class X
{
protected virtual void F() { Console.WriteLine("X.F"); }
protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
// 이 함수는 sealed 되었다
sealed protected override void F() { Console.WriteLine("Y.F"); }
protected override void F2() { Console.WriteLine("Y.F2"); }
}
class Z : Y
{
// 이 함수를 오버라이딩할 시 컴파일 에러 CS0239 발생
protected override void F() { Console.WriteLine("Z.F"); }
// F2를 오버라이딩 하는 것은 가능
protected override void F2() { Console.WriteLine("Z.F2"); }
}