본문 바로가기

C#

[C#]sealed 한정자

[sealed]

[sealed]

가상 / 추상 인터페이스 등의 카워드로 클래스 구조를 잡다 보면 너무 복잡해질 수 있다 .

이를 위한 한정자가 Sealed이다 . 상속이 여러번 일어나며 계층이 깊어지게 되면 나중에 코드 구현하는 사람입장에서는

어디까지 재정의를 해야 하는지 알기가 쉽지 않고 불필요한 기능 역시 구현 할 수 있으므로 구조를 잡는 입장에서 확실하게 sealed를 사용하는 습관을 가지면 좋을 것 같다

 

클래스 / 속성 / 메서드에 사용이 가능하다

  • 클래스
class A {}
sealed class B : A {}
sealed class C : B {}	//재정의가 불가하다
  • 메서드
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
{
    // 오버라이드 불가 . 컴파일 에러를 불러온다 (Sealed이기 때문)
    // protected override void F() { Console.WriteLine("Z.F"); }

    // 오버라이드 가능
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

[고려할 점]

  • 파생 클래스가 사용자 클래스의 사용자 지정을 통해 얻을 수 있는 잠재적인 이점
  • 파생 클래스가 사용자 클래스를 수정하여 더 이상 올바르게 또는 예상대로 작동하지 않을 가능성

[최적화]

  • 파생 클래

출처