C 學習筆記14 黎克特制轉換

2021-10-03 02:45:10 字數 1902 閱讀 4175

黎克特制轉換例項

黎克特制轉換原則(liskov substitution principle,lsp)物件導向設計的基本原則之一。 黎克特制轉換原則中說,任何父類可以出現的地方,子類一定可以出現。

黎克特制轉換,實質上就是型別的轉換,在學c#過程中,我們一定經歷過型別轉換,如將int轉換為double等,那麼黎克特制轉換,就是實現類中的型別轉換,從而實現設計的封閉性。

1)子類可以賦值給父類

如果有乙個地方需要用父類作為引數,我們可以用乙個子類代替

如:c#學習筆記11-繼承的基本概念中提到的父類person,子類studentinfo、teacherinfo等,那麼在建立物件過程中,可以用子類來代替

person p=

newstudentinfo()

;

2)如果父類中裝的是子類,那麼可以將這個父類強轉為子類

person p2 =

newstudent();

student s1 =

(student)p2;

子類物件可以呼叫父類的成員,但是父類物件不可以呼叫子類的成員

is表示型別轉換,如果能夠轉換成功,返回乙個true,否則返回false

student s =

newstudent()

;person p = s;

//子類可以賦值給父類

if(p is teacher)

else

as表明型別轉換,如果能夠轉換,則返回對應物件,否則返回null

person p2 =

newteacher()

;//子類賦值給父類

teacher s4 = p2 as teacher;

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace _02黎克特制轉換練習

}//父類不能呼叫子類的成員,所以需要進行強制轉換

for(

int i =

0; i < p1.length; i++

)else

if(p1[i]

is teacher)

else

if(p1[i]

is shuaiguo)

else

if(p1[i]

is meilv)

else

if(p1[i]

is animal)

else

} console.

readkey()

;}public

class

person

public

void

sayhello()

}public

class

student

:person

}public

class

teacher

:person

}public

class

shuaiguo

:person

}public

class

meilv

:person

}public

class

animal

:person}}

}

:後面的多型可以更加簡單的實現該功能,敬請期待哦

C 基礎(15) 黎克特制轉換 protected

1 子類可以賦值給父類,如果乙個地方需要父類作為引數,可將子類放進去 string s string.join new string personinfo p new reporter ale 23,play 2 如果父類中裝的是子類物件,那麼可以將這個父類強轉為對應子類物件 personinfo ...

c 基礎 繼承 11 黎克特制替換原則

c 中只能單繼承。概念 父類容器裝子類物件 作用 方便對子類物件的管理 使用 1.is 判斷乙個物件是否是指定類物件,是返回true,不是返回false 2.as 將乙個物件轉化為指定類物件 例子 class gameobject class animal gameobject class tree...

Laravel深入學習10 黎克特制替換原則

別擔心,黎克特制替換原則實際上比他的名字好理解。他是指任何在任何接受抽象化類的地方其實現也被接受。通俗的講,類中使用介面實現的地方,不需要修改 對於任意的介面實現類都將能使用。黎克特制替換原則 該原則表示,程式中對於例項化物件的子型別,不需要修改 可以直接進行替換。我們繼續拿orderprocess...