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"); }
}

출처

Categories: ,

Updated: