본문 바로가기

[C#] Sealed

I'm 영서 2022. 4. 12.
반응형

다른 클래스가 해당클래스에서 상속하지 못하도록 하는 한정자인 Sealed는

함수, 속성, 클래스에 모두 사용 가능하다.

 

해당 한정자가 있는 경우 더이상 상속받지 못한다.

 

예를들어 게임에서 스킬트리를 만든다고 가정해보자

// 매우 간단한 스킬 클래스를 만든다고 해보자
public abstract class Skills
{
	public double Damege;  //데미지
    public double Range;   // 사정거리
    public Elements Element; //속성
    public virtual void Shooting();
}

//스킬클래스를 상속받는 속성 스킬들이 있다.
public class FireSkills : Skills
{
	public double Damege ;
    public double Range;
    public sealed Elements Element = Elements.Fire
    public virtual void Shooting();
}

public class IceSkills : Skills
{
	public double Damege ;
    public double Range;
    public sealed Elements Element = Elements.Ice
    public virtual void Shooting();
}

public class LeafSkills : Skills
{
	public double Damege ;
    public double Range;
    public sealed Elements Element = Elements.Leaf
    public virtual void Shooting();
}

// 1번의 상속을 거치면서 속성스킬을 만들엇고 속성값을 더이상 상속하고 재정의 할 수 없게 sealed 한정자를 붙였다.
// 여기서 한번의 상속을 더 거쳐보자.

public class FireShootingSkills : FireSkills 
{
	public double Damege ;
    public double Range ;
    public sealed void Shooting(){
    	//쏜다.
    }
}

public class FireAreaSkills : FireSkills 
{
	public double Damege ;
    public double Range ;
    public sealed void Shooting(){
    	//나타난다.
    }
}

// 이런식으로 불을 던지는 스킬은 던지는 것만 가능하도록
// 불이 나타나는 스킬은 나타나기만 하도록 생성 해 줄수 있다.

 

이런식으로 sealed는 더이상 재정의 할 수 없는 함수, 속성, 클래스를 정의한다.. 

 

 

반응형

댓글