2014년 2월 19일 수요일

[C#,닷넷강좌]C# Selaed Class(봉인 클래스), sealed 한정자,C#/ASP.NET/ADO닷넷/닷넷교육/닷넷강좌학원/닷넷공부/닷넷책/닷넷객체지향교육

[C#,닷넷강좌]C# Selaed Class(봉인 클래스), sealed 한정자,C#/ASP.NET/ADO닷넷/닷넷교육/닷넷강좌학원/닷넷공부/닷넷책/닷넷객체지향교육

Sealed Class : C#에서 클래스를 상속하는 것은 매우 쉽다. 클래스 : 기반클래스 형식이다.
상속을 고려하지 않게 설계 되어진 클래스는 추후 무분별한 상속으로 인해 어려움이 나타날 수 있다. 이의 해결을 위해 C#에서는 봉인(Sealed)된 클래스를 지원한다. 즉 상속을 하지 못하게 막은 클래스 이다.

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

아래 예제에서 Z Y에서 상속하지만 Z X에 선언되고 Y에 봉인된 가상 함수 F를 재정의할 수 없다.
C#

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

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


클래스의 새 메서드 또는 속성을 정의할 때 virtual로 선언하지 않으면 파생 클래스가 재정의되지 않도록 할 수 있다. 추상 클래스는 추상 메서드 또는 속성의 구현을 제공하는 클래스에서 상속해야 하므로 봉인 클래스와 함께 abstract 한정자를 사용하면 오류가 발생한다. 메서드나 속성에 sealed 한정자를 적용하는 경우 항상 override를 함께 사용해야 한다.
또한 구조체는 암시적으로 봉인되므로 상속할 수 없다.


[예제]
sealed class SealedClass<?XML:NAMESPACE PREFIX = O />
    {
        public int x;
        public int y;
    }

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

위 예제에서 다음 문을 사용하여 봉인 클래스에서 상속할 경우
class MyDerivedC: SealedClass {} // Error

다음 오류 메시지가 나타난다.

'MyDerivedC' cannot inherit from sealed class 'SealedClass'.
C#4.0, ADO.NET, Network 프로그래밍 5일 35시간   02-24
C#,ASP.NET마스터 18일 54시간   03-03
닷넷실무자를위한WPF개발자과정 8일 56시간   02-29
C#,ASP.NET마스터 8일 56시간   03-09

댓글 없음:

댓글 쓰기