1、子类可以赋值给父类。
2、如果这个父类中装的是子类对象,可以把这个父类强转为子类。

class Program
{
static void Main()
{
Person[] p = new Person[10];
Random r = new Random();
for(int i = 0; i < p.Length; i++)
{
int rNumber = r.Next(1,4);
switch(rNumber)
{
case 1:p[i]=Student();
break;
case 2:p[i]=Teacher();
break;
case 3:p[i]=Person();
break;
case 4:p[i]=DaLao();
break;
}
}
for(int i = 0; i < p.Length; i++)
{
//使用is判断p[i]中装的是否是对应的子类对象,
//如果是,就将父类对象强转为子类对象
//父类无法调用子类方法, 所以想要显示出子类方法,必须使用子类对象调用
if(p[i] is Student)
{
((Student)p[i]).StudentSayHellow();
//如果p[i]中装的是Student对象,就将其强转为Student类型,然后调用StudentSayHellow方法
}
else if(p[i] is Teacher)
{
((Teacher)p[i]).Teacher.SayHellow();
}
else if(p[i] is DaLao)
{
((DaLao)p[i]).DaLaoSayHellow();
}
else
{
p[i].SayHellow();//调用Person类自己的方法
}
}
Console.ReadKey();
}
}
public class Person
{
public void SayHellow()
{
Console.WriteLine("你好,我是人类");
}
}
public class Student:Person
{
public void StudentSayHellow()
{
Console.WriteLine("你好,我是学生");
}
}
public class Teacher:Person
{
public void TeacherSayHellow()
{
Console.WriteLine("你好,我是老师");
}
}
public class DaLao:Person
{
public void DaLaoSayHellow()
{
Console.WriteLine("你好,我是DaLao");
}
}

转载于:https://www.cnblogs.com/hmdyc/p/6640880.html

理解C#中的里氏转换相关推荐

  1. ssis lookup_SSIS中的LOOKUP转换概述

    ssis lookup We will explore Lookup Transformation in SSIS in this article for incremental data loadi ...

  2. C#里氏转换,子类赋值父类,父类强制转换成子类的理解

    C#里氏转换,子类赋值父类,父类强制转换成子类的理解 最近在学习C#,在父类和子类的学习上有不理解的地方. Father f = new Son(); 这样的一个实例化程序中,内存时怎么样处理的,为什 ...

  3. 04封装 里氏转换 多态

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. c++类指针赋值表达式必须是可修改的左值_C++进阶教程系列:全面理解C++中的类...

    原标题:C++进阶教程系列:全面理解C++中的类 关注Linux公社 最近刷了一些题,也面试了一些公司,把关于C++中关于类的一些概念总结了一下. 在这里也反思一下,面试前信心满满自以为什么都懂,毫无 ...

  5. 从编译器层面理解C#中的闭包的这个坑!

    前言 在公众号上看到一篇文章<正确使用和理解C#中的闭包>,里面提到了闭包的一个坑: 当捕获的外部变量为for循环的迭代变量时,C#认为变量i是定义在循环体外的.所以,当添加委托集合的fo ...

  6. 深入理解Java中的逃逸分析

    转载自  深入理解Java中的逃逸分析 在Java的编译体系中,一个Java的源代码文件变成计算机可执行的机器指令的过程中,需要经过两段编译,第一段是把.java文件转换成.class文件.第二段编译 ...

  7. 如何理解Java中的自动拆箱和自动装箱?

    小伟刚毕业时面的第一家公司就被面试官给问住了,记忆尤深啊- 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这-这-知识盲区- 回到家后小伟赶紧查资料,我透,这不就 ...

  8. 深入理解C++中的explicit关键字

    深入理解C++中的explicit关键字 kezunhai@gmail.com http://blog.csdn.net/kezunhai C++中的explicit关键字只能用于修饰只有一个参数的构 ...

  9. [转载] Java内存管理-你真的理解Java中的数据类型吗(十)

    参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...

最新文章

  1. Windows10下安装Anaconda3(附带python3.7.9)+Tensorflow2.0.0+Pycharm
  2. 【Python-ML】抽取最优化分类的特征子空间的LDA方法
  3. [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
  4. JSK-337 汽水瓶【数学+模拟】
  5. Java基础篇:简单数据类型
  6. 2013年第四届蓝桥杯C/C++B组省赛题目解析
  7. domcontentloaded ajax,Ajax优化(1) — DOMContentLoaded
  8. 中国科学院大学计算机在职博士招生,中国科学院在职博士研究生如何报考?
  9. axis2弱密码漏洞复现
  10. 微信小程序微信授权登录
  11. 卡巴斯基激活码 卡巴斯基2010激活码下载
  12. changeable和changeful_change的形容词是什么?
  13. Apache ECharts 官网布局排版错乱的解决办法
  14. Android在线购物商城 app端+后台
  15. 周易六十四卦——蹇卦
  16. core 读取视图html,ASP.NET Core MVC 之视图(Views)
  17. 第十天文件包含漏洞 php伪协议
  18. 计算机控制实验ppt模板,2016计算机控制实验-PPT.ppt
  19. 高等数学:第十二章 微分方程(3)高阶线性微分方程、二阶常系数齐次线性微分方程
  20. easeExcel合并行

热门文章

  1. Mbatis是什么?怎么运行?
  2. SQL Server之游标
  3. MySQLzip压缩文件格式安装教程
  4. (数据科学学习手札05)Python与R数据读入存出方式的总结与比较
  5. JS判断Iframe是否加载完成
  6. 帝国时代的升级企事业的发展
  7. 五大react生命周期使用注意事项,绝对干货
  8. PowerDesigner运行自定义VBS脚本,复制Name到Comment
  9. 【转载】JSON介绍
  10. JAVA设计模式 - 工厂方法模式