클래스에 sealed 가 적용된 경우 다른 클래스에서 해당 클래스를 상속받지 못하게 한다.
sealed 가 적용된 클래스에 다른 클래스 상속을 줄수는 있다.
sealed 를 번역하면 봉인된이 되는데 그냥 말그대로 클래스 상속이 불가능 하도록 봉인해버리는 것이다
일반적인 사용은 하단과 같이 X를 sealed을 적용한 클래스는 상속이 불가능해진다.
sealed 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"); }
}
하지만 sealed 클래스라고해서 상속을 받지 못하는것은 아니다
class Y
{
sealed protected override void F() { Console.WriteLine("Y.F"); }
protected override void F2() { Console.WriteLine("Y.F2"); }
}
// 가능
sealed class X : Y
{
protected virtual void F() { Console.WriteLine("X.F"); }
protected virtual void F2() { Console.WriteLine("X.F2"); }
}
마소 공식 사이트에서는 다음 두가지 사항을 고려하여 사용을 하도록 제시한다.
1. 파생 클래스가 사용자 클래스의 사용자 지정을 통해 얻을 수 있는 잠재적인 이점
2. 파생 클래스가 사용자 클래스를 수정하여 더 이상 올바르게 또는 예상대로 작동하지 않을 가능성
자세한 내용은 마이크로소프트 공식 사이트를 확인해보자
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/sealed
sealed 한정자 - C# 참조 - C#
sealed 한정자 - C# 참조
learn.microsoft.com