본문 바로가기
C#/C# Common

Upcasting

by doublerabbits 2023. 5. 18.

 

using System;

namespace Upcasting
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Child c = new Child();
            Console.WriteLine($"[ Before Upcasting ]");
            Console.WriteLine($"{c.GetType()}");
            Console.WriteLine($"{c.Name}");
            c.Do1();
            c.Do2();

            Console.WriteLine($"");

            Parent p = (Parent)c;
            Console.WriteLine($"[ After Upcasting ]");
            Console.WriteLine($"{p.GetType()}");
            Console.WriteLine($"{p.Name}");
            p.Do1();
            //p.Do2(); // <- error

            Console.ReadKey();
        }
    }

    public class Parent
    {
        public string Name = "Parent";
        public virtual void Do1()
        {
            Console.WriteLine($"Parent - Do1");
        }
    }

    public class Child : Parent
    {
        public Child()
        {
            this.Name = "Child";
        }
        public override void Do1()
        {
            Console.WriteLine($"Child - Do1");
        }
        public void Do2()
        {
            Console.WriteLine($"Child - Do2");
        }
    }
}

 

 

Child 의 인스턴스 'c' 를 Parent 의 인스턴스 'p' 에 할당(Upcasting)

- 인스턴스의 타입은 Child 를 그대로 유지

- 부모의 멤버만 접근 가능(실제 동작은 Child 의 멤버가 동작)

- Parent 에 없는 Child 의 멤버는 사용 불가

 

'C# > C# Common' 카테고리의 다른 글

File  (0) 2024.06.10
Attribute  (0) 2024.05.11
키보드 보조키 상태 확인  (0) 2023.01.30
Tuple (함수 반환값 여러개 사용하기)  (0) 2022.10.09
string - byte array  (0) 2022.09.09