티스토리 뷰

프로그래밍/C#

new 한정자, sealed Keyword

알 수 없는 사용자 2016. 7. 31. 23:19

new 한정자

 

부모 클래스를 상속한 자식 클래스에서, 부모 클래스에 존재하는 변수명/함수명과 같은 변수/함수를 선언하고

외부가 아닌 자식 인스턴스 내부에서 그 변수/함수를 호출할 때, 부모 쪽이 아닌 자식 쪽의 멤버에 접근하도록 해주는 한정자.

new 한정자를 붙여주지 않아도 자식의 멤버부터 확인을 하므로 문제는 없지만, 컴파일러 경고가 발생한다.

override 키워드와 함께 사용할 수 없다.

 

class Parent
{

public int num = 100;

 

public virtual void Func()
{
    Console.WriteLine("부모 Func 호출 - num : {0}", num);
}

}

 

class Child : Parent
{
     new public int num = 10;

 

new public void Func()
{
    Console.WriteLine("자식 Func 호출 - num : {0}", num);    // 자식의 num 변수 참조
}

 

public void Func2()
{
    Func();
}

}

 

class Program
{
    static void Main(string[] args)
    {
        Child p = new Child();
        p.Func2();            // 자식의 Func 실행
    }

 

 

 

sealed Keyword

 

클래스의 상속이나 메소드, 프로퍼티의 오버라이딩이 불가능하도록 봉인하는 키워드.

클래스 선언 시 붙여주면 해당 클래스의 상속이 불가능해지고,

부모 클래스를 상속한 클래스에서 메소드나 프로퍼티를 오버라이딩 할 때, override 키워드와 sealed 키워드를 함께 사용하면

해당 메소드나 프로퍼티의 추가적인 오버라이딩이 불가능해진다.

 

// sealed class

 

sealed class Parent
{
    public void Func()
    {
    }
}

 

class Child : Parent    // 에러
{
}

 

 

// sealed method

 

class Parent
{
    public virtual void Func()
    {
    }
}

 

class Child : Parent
{
    public override sealed void Func()    // override와 함께 사용해 주어야 함
    {
    }
}

 

'프로그래밍 > C#' 카테고리의 다른 글

Property(프로퍼티), Indexer(인덱서)  (0) 2016.07.30
as Keyword, is Keyword - 타입 캐스팅  (0) 2016.07.29
가변 길이 매개 변수  (0) 2016.07.29
nullable 데이터 타입, var Keyword  (0) 2016.07.29
ref keyword, out keyword  (0) 2016.07.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함