Учитывая этот код:Тип объекта после литья?
class B
{
public virtual string Method()
{
return "base";
}
}
class D : B
{
public override string Method()
{
return "derived";
}
}
D d = new D();
B b = d as B;
b.Method();
"производный" является выходом.
Но почему именно? Я имею в виду, b - новый объект типа B, не так ли? Или это тот же объект (в памяти), что и d? Если да, то каков тип времени выполнения b, а затем B или D?
Благодаря
'b' имеет тип' B', но указывает на тот же объект, что и 'd', который имеет тип' D'. Тип исполнения также является «D». – Lee
Не путайте со способом * hiding *. т. е. ключевое слово «новое». Если вы перепродаете * переопределить * с помощью * new *, он фактически напечатает '' base''. –
это называется полиморфизмом во время выполнения –