【发布时间】:2021-01-11 13:23:38
【问题描述】:
请看下面的代码:
// Base class
public abstract class Aircraft
{
public virtual void Fly()
{
Console.WriteLine("Aircraft flies");
}
}
// Derived class
public class Plane : Aircraft
{
public new void Fly()
{
Console.WriteLine("Plane flies");
}
}
// Execution
public class Program
{
public static void Main()
{
var lPlane = new Plane();
Console.WriteLine(lPlane.GetType()); // Plane
lPlane.Fly(); // Plane flies
var lAircraft = lPlane as Aircraft;
Console.WriteLine(lAircraft.GetType()); // Plane
lAircraft.Fly(); // Aircraft flies
}
}
以下行将Plane 转换为Aircaft:
var lAircraft = lPlane as Aircraft;
所以我希望lAircraft 现在是Aircraft 的类型。但事实并非如此。它的类型为Plane:
Console.WriteLine(lAircraft.GetType()); // Plane
通过关键字as进行强制转换后,如何判断当前实例是基类还是派生类?
【问题讨论】:
-
你不能改变一个对象的运行时类型;强制转换只会改变编译时类型。
标签: c# .net oop inheritance polymorphism