首页 > 解决方案 > 为什么在父类对象使用子类启动时我只获得父类属性和方法

问题描述

假设我已经关注了两个班级及其关系,如下所示。


public class Parent
{
    public int parentID { get; set; }
}
public class Child : Parent
{
    public string childId { get; set; }
}

在 main 方法中,当我使用子类实例创建父类对象时,我只能访问或查看父类属性,如下所示。

在此处输入图像描述

但在运行时,我可以看到两个类的属性如下所示。

在此处输入图像描述

我没有得到上述场景的逻辑。请让我澄清这个话题。

标签: c#oopinheritancepolymorphism

解决方案


这与逻辑无关,而是 Intellisense 与调试器。pParent. 在设计时和 Intellisense 对声明为Parent. 但是在运行时,调试器会查看实际对象内部,这是Child按照

Parent pParent = new Child();

这个赋值是合法的,因为ChildParent. 但是在设计时你没有一个真实的对象。所以你会怎么做?- 投掷

Child castFromParent = (Child)pParent;
Console.WriteLine(castFromParent.childId); // <-- no design time issues

基本上,它归结为编译与运行时多态性。2个不同的东西。


推荐阅读