c#【里氏替换】
里氏替换
子类想调用父类中的属性或方法不可以直接调用,需要将子类转换成父类,通过父类去调用,转换的过程是里氏转换
父类子类转换四种情况
其中有两种情况代码没有错误,但是会报异常,在代码中已经分析
// 1.
//Student stu = new Student();//子类转换成父类,可以隐式转换
//Person p = stu;
//p.Show();
//Console.ReadKey();
//2.
//Person p = new Teacher();//
//Teacher t = (Teacher)p; //如果 new的时候 new的是子类,那么再转换这个子类的时候可以
//t.SayHi();
//3.代码正确,但是会报异常(子类老师转换成学生)
//Person p = new Teacher();//如果new的是子类,转换的时候 转的另一个子类,报异常
//Student stu = (Student)p;
//stu.SayHello();
//Console.ReadKey();
//4 代码正确会报异常,父类不知能直接转为子类(父亲去当儿子)
//Person p = new Person();
//Student stu = (Student)p;
IS/AS
is转换:返回的是bool值,true为能转换,false不能转换。
as转换:使用as转换时,如果转换不了,不报异常,返回值为Null.在调用方法时报异常。 As可以直接转 is可以做as做的事情
Person p = new Student();
bool result = p is Teacher;
if (result)
{
Teacher t = (Teacher)p;
t.SayHi();
}
else
{
Console.WriteLine("转换不了");
}
Console.ReadKey();