0

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


}
4

3 回答 3

4

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

转换会更改实例的类型。

于 2013-07-28T23:52:45.330 回答
4

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

于 2013-07-28T23:41:23.147 回答
1
m1.GetType()

这不查看变量的声明类型,它GetType()在对象本身上运行函数。并且对象本身知道它是什么类型,无论您为任何特定变量将其转换为什么类型。

于 2013-07-28T23:41:47.860 回答