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 |