Favicon

Sealed modifier

Peponi11/28/20242m

C#
SyntaxKeywordModifier

1. Introduction

sealed 한정자는 상속을 금지하여 추가 확장을 방지하는 기능을 갖고 있다. sealed 한정자를 클래스에 적용하면 다른 클래스에서 해당 클래스를 상속받을 수 없게 하며, 멤버에 적용하는 경우 재정의가 불가능해진다. (sealed 한정자를 사용하더라도, 다른 클래스에서 상속받는 것은 가능하다)

2. Example

public sealed class A {}
public class B : A {}               // CS0509: sealed 형식 'A'에서 파생될 수 없습니다.
public class A {}
public sealed class B : A {}    // OK

3. Sealed method & property

메서드 또는 속성을 상속받아 재정의할 때, sealed를 이용하여 상속을 금지할 수 있다.

    public class A
    {
        protected virtual void BaseMethod() { }
 
        protected virtual int BaseProperty { get; set; }
    }
 
    public class B : A
    {
        protected override sealed void BaseMethod() { }
 
        protected override sealed int BaseProperty { get; set; }
    }
 
    public class C : B
    {
        protected override void BaseMethod() { }               // CS0239: 'C.BaseMethod()': 상속된 'B.BaseMethod()' 멤버는 봉인되어 있으므로 재정의할 수 없습니다.
 
        protected override int BaseProperty { get; set; }     // CS0239: 'C.BaseProperty': 상속된 'B.BaseProperty' 멤버는 봉인되어 있으므로 재정의할 수 없습니다.
    }

4. 참조 자료