C#프로그래밍

업캐스팅과 다운캐스팅

다모아 2023. 7. 24. 13:08

App 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    internal class App
    {
        //생성자 메서드
        public App()
        {
            //Marine marine = new Marine();

            //테란유닛
            // ↑
            //마린
            //업캐스팅 (암시적)
            TerranUnit unit = new Marine();

            //marine 변수의 값은?
            //Marine클래스의 인스턴스
            //타입은?
            //TerranUnit
            unit.Attack();

            //스팀팩 사용하고싶으면 marine 변수의 타입 -> Marine으로 변경
            //다운 캐스팅 (명시적)

            Marine marine = (Marine)unit;
            marine.StimPack();
            marine.Attack();
        }
    }
}

 

Marine 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class Marine : TerranUnit
    {
        //멤버변수

        //생성자메서드
        public Marine()
        {

        }
        //멤버메서드
        public void StimPack()
        {
            Console.WriteLine("스팀팩을 사용했습니다.");
        }
    }
}

 

TerranUnit 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class TerranUnit
    {
        //멤버변수

        //생성자메서드
        public TerranUnit()
        {

        }
        //멤버메서드
        
        public void Attack()
        {
            Console.WriteLine("공격했습니다.");
        }
    }
}

업캐스팅 (암시적)

            //marine 변수의 값은?
            //Marine클래스의 인스턴스
            //타입은?
            //TerranUnit

다운캐스팅 (명시적)

 

'C#프로그래밍' 카테고리의 다른 글

속성  (0) 2023.07.24
구조체 ,추상 클래스, 봉인, 인터페이스, vector2  (0) 2023.07.24
생성자 체이닝  (0) 2023.07.24
virtual, override, overload, base  (0) 2023.07.24
상속  (0) 2023.07.24