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();