c#里氏转换
里氏转换
1.子类可以赋值给父类
1)如果一个地方需要一个父类作为参数,我们可以给一个子类代替
class Program { static void Main(string[] args) { //将子类转换成父类 Student s = new Student(); Person p = s; //如果一个地方需要父类,可以给一个子类代替 //这里join中的第二个参数要求是object类型的数组 string str = string.Join("|", new char[] { 'm', 'k' }); Console.WriteLine(str); Console.ReadKey(); } } public class Person { public void PersonSayHello() { Console.WriteLine("我是父类"); } } public class Student : Person { public void StudentSayHello() { Console.WriteLine("我是学生"); } } public class Teacher : Person { public void TeacherSayHello() { Console.WriteLine("我是老师"); } }
2.如果父类中装的是子类对象,那么可以将这个父类转化成子类对象
class Program { static void Main(string[] args) { //将子类转换成父类 Student s = new Student(); Person p = s; //如果父类中装的是子类的对象,那么可以将这个父类转换成子类 Student ss = (Student)p; ss.StudentSayHello(); Console.ReadKey(); } } public class Person { public void PersonSayHello() { Console.WriteLine("我是父类"); } } public class Student : Person { public void StudentSayHello() { Console.WriteLine("我是学生"); } } public class Teacher : Person { public void TeacherSayHello() { Console.WriteLine("我是老师"); } }
is 表示类型转换,如果转化成功,返回true,如果转化失败,则返回false
static void Main(string[] args) { //将子类转换成父类 Student s = new Student(); Person p = s; if(p is Student) { Student ss = (Student)p; ss.StudentSayHello(); } else { Console.WriteLine("转换失败"); } Console.ReadKey(); } } public class Person { public void PersonSayHello() { Console.WriteLine("我是父类"); } } public class Student : Person { public void StudentSayHello() { Console.WriteLine("我是学生"); } } public class Teacher : Person { public void TeacherSayHello() { Console.WriteLine("我是老师"); } }
as 表示类型转换,如果能够转换就返回对应的对象,如果失败,则返回null
class Program { static void Main(string[] args) { //将子类转换成父类 Student s = new Student(); Person p = s; Student ss = p as Student; ss.StudentSayHello(); Console.ReadKey(); } } public class Person { public void PersonSayHello() { Console.WriteLine("我是父类"); } } public class Student : Person { public void StudentSayHello() { Console.WriteLine("我是学生"); } } public class Teacher : Person { public void TeacherSayHello() { Console.WriteLine("我是老师"); } }

浙公网安备 33010602011771号