다음을 통해 공유


sealed(C# 참조)

클래스에 적용하면 sealed 한정자는 다른 클래스가 클래스에서 상속되지 않도록 방지합니다. 다음 예제에서 클래스 B 클래스 A상속하지만 클래스 B상속할 수 있는 클래스는 없습니다.

class A {}
sealed class B : A {}

기본 클래스의 가상 메서드 또는 속성을 재정의하는 메서드 또는 속성에서 sealed 한정자를 사용할 수도 있습니다. 이렇게 하면 클래스가 귀하의 클래스에서 파생될 수 있도록 하고 특정 가상 메서드나 속성을 재정의하지 못하도록 할 수 있습니다.

본보기

다음 예제에서 ZY을 상속합니다. 그러나 ZX에서 선언되고 Y에서 봉인된 가상 함수 F을 재정의할 수 없습니다.

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
{
    // Attempting to override F causes compiler error CS0239.
    // protected override void F() { Console.WriteLine("Z.F"); }

    // Overriding F2 is allowed.
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

클래스에서 새 메서드 또는 속성을 정의할 때 파생 클래스를 가상선언하지 않음으로써 클래스를 재정의하지 못하도록 방지할 수 있습니다. 기본 유형에 선언된 virtual 멤버를 재정의할 때는, 파생 유형이 이를 다시 재정의할 수 없도록 다음 예제와 같이 sealed 키워드를 사용할 수 있습니다.

public sealed override string ToString() => Value;

추상 메서드 또는 속성의 구현을 제공하는 클래스에서 추상 클래스를 상속해야 하므로 봉인된 클래스와 함께 추상 한정자를 사용하는 것은 오류입니다.

메서드 또는 속성에 적용되는 경우, sealed 수식자는 항상 재정의와 함께 사용해야 합니다.

구조체는 암시적으로 봉인되므로 상속할 수 없습니다.

자세한 내용은 상속을 참조하세요.

자세한 예시는 추상 및 봉인 클래스와 클래스 멤버을 참조하십시오.

sealed class SealedClass
{
    public int x;
    public int y;
}

class SealedTest2
{
    static void Main()
    {
        var sc = new SealedClass();
        sc.x = 110;
        sc.y = 150;
        Console.WriteLine($"x = {sc.x}, y = {sc.y}");
    }
}
// Output: x = 110, y = 150

이전 예제에서는 다음 문을 사용하여 봉인된 클래스에서 상속하려고 할 수 있습니다.

class MyDerivedC: SealedClass {} // Error

결과는 오류 메시지입니다.

'MyDerivedC': cannot derive from sealed type 'SealedClass'

비고

클래스, 메서드 또는 속성을 봉인할지 여부를 결정하려면 일반적으로 다음 두 가지 사항을 고려해야 합니다.

  • 클래스를 사용자 지정할 수 있는 기능을 통해 파생 클래스가 얻을 수 있는 잠재적인 이점.

  • 파생 클래스가 사용자의 클래스를 수정할 가능성이 있으며, 이로 인해 클래스가 더 이상 제대로 또는 예상대로 작동하지 않을 수 있습니다.

C# 언어 사양

자세한 내용은 C# 언어 사양참조하세요. 언어 사양은 C# 구문 및 사용의 최종 소스입니다.

참조