SSISO Community

갤러리정

Reference Type - CSharp

Reference Type
- 값형식 : 메모리 사용 크기 고정
- 참조형식 : 메모리 사용 크기 가변

 

참조형 변수 선언 및 해제
- Object obj; //참조형 변수 선언
- new + 생성자(); //객체생성
- string str = "ABC";
- int [] row = {1,2,3}; // 편의상 new연산자와 생성자 생략한 경우
- obj = null //해제, 가리키는 참조변수값이 없어짐

 

잘못된 참조관계
- 참조 변수만 생성되고 객체게 생성되지 않은 시점에서 객체의 멤버를 참조하는 경우...

 

    Object obj;
    obj.ToString(); //컴파일에러

 

참조형 변수 비교
- 참조형 변수가 가지는 메모리 위치를 비교한다.

 

Reference Type 형변환
- 부모.자식 객체간의 형변환가능(기본클래스: 파생클래스)
- 부모객체 -> 자식객체 : 다운 캐스팅 (Down Casting)
- 자식객체 -> 부모객체 : 업 캐스팅 (Up Casting)


업 캐스팅
- 완전호환
- 명시적, 암시적 둘다 가능
- 직원 m = (직원) s1;
- 단, 객체 자체의 형식을 바꾸는 것은 아니다. (단지 포인터를 다른 객체의 형식으로 변경)
- 그래서 모든 객체는 System.Object클래스로 업캐스팅이 가능하다

 

다운 캐스팅
- 반드시 명시적으로 변환
- 예외발생 가능하다. -> 예외처리(InvalidCastException)

 

    using System;

    namespace ReferenceType
    {
        class Printer
        {
            public string name;
            public void WhoAmI()
            {
                Console.WriteLine("{0} Class", this.name);
            }
        }
        class HP640: Printer
        {

        }
        class MainClass
        {
            public static void Main()
            {
                Printer p = new Printer();
                HP640 hp = new HP640();

                Object obj1 = p;
                Object obj2 = hp;
                //모든 객체는 System.Object클래스로 업캐스팅이 가능하다.
                p = (Printer)obj1;

                p.name = "Printer";
                hp.name = "HP640";

                //업캐스팅:하위객체를 상위객체로 형변환
                //p = (Printer)hp;
                //p.WhoAmI();

                //다운캐스팅 : 상위객체를 하위객체로 형변환
                //hp = p; //암시적으로 형변환시 컴파일에러
                try
                {
                    hp = (HP640)p;  //Exception 발생
                    hp.WhoAmI();
                }
                catch(InvalidCastException e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
    }


860 view

4.0 stars