[英]Check if the instance is type of base class or derived class after keyword 'as'?
请看下面的代码:
// 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
强制转换后,如何检查当前实例是基类还是派生类的类型?
这段代码:
var lAircraft = lPlane as Aircraft;
将编译为:
Aircraft aircraft = lPlane;
所以这意味着这里的as
关键字什么都不做,因为您无法将派生类转换为它的基类。 要了解更多信息,您可以阅读此答案: https : //stackoverflow.com/a/8329517/2946329
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.