다형성은 OOP의 특징으로 객체가 메소드 호출을 받을 때 어떤 메소드를 호출할지를 런타임 때 결정한다. C#과 다른 OOP 언어에서, 특정 조건에 부합하면 객체 형식을 해당 변수 형식과 다른 참조 변수에 할당할 수 있다.
A a = new B(); 이와 같이 참조 변수 a의 형식이 A이고, 형식 B의 객체를 할당할 수 있는 것은 다음 두 가지 조건 중 하나에 부합할 때다. A는 클래스이고 B는 A의 자식클래스다.
A는 인터페이스이고 B는 B의 부모 중 하나가 A를 구현한다. B의 인스턴스를 a에 할당할 때, a는 형식 A다.
이는 A에서 정의하지 않은 B의 메소드를 호출할 수 없음을 의미한다. 하지만 a.GetType().ToString()의 값을 출력하면 "A"가 아니라 "B"가 나온다.
이것은 컴파일 시간에 a의 형식이 A이므로, 컴파일러는 A에서 정의하지 않은 B의 메소드를 호출할 수 없지만, 런타임에 a의 형식이 B 임을 안 것이다. 이를 기반으로 다형성의 본질이 나온다.
B...
#
C샵
#
virtual
#
가상메소드
#
늦은바인딩
#
다형성
#
동적바인딩
#
런타임바인딩
#
씨샵
원문 링크 : [C#] 다형성