将派生对象传递给接受基类的方法
本文关键字:基类 方法 派生 对象 | 更新日期: 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
"。如果是的话,那么演员阵容就很好了。如果它是而不是,那么运行时就会检测到你说它是一个类型,而它不是,并抛出一个错误。