C#基础(15)——里氏转换、protected
来源:互联网 发布:arm7也是keil编程吗 编辑:程序博客网 时间:2024/06/03 21:05
1、里氏转换
1)子类可以赋值给父类,如果一个地方需要父类作为参数,可将子类放进去:
string s = string.Join("|", new string[] { "1", "2", "3" });
PersonInfo p = new Reporter(“Ale”,23,”play”);
2)如果父类中装的是子类对象,那么可以将这个父类强转为对应子类对象
PersonInfo p = new Reporter(“Ale”,23,”play”);
Reporter rep = (Reporter)p;
2、类型转换抛异常处理
1)is:如果转换成功返回true
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 练习{ class Program { static void Main(string[] args) { PersonInfo p = new Reporter("Ale", 23, "play"); if (p is Reporter) { Reporter rep = (Reporter)p; rep.Reorting(); } else { Console.WriteLine("转换失败!"); } Console.ReadKey(); } }}
2)as:如果哪个转换,则返回一个对象,否则为null
null:
success:
3、例子
代码冗余,后期可以采用多态
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 里氏转换{ class Program { static void Main(string[] args) { //Person person = new Person(); //Student studengt = new Student(); //Beauty beauty = new Beauty(); //Teacher teacher = new Teacher(); Random r = new Random(); Person[] personArray = new Person[10]; for (int i = 0; i < personArray.Length; i++) { int rNumber = r.Next(1, 6); switch (rNumber)//1-5 { case 1: personArray[i] = new Person(); break; case 2: personArray[i] = new Student(); break; case 3: personArray[i] = new Teacher(); break; case 4: personArray[i] = new Beauty(); break; case 5: personArray[i] = new Driver(); break; } } for (int i = 0; i < personArray.Length; i++) { if (personArray[i] is Driver) { ((Driver)personArray[i]).DriverSay(); } else if (personArray[i] is Teacher) { ((Teacher)personArray[i]).TeacherSay(); } else if (personArray[i] is Student) { ((Student)personArray[i]).StudentSay(); } else if (personArray[i] is Beauty) { ((Beauty)personArray[i]).BeautySay(); } else { personArray[i].PersonSay();//注意一定要放最后,因为父类是personArray,都是调用自己的方法,放在第一位结果都是PersonSay } } Console.ReadKey(); } } public class Person { public void PersonSay() { Console.WriteLine("我是人"); } } public class Student:Person { public void StudentSay() { Console.WriteLine("我是学生"); } } public class Beauty : Person { public void BeautySay() { Console.WriteLine("我是美女"); } } public class Driver : Person { public void DriverSay() { Console.WriteLine("我是司机"); } } public class Teacher:Person { public void TeacherSay() { Console.WriteLine("我是老师"); } }}
4、protected
protected权限比private权限高一些,继承的子类和其他类中能够访问到,如“_name”,但是main函数里不能够访问到。
阅读全文
0 0
- C#基础(15)——里氏转换、protected
- 【C#基础知识点】——里氏转换-as/is
- C#基础-037 里氏转换
- Unity3D学习资源—C#里氏转换
- C#里氏转换
- C#里氏转换
- C#基础巩固——成员变量修饰符protected 、internal与protected internal
- C#里氏转换/is/as
- C#里氏转换以及练习
- C#初识5 里氏转换(is,as)
- 编程基础_里氏转换的练习
- 里氏转换
- 里氏转换
- C#控制台基础 里氏转换之子类可以赋值给父类即派生类可以赋值给基类
- C# 里氏转换(父类转换成子类)( is as )
- C#基础——类型转换
- C#学习第九天 继承、里氏转换、集合
- C#访问修饰符——public ,private , internal ,protected和protected internal
- 最长递增子序列
- TensorFlow计算图优化代码剖析
- 摩尔定律
- Java总结 1111/1112
- python(二)序列
- C#基础(15)——里氏转换、protected
- StringBuffer中append对象介绍
- 两个数的大小
- 友元类
- redis设计与实现(13)客户端
- Android移动开发-在Android项目里集成调用微信支付开发的实现
- fragment(代码)
- 八数码
- java线程中sleep()与wait()的区别?