将Sub Class转换为Base Class后,type仍为Sub类

时间:2013-07-28 23:38:48

标签: c#

在下面的代码中,我将一个子类转换为基类,但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;
    }


}

3 个答案:

答案 0 :(得分:4)

那是因为对象本身子类的一个实例。你只是用基类引用指向它。

答案 1 :(得分:4)

转换不会更改实例的类型。转换会更改引用的类型。

转换会更改实例的类型。

答案 2 :(得分:1)

m1.GetType()

这不会查看变量的声明类型,它会在对象本身上运行GetType()函数。对象本身知道它是什么类型,无论你为任何特定变量投射它是什么。