里氏转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了里氏转换相关的知识,希望对你有一定的参考价值。
概念:
1.子类可以赋值给父类
2.如果父类中装的是子类对象,那么父类可以强制转换成子类
转换关键字 is 和 as
is 转换成功返回true 失败返回false
as 转换成功返回对象,失败返回null
using System; namespace Dome { class person { public void personhello() { Console.WriteLine("我是人类"); } } class student:person { public void studenthello() { Console.WriteLine("我是学生"); } } class teacher : person { public void teacherhello(){ Console.WriteLine("我是老师"); } } class diaoyong { static void Main(string[] args) { student s = new student(); s.personhello();//调用person类对象 person p = new student(); ;//子类对象赋值给父类 p.personhello();//父类只能调用自己的成员 student stu = (student)p;//如果父类中装的是子类对象,那么父类可以强制转换成子类 //转换关键字is 和 as if (p is student) { Console.WriteLine("转换成功"); } else { Console.WriteLine("转换失败"); } student t = p as student; t.studenthello(); Console.WriteLine(); Console.ReadKey(); } } }
使用
using System; namespace Dome { class person { static void Main(string[] args) { person[] pers = new person[10]; //给数组赋值 Random r = new Random(); for (int i = 0; i < pers.Length;i++ ) { int rnum = r.Next(1,6); switch (rnum) { case 1: pers[i]=new student();break; case 2: pers[i] = new teacher(); break; case 3: pers[i] = new student(); break; case 4: pers[i] = new teacher(); break; } } //循环输出 for (int i = 0; i < pers.Length;i++ ) { if(pers[i] is student){ ((student)pers[i]).studenthello(); } else if (pers[i] is teacher) { ((teacher)pers[i]).teacherhello(); } } Console.ReadKey(); } } class student:person { public void studenthello() { Console.WriteLine("我是学生"); } } class teacher : person { public void teacherhello(){ Console.WriteLine("我是老师");} } }
以上是关于里氏转换的主要内容,如果未能解决你的问题,请参考以下文章
(11)C#传智:里氏转换ProtectedArrayList与HashTable文件管理Path与File编码(第11天)
sql 日期转换代码片段 - Dato,120,konvertere
HTML Bookmarklet模板:将任何JavaScript代码片段转换为Bookmarklet
结合两个代码片段?将用户输入的 Youtube url 转换为嵌入 url,然后将 iframe src 替换为转换后的 url