将派生对象传递给接受基类的方法

本文关键字:基类 方法 派生 对象 | 更新日期: 2023-09-27 18:15:23

我正在将派生类型的对象(SuperCar)传递给接受基类型对象(Car)的方法。将(Car)转换为派生对象(SuperCar)后,值仍然保留(程序打印出4)。

我想知道如果我做向下转换为什么向上转换保留值?这在c#中怎么叫呢?

class Program
{
    static void Main(string[] args)
    {
        SuperCar superCar = new SuperCar(); 
        DoTheJob(superCar);
    }
    static void DoTheJob(Car car)
    {
        Console.Write(((SuperCar)car).Doors);  // prints 4
        Console.Read();
    }
}

abstract class Car
{
    public int Wheels { get; set; }
}
class SuperCar : Car
{
    public SuperCar()
    {
        Doors = 4;
    }
    public int Doors { get; set; }
}

将派生对象传递给接受基类的方法

强制类型转换不会改变对象。它只是改变了编译器看待对象的方式。当你从SuperCar转换到Car时,你所做的就是告诉编译器"这是一个Car"。就这样对待吧。"在现实中仍然是一个SuperCar,但是编译器不知道

上cast时,你在告诉编译器"这是一个SuperCar"。如果是的话,那么演员阵容就很好了。如果它是而不是,那么运行时就会检测到你说它是一个类型,而它不是,并抛出一个错误。