繁体   English   中英

在关键字“as”之后检查实例是基类还是派生类的类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM