【发布时间】: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只是保存它的对象变量。 -
因为
Student是Person的一种类型,您可以将Person变量分配给Student对象。这是面向对象编程(oop)中继承和多态设计的基本方面之一。我建议阅读基本的多态性,以了解为什么以这种方式实现。你能想到你会为任何类型的Person做些什么,以及你会为Student对象做些什么,而这些对象可能不适用于不同的Person子类型(Parent)?