【问题标题】:Why does Person p = new Student() gives student type [duplicate]为什么 Person p = new Student() 给出学生类型[重复]
【发布时间】:2021-12-07 12:21:49
【问题描述】:

愚蠢的问题。于是就有了代码:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public void Method()
    {
        Console.WriteLine("Hello, I'm person!");
    }
}

class Student : Person 
{
    //
}

主要

Student student = new Student();
Person p = student;
Console.WriteLine(p.GetType()); // Student

为什么这会返回Student?我认为它应该是Person,因为我们创建了Person 实例并将Student 对象插入其中

【问题讨论】:

  • 底层类型仍然是Student。您根本没有创建Person 实例,您只是将学生分配给Person 类型的变量
  • @DavidG 先生,非常感谢您的解释
  • because we created Person instance... 不,new Student() 是创建对象的代码。Person 只是保存它的对象变量。
  • 因为StudentPerson 的一种类型,您可以将Person 变量分配给Student 对象。这是面向对象编程(oop)中继承和多态设计的基本方面之一。我建议阅读基本的多态性,以了解为什么以这种方式实现。你能想到你会为任何类型的Person 做些什么,以及你会为Student 对象做些什么,而这些对象可能不适用于不同的Person 子类型(Parent)?

标签: c# upcasting


【解决方案1】:

即使P 的类型是 Person,它也是一个引用 student 。当您实例化 Student 对象时,您的 P 变量只是引用 student 对象。

【讨论】:

  • 非常感谢!
  • 嘿@Sam,图表是否帮助您理解了我的意思,或者它让您感到困惑。如果图表没有帮助,那么我想您可以在给定的link 中获得更好的答案。如果它不会为 SO 增加太多价值,我很乐意删除我的答案。
猜你喜欢
  • 1970-01-01
  • 2017-03-27
  • 2019-06-02
  • 1970-01-01
  • 2020-12-11
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
相关资源
最近更新 更多