里氏转换:
- 子类可以赋值给父类 (如果有一个方法需要一个父类作为参数,我们可以 传一个 子类对象)
- 如果父类中装的是子类可以强转为子类对象
- 子类对象可以调用父类成员,但是父类对象永远只能只能调用父类自己的成员
Person p=new Student();
如果说子类可以赋值给父类 那我们应该声明一个父类类型去指向子类对象
如果说父类中装的是子类对象 可以考虑将父类强转为子类对象用
is 转换成功返回 true
as 转换成功返回对应的对象 来接收ss
students ss =p as students;声明一个students类型的对象
is的用法:
if(p is students)
{
((students)p).studentsSayHello();
}
else
{
cw("失败");
}
1 namespace _里氏转换 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 //// 1、里氏转换 8 ////1)、子类可以赋值给父类:如果有一个地方需要一个父类作为参数,我们可以给一个子类代替 9 // Student s = new Student(); 10 Person p = new Student();//s; 11 12 //string str = string.Join("|",new string[] { "1", "2", "3", "4" }); 13 //Console.WriteLine(str); 14 //Console.ReadKey(); 15 16 ////2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。 17 18 //is的用法 19 //if (p is Student) 20 //{ 21 // Student ss = (Student)p; 22 // ss.StudentSayHello(); 23 //} 24 //else 25 //{ 26 // Console.WriteLine("转换失败"); 27 //} 28 //as的用法 29 Student t = p as Student; 30 t.StudentSayHello(); 31 Console.ReadKey(); 32 } 33 } 34 35 public class Person 36 { 37 public void PersonSayHello() 38 { 39 Console.WriteLine("我是父类"); 40 } 41 } 42 public class Student : Person 43 { 44 public void StudentSayHello() 45 { 46 Console.WriteLine("我是学生"); 47 } 48 } 49 public class Teacher : Person 50 { 51 public void TeacherSayHello() 52 { 53 Console.WriteLine("我是老师"); 54 } 55 } 56 57 58 }