0
이 음영과 겹쳐 관련된 MSDN의 예 중 하나는 다음과 A = B 보낸섀도 잉과 오버라이드?
using System;
namespace test
{
class A
{
public void F() { Console.WriteLine("A.F"); }
public virtual void G() { Console.WriteLine("A.G"); }
}
class B : A
{
new public void F() { Console.WriteLine("B.F"); }
public override void G() { Console.WriteLine("B.G"); }
}
class Test
{
static void Main()
{
B b = new B();
A a = b;
a.F();
b.F();
a.G();
b.G();
Console.WriteLine();
}
}
}
A.F();
B.F();
B.G();
B.G();
I was expecting the out put will be
B.F(); //change is here
B.F();
B.G();
B.G();
; a는 b 객체 참조를 보유하므로 호출 유도 클래스 함수를가집니다.
왜 A의 기능이 호출 되었습니까?
Aa = b; 그것은 변수 a가 클래스 A의 데이터 만 가지고 있지 않다는 것을 의미합니다. – Raghavendra
예, b가 B 타입의 객체를 가리키고있는 동안, a의 포인터는 A 타입이므로 컴파일 타임에 호출되는 메소드는 암시 적으로 A.의 구현 그것은 클래스 A의 데이터를 보유 할 것이지만 여전히 유형 B (유형 A이기도 함) 일 것입니다. –