c# - 为什么在父类对象使用子类启动时我只获得父类属性和方法
问题描述
假设我已经关注了两个班级及其关系,如下所示。
public class Parent
{
public int parentID { get; set; }
}
public class Child : Parent
{
public string childId { get; set; }
}
在 main 方法中,当我使用子类实例创建父类对象时,我只能访问或查看父类属性,如下所示。
但在运行时,我可以看到两个类的属性如下所示。
我没有得到上述场景的逻辑。请让我澄清这个话题。
解决方案
这与逻辑无关,而是 Intellisense 与调试器。pParent.
在设计时和 Intellisense 对声明为Parent
. 但是在运行时,调试器会查看实际对象内部,这是Child
按照
Parent pParent = new Child();
这个赋值是合法的,因为Child
从Parent
. 但是在设计时你没有一个真实的对象。所以你会怎么做?- 投掷
Child castFromParent = (Child)pParent;
Console.WriteLine(castFromParent.childId); // <-- no design time issues
基本上,它归结为编译与运行时多态性。2个不同的东西。
推荐阅读
- ios - 使用方法 sizeForItemAt 禁用其他集合视图
- python - 为什么我的scrapy总是在Scrapinghub中告诉我“TCP连接超时”但在我的本地机器上工作正常
- laravel - 如何使用 VS Code 在浏览器中运行 Laravel 项目
- api - vuejs2 获取返回网络错误
- wordpress - 为什么我部署在 AWS(免费套餐)上的 Bitnami WordPress 网站无法访问?
- python - 如何从自定义模板标签中获取模板变量
- rabbitmq - Apache Camel RabbitMQ 端点上的竞争消费者
- python - 在 TensorFlow 中使用 tf.keras
- c++ - FreeType 生成多个纹理
- android - 将按钮侦听器添加到 viewpager 崩溃应用程序