【发布时间】:2014-07-13 19:44:03
【问题描述】:
我有一些孤立的代码严重扭曲了我的大脑:
Person caster = new Person(name: "Caster", age: 24);
Console.WriteLine(caster.ToString());
object o = caster;
Console.WriteLine(o.ToString());
输出:
Caster is 24
Caster is 24
Person 的实现如您所愿。唯一要注意的是我覆盖了ToString,如上图所示。
这个输出怎么可能?如果您对从object派生的类型调用ToString,那么将调用更具体实现的Object.ToString。
但是当我们分配给object 时,运行时如何知道调用Person.ToString 而不是Object.ToString?这与多态性有关吗?谢谢。
【问题讨论】:
-
是的,在运行时你已经为对象分配了一个人,并且由于对象有一个 ToString() 方法,所以调用了超级是 ToString() 的方法。
-
caster.ToString()应该给出对象的字符串描述。您需要使用Person类的公共属性。例如:caster.Name或caster.Age.ToString()。
标签: c# oop inheritance