호빵의 IT 개발소

[C/C#] 업캐스팅, 다운캐스팅 본문

CS(전공지식)/프로그래밍언어

[C/C#] 업캐스팅, 다운캐스팅

호빵Stack 2022. 6. 23. 02:38

업캐스팅

  • 인스턴스 타입을 파생 클래스 타입에서 기본 클래스 타입으로 변환
  • 기본 클래스의 포인터로 파생 클래스의 객체를 부름
  • 기본 클래스의 public 멤버들만 접근 가능
  • 파생 클래스의 객체를 기본 클래스의 객체처럼 다룰 수 있음
  • 업 캐스팅은 암시적임

Animal animal = new Pig(); // Pig 클래스의 인스턴스 생성, 인스턴스를 부모 타입 변수에 할당
animal.Move(); // animal은 Pig 클래스의 인스턴스, 타입은 Animal, Animal 클래스의 Move 메서드 호출 가능

 

 

다운캐스팅

  • 인스턴스의 타입을 기본 클래스 타입에서 파생 클래스 타입으로 변환
  • 파생 클래스의 포인터로 기본 클래스의 포인터가 가리키는 객체를 부름
  • 다운캐스팅은 명시적임

Animal animal = new Pig(); //업캐스팅
Pig pig = (Pig)animal; // 다운캐스팅 - Pig변수에 인스턴스 할당
Pig.Move(); // 부모 클래스의 MOVE 메서드 호출 가능

 

주의

  • 부모 타입의 인스턴스를 생성 후 자식 타입으로 다운캐스팅 금지

 

is 연산자

  • 식의 런타임 형식이 지정된 형식과 호환되지는 확인
Animal animal = new Animal();
bool canDownCast = animal is Pig;
Console.WriteLine(canDownCast); // false

 

as 연산자

  • 런타임 형식이 지정된 형식과 호환되는 경우 식을 해당 형식으로 명시적으로 변환
  • 변환할 수 없는 경우 as 연산자는 null을 반환
Animal animal = new Pig();
Pig pig = animal as Pig;

 

 

 

 


 

참고 및 출처 :

https://www.youtube.com/watch?v=yVDljROH1Jg 

 

Comments