【问题标题】:After casting Sub Class to Base Class, type is still Sub class [duplicate]将子类转换为基类后,类型仍然是子类 [重复]
【发布时间】:2013-07-28 23:38:48
【问题描述】:

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


}

【问题讨论】:

  • 如果基类是abstract怎么办?那么拥有基类的实例是否有意义?
  • @retailcoder 确实如此,或者如果您将其转换为 interface!

标签: c#


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    转换会改变实例的类型。

    【讨论】:

    • 如何将汽车实例转换为机器实例?
    • 在 Car 上实现一个返回机器的方法。在该方法中,新建一个 Machine 实例并返回它。机器 myMachine = myCar.ToMachine();
    【解决方案3】:
    m1.GetType()
    

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

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多