理解C#中的里氏转换
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#中的里氏转换相关推荐
- ssis lookup_SSIS中的LOOKUP转换概述
ssis lookup We will explore Lookup Transformation in SSIS in this article for incremental data loadi ...
- C#里氏转换,子类赋值父类,父类强制转换成子类的理解
C#里氏转换,子类赋值父类,父类强制转换成子类的理解 最近在学习C#,在父类和子类的学习上有不理解的地方. Father f = new Son(); 这样的一个实例化程序中,内存时怎么样处理的,为什 ...
- 04封装 里氏转换 多态
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- c++类指针赋值表达式必须是可修改的左值_C++进阶教程系列:全面理解C++中的类...
原标题:C++进阶教程系列:全面理解C++中的类 关注Linux公社 最近刷了一些题,也面试了一些公司,把关于C++中关于类的一些概念总结了一下. 在这里也反思一下,面试前信心满满自以为什么都懂,毫无 ...
- 从编译器层面理解C#中的闭包的这个坑!
前言 在公众号上看到一篇文章<正确使用和理解C#中的闭包>,里面提到了闭包的一个坑: 当捕获的外部变量为for循环的迭代变量时,C#认为变量i是定义在循环体外的.所以,当添加委托集合的fo ...
- 深入理解Java中的逃逸分析
转载自 深入理解Java中的逃逸分析 在Java的编译体系中,一个Java的源代码文件变成计算机可执行的机器指令的过程中,需要经过两段编译,第一段是把.java文件转换成.class文件.第二段编译 ...
- 如何理解Java中的自动拆箱和自动装箱?
小伟刚毕业时面的第一家公司就被面试官给问住了,记忆尤深啊- 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这-这-知识盲区- 回到家后小伟赶紧查资料,我透,这不就 ...
- 深入理解C++中的explicit关键字
深入理解C++中的explicit关键字 kezunhai@gmail.com http://blog.csdn.net/kezunhai C++中的explicit关键字只能用于修饰只有一个参数的构 ...
- [转载] Java内存管理-你真的理解Java中的数据类型吗(十)
参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...
最新文章
- Windows10下安装Anaconda3(附带python3.7.9)+Tensorflow2.0.0+Pycharm
- 【Python-ML】抽取最优化分类的特征子空间的LDA方法
- [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
- JSK-337 汽水瓶【数学+模拟】
- Java基础篇:简单数据类型
- 2013年第四届蓝桥杯C/C++B组省赛题目解析
- domcontentloaded ajax,Ajax优化(1) — DOMContentLoaded
- 中国科学院大学计算机在职博士招生,中国科学院在职博士研究生如何报考?
- axis2弱密码漏洞复现
- 微信小程序微信授权登录
- 卡巴斯基激活码 卡巴斯基2010激活码下载
- changeable和changeful_change的形容词是什么?
- Apache ECharts 官网布局排版错乱的解决办法
- Android在线购物商城 app端+后台
- 周易六十四卦——蹇卦
- core 读取视图html,ASP.NET Core MVC 之视图(Views)
- 第十天文件包含漏洞 php伪协议
- 计算机控制实验ppt模板,2016计算机控制实验-PPT.ppt
- 高等数学:第十二章 微分方程(3)高阶线性微分方程、二阶常系数齐次线性微分方程
- easeExcel合并行