黎克特制轉換例項
黎克特制轉換原則(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...