[C#,닷넷강좌]C# Selaed
Class(봉인 클래스), sealed
한정자,C#/ASP.NET/ADO닷넷/닷넷교육/닷넷강좌학원/닷넷공부/닷넷책/닷넷객체지향교육
Sealed Class : C#에서 클래스를 상속하는 것은 매우
쉽다. 클래스 : 기반클래스 형식이다.
상속을 고려하지 않게 설계 되어진 클래스는 추후 무분별한 상속으로 인해 어려움이 나타날 수 있다. 이의 해결을 위해 C#에서는 봉인(Sealed)된 클래스를 지원한다. 즉 상속을 하지 못하게 막은
클래스 이다.
기본 클래스의 가상 메서드나 속성을 재정의하는 메서드 또는 속성에 sealed
한정자를 사용할 수도 있다. 이렇게 하면 클래스에서 클래스를 파생시키고, 해당 클래스에서 특정 가상 메서드나 속성을 재정의하지 못하도록 할 수 있다.
아래 예제에서 Z는
Y에서 상속하지만 Z는 X에 선언되고 Y에 봉인된 가상 함수 F를 재정의할 수 없다.
C#
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("X.F3"); }
}
class Z : Y
{
// Attempting to override F causes
compiler error CS0239.
// protected override void F() {
Console.WriteLine("C.F"); }
// Overriding F2 is
allowed.
protected override void F2() {
Console.WriteLine("Z.F2"); }
}
클래스의 새 메서드 또는 속성을 정의할 때 virtual로 선언하지
않으면 파생 클래스가 재정의되지 않도록 할 수 있다. 추상 클래스는 추상 메서드 또는 속성의 구현을
제공하는 클래스에서 상속해야 하므로 봉인 클래스와 함께 abstract 한정자를 사용하면 오류가
발생한다. 메서드나 속성에 sealed 한정자를 적용하는
경우 항상 override를 함께 사용해야 한다.
또한 구조체는 암시적으로 봉인되므로 상속할 수 없다.
[예제]
sealed class SealedClass
{
public int
x;
public int
y;
}
class SealedTest2
{
static void
Main()
{
SealedClass sc =
new
SealedClass();
sc.x =
110;
sc.y =
150;
Console.WriteLine("x = {0}, y = {1}", sc.x,
sc.y);
}
}
// Output: x = 110, y = 150
위 예제에서 다음 문을 사용하여 봉인 클래스에서 상속할 경우
class MyDerivedC: SealedClass {} //
Error
다음 오류 메시지가 나타난다.
'MyDerivedC' cannot inherit from sealed
class 'SealedClass'.
댓글 없음:
댓글 쓰기