본문 바로가기

Lang/C#

[C#] sealed 한정자

728x90

# sealed

클래스에 붙은 한정자 sealed는 다른 클래스가 상속 할 수 없습니다.

 

public class A{}

public sealed class B : A {}

public class C : B {}  // 에러 발생

클래스 B는 A를 상속할 수 있습니다.

클래스 C는 sealed 한정자가 붙은 B를 상속할 수 없습니다.

 

 

 

또한 가상 함수도 봉인하여 재정의할 수 없게 할 수 있습니다.

class A{
    protected virtual void F() {Consol.WriteLine("this is F() with A"); }
}

class B : A{
    sealed protected override void F() {Consol.WriteLine("this is F() with B"); }
}

class C : B{
    protected override void F() {Consol.WriteLine("this is F() with C"); } // 에러 발생
}

클래스 C는 함수 F()를 재정의할 수 없습니다.

* 클래스 A에서 virtual로 선언하지 않으면 파생 클래스가 재정의할 수 없습니다.

 

 

 

# 기타

* 추상클래스는 구현을 제공하는 클래스에 상속되어야 하므로

abstract 와 sealed를 함께 사용하면 에러가 발생합니다.

 

* 즉, 봉인 클래스는 부모 클래스가 될 수 없습니다.

 

* 구조체는 암시적으로 sealed 된 것으로 상속할 수 없습니다.

 

 

 

 

728x90

'Lang > C#' 카테고리의 다른 글

[C#] out var 파라미터  (0) 2022.12.20
[C#] 자주 사용하는 문자열 관련 함수  (0) 2022.12.08