C# 클래스 (3)

#1. 상속

클래스는 다른 클래스로부터 상속받을 수 있다. 여기서 상속을 해주는 클래스를 부모(기반)클래스, 상속을 받는 클래스를 자식(파생)클래스라고 한다.

class 부모 클래스
{
     //멤버
    //부모 클래스는 자식 클래스의 멤버를 사용할 수 없다.
}
class 자식클래스 : 부모 클래스
{
  //부모 클래스의 모든 멤버를 물려받는다(private제외)
 //부모 클래스 멤버 + 자식 클래스 멤버
}

부모 클래스와 자식 클래스는 생성자의 호출 과정과 소멸자의 호출 과정에서 그 순서가 있다.

자식 클래스는 객체를 생성할 때 내부적으로 부모 클래스의 생성자를 먼저 호출한 뒤에 자식의 생성자를 호출 한다.(부모 -> 자식)

객체가 소멸할 때는 반대로 자식 클래스의 소멸자를 먼저 호출한 뒤에 부모 클래스의 소멸자를 호출 한다. (자식 -> 부모)

#2. base 키워드

base 키워드는 this키워드와 사용법이 유사하다. this의 경우는 객체 자신을 가리킨다고 한다면, base의 경우는 부모 클래스를 가리킨다.

만약 자식 클래스에서 부모 클래스 멤버를 참조할 일이 있을 경우에 base 키워드를 통해서 부모 클래스에 접근할 수도 있다.

#3. base()생성자

base()생성자 역시 this()생성자와 사용법이 유사하다. base()생성자는 부모 클래스의 생성자로,this()생성자처럼 매개 변수를 넘겨서 호출하면 base()생성자를 통해서 멤버를 초기화 할수 있다.

#4. 부모 클래스와 자식 클래스의 형변환 is와 as 키워드


(부모클래스)멤버;
(자식클래스)멤버;

이런식으로 일반 자료형과 마찬가지로 형변환이 가능하다.

C#에서는 부모자식 클래스의 형변환을 위해서 is와 as라는 키워드를 제공한다.

is: 객체가 해당 형식에 해당하는지를 검사하여 그 결과를 bool 값으로 반환
as: 형 변환 연산자와 동일한 역할을 한다. 반환에 실패하는 경우 null값을 참조한다

class parent
    {
        public int field1;
        public int field2;

        public void test()
        {
            Console.WriteLine("test");
        }

    }

    class child : parent
    {
        public int field1;
    }

    class test
    {
        static void Main(string[] args)
        {
            parent a = new child();
            child b;

            if(a is child)
            {
                a=(child)a;
                a.test();
            }
        }
    }

a라는 객체가 child객체인지 확인(is)을 해준다. 여기서는 그 결과가 true가 되기 때문에 if()안에 있는 코드가 실행이 된다.


class parent
    {
        public int field1;
        public int field2;

        public void test()
        {
            Console.WriteLine("test");
        }

    }

    class child : parent
    {
        public int field1;
    }

    class test
    {
        static void Main(string[] args)
        {
            parent a = new child();
            child b=a as child;

            if(b != null)
            {
                a.test();
            }
        }
    }


a 라는 Parent객체를 child 형식으로 변환(as)을 해준다. 변환이 성공했다면 if()안에 있는 코드가 실행이 된다.



Post a Comment

다음 이전