[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"); }
}
[고려할 점]
- 파생 클래스가 사용자 클래스의 사용자 지정을 통해 얻을 수 있는 잠재적인 이점
- 파생 클래스가 사용자 클래스를 수정하여 더 이상 올바르게 또는 예상대로 작동하지 않을 가능성
[최적화]
- 파생 클래
출처
- https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/sealed
- https://math-development-geometry.tistory.com/41
- https://codingcoding.tistory.com/152
'C#' 카테고리의 다른 글
[ C# ]Conditional Attribute (0) | 2023.06.26 |
---|---|
[ C# ] foreach 문을 돌리며 리스트 안에 객체를 삭제시 주의점 (0) | 2023.04.05 |
[c#] 배열을 딕셔너리로 만들고 인덱스에 따라 정렬하여 사용하기 (0) | 2023.04.04 |
[ C# ] Enum 결합하여 사용하기 (0) | 2023.02.22 |
[ C# ] ?.. / ?? 연산자 (0) | 2023.02.15 |