2014년 8월 27일 수요일

[C# 닷넷, 봉인된 클래스, 메소드, sealed class, method 이론.실습예제]

[C# 닷넷, 봉인된 클래스, 메소드, sealed class, method 이론.실습예제]

Sealed Class : C#에서 클래스를 상속하는 것은 매우 쉽다. 클래스 : 기반클래스 형식이다.
상속을 고려하지 않게 설계 되어진 클래스는 추후 무분별한 상속으로 인해 어려움이 나타날 수 있다. 이의 해결을 위해 C#에서는 봉인(Sealed)된 클래스를 지원한다. 즉 상속을 하지 못하게 막은 클래스 이다.
기본 클래스의 가상 메서드나 속성을 재정의하는 메서드 또는 속성에 sealed 한정자를 사용할 수도 있다. 이렇게 하면 클래스에서 클래스를 파생시키고, 해당 클래스에서 특정 가상 메서드나 속성을 재정의하지 못하도록 할 수 있다.
아래 예제에서 Z는 Y에서 상속하지만 Z는 X에 선언되고 Y에 봉인된 가상 함수 F를 재정의할 수 없다.



using System;

namespace A
{
    class X : object
    {
        public virtual void F() { Console.WriteLine("X.F"); }
        public virtual void F2() { Console.WriteLine("X.F2"); }
        public virtual void F3() { Console.WriteLine("X.F3"); }
    }
    class Y : X
    {
        sealed public override void F() { Console.WriteLine("Y.F"); }
        public override void F2() { Console.WriteLine("X.F3"); }
    }
    class Z : Y
    {
        // 아래 주석을 풀면 오류... 봉인된 메소드 이므로 재정의 불가@@
        //public override void F() { Console.WriteLine("Z.F"); }
        // Overriding F2 is allowed.
        public override void F2() { Console.WriteLine("Z.F2"); }
    }
    public class Test 
    {
       
        static void Main()
        {


            X z2 = new Z(); z2.F();    //Y.F
                  z2.F3();   //X.F3
            Y z3 = new Z();  z3.F();  //Y.F
            Z z4 = new Z();  z4.F();   //Y.F2

            X z5 = new Z(); z5.F2();   //Z.F2
            Y z6 = new Z(); z6.F2();   //Z.F
            Z z7 = new Z(); z7.F2();   //Z.F2

        }
    }
}

댓글 없음:

댓글 쓰기