在下面的代码中,我将一个子类转换为基类,但get类型显示它仍然是子类的一个实例。这是怎么回事?
using System;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Car c1 = new Car { m = "M", c = "C" };
Machine m1 = (Machine)c1;
Console.WriteLine(m1.GetType());//ConsoleApplication.Car
}
}
public class Machine
{
public string m;
}
public class Car : Machine
{
public string c;
}
}
答案 0 :(得分:4)
那是因为对象本身是子类的一个实例。你只是用基类引用指向它。
答案 1 :(得分:4)
转换不会更改实例的类型。转换会更改引用的类型。
转换会更改实例的类型。
答案 2 :(得分:1)
m1.GetType()
这不会查看变量的声明类型,它会在对象本身上运行GetType()
函数。对象本身知道它是什么类型,无论你为任何特定变量投射它是什么。