首先要知道黎克特制轉換是建立在繼承基礎之上的類與類之間的轉換
寫法可以參照資料型別轉換,隱式和強制轉換的寫法。例 int a=(int)b;b為double型別。
下面用**引數關係:
首先定義三個類,person(父類),teacher(person子類),student(person子類).
1. person p=new person();
student st=(student)p;
這種轉換會直接異常,原因很簡單,new的是父類的物件,父類是不可能直接轉化成子類的。通俗講爸爸不可能真的做兒子- -!
2. person p=new student();
teacher stu=(teacher);
這種情況p引用變數 接受的是子類student的例項物件,但型別是父類的,雖然**不會報錯,但是還是會異常。解釋可以理解為,爸爸可以裝成兒子,因為有的家庭地位不平等嗎,但爸爸也不會真的做兒子
3 student s=new student();
person p=s;
這種情況是可以轉換的,因為兒子身上有爸爸的所有特徵,或者爸爸的特徵大於兒子,所以參考隱式和強制轉換的寫法,這裡是可以將子類隱式的轉換成父類物件的。
4 person p=new student();
student stu=(studeht)p();
這種情況也是可以的,簡單理解兒子穿了爸爸的衣服,但他始終是兒子。所以接收的是子類的例項對像用父類接受,可以強制轉換成兒子(相遇與兒子脫掉了父親的衣服)
綜合以上的總結只有3和4兩種情況是可以轉換的,但這樣是不是很麻煩呢,我們有跟那個好的辦法在程式設計中處理黎克特制轉換問題,下面我們來介紹is和as關鍵字。
is和as關鍵字返回的都是bool值。和try catch有點像,但這裡用try chach實在用點浪費了
is用法(p is teacher)//p是父類的例項化物件,teacher是待轉換的型別。這個表示式返回bool值
as用法(p as teacher)//as先做判斷,再轉換,如果成功了就真的成功了,不成功返回空
所以一般我們還是用is關鍵字比較多,利用返回的bool值做判斷。
列子:bool c=p is teacher
if(c)
else
c 黎克特制轉換
黎克特制轉換 1.子類可以賦值給父類 1 如果乙個地方需要乙個父類作為引數,我們可以給乙個子類代替 class program console.writeline str console.readkey public class person public class student person ...
C 黎克特制轉換語法
子類可以賦值給父類 子類物件 student stu newstudent 把子類賦值給父類 person p stu 如果乙個父類裝的是子類的物件,那麼父類可以直接強轉成子類 子類物件stu1 student stu1 newstudent 把子類stu1賦值給父類p person p stu1 ...
C 黎克特制轉換原則
person p new teacher teacher t teacher p 如果new的時候是new的是子類,那麼在轉換這個子類的時候可以 t.sayhi person p new teacher student stu student p 如果new的是子類,轉換的時候,轉的另乙個子類,報異...