1)說明:
c#中在使用繼承的過程中可能會出現子類物件轉換為父類型別使用的情況,這個過程就叫做黎克特制替換原則。多用於將子類物件作為實參傳入形參為父類型別的方法中,進而實現「多型」。
2)擴充套件:
在c++中亦叫做「賦值相容性原則」,同樣是實現多型的主要途徑,其原理是通過虛函式表與vptr指標實現「遲繫結」,進而判斷呼叫具體的函式。
3)應用之一:型別轉換
a. 隱式轉換:子類物件轉換為父類型別可以直接轉;
b. 顯式轉換:父類物件轉換為子類型別必須使用強轉(強制轉換),前提是這個父類變數確實指向的是乙個子類物件。其後果由程式設計師負責。
4)強制轉換的兩種方法:
5)使用as進行強轉的優點:
如果使用前者,轉換不成功會報異常,而使用「as」的話,如果轉換不成功不會報異常而是會返回null。
6)應用之二:作為引數
形參為父類型別,實參為子類物件,方法呼叫時根據實參的實際型別呼叫相應的方法,常用於實現多型。
7)**:
1view codeusing
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;56
namespace
_01黎克特制替換原則720
else
2124
console.readkey();
2526
//*************************===型別轉換2*************************
27//
方法2:as轉換 【一次判斷】
28 person p2 = new
chinese();
29 chinese cn2 = p2 as
chinese;
30console.writeline(cn2.age);
31console.readkey();
3233}34
}35public
class
person
3642
public
intage
4347}48
public
class
chinese:person
4951
}52 }
黎克特制替換原則
黎克特制替換原則 黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍...
黎克特制替換原則
黎克特制替換原則更多的說的是子類與父類的關係的一種原則,子類必須實現父類的所有方法,所有能夠放子類的地方一定能夠放父類。但是這裡的話,我們講有的時候在我們的業務中,有的子類肯定是有個性化的特徵的,比如真槍和玩具槍,真槍能射出子彈,但是玩具槍就不能,那麼這個時候,我們或者通過抽象類,通過抽象類是我們可...
黎克特制替換原則
黎克特制替換原則,主要是乙個關於繼承的規範原則,它要求我們在軟體中寫繼承關係時,所有引用父類的地方必須能夠 透 明地使用其子類物件 子類可以實現父類所提供的抽象 方法,但不要去重寫父類已經實現的方法,或者過載父類的 構 造。要維護繼承的傳遞性,當然很多地方為這個原則打了個 比喻為 龍生龍,鳳生鳳,老...