我,只关心接口
我們去飯店吃飯,坐下。然后叫:服務員!
好,服務員來了。
你會說:倒茶。或說:點菜。是吧。
你不會說:來,我們討論一下什么是面向對象吧。
這是為什么呢?很簡單,對你(顧客)而言,你并不關心來的是男是女,不管他是不是上知天文下知地理,文能安邦物能定國,你只要知道,來的人一定具有點菜這個業務能力。
從代碼來看,
?1????public?interface?IOrder//點菜
?2????{
?3????????void?Enregister();//記錄點菜
?4????????string?Introduce();//介紹菜肴特色
?5????}
?6
?7????public?interface?IMakeTea//泡茶
?8????{
?9????????void?MakeTea();
10????}
11
12????public?interface?ICheckout//買單
13????{?
14????
15????}
16????public?class?Waiter?:?IOrder,?IMakeTea,?ICheckout
17????{?
18????
19????}
?2????{
?3????????public?OperatingRoom(Person?person)
?4????????{?
?5????????
?6????????}
?7????}
?8
?9
10????public?class?ClassRoom//教室
11????{
12????????public?ClassRoom(Person?person)
13????????{?
14????????
15????????}
16????}
17
18????public?class?Office//辦公室
19????{
20????????public?Office(Person?person)
21????????{?
22????????}
23????}
24
25????public?class?Mall//?購物商場
26????{
27????????public?Mall(Person?person)
28????????{?
29????????}????
30????}
你認為會出現什么場景?我們這位多才多藝的大師,會在商場對收銀小姐拿出刀子(void OPS()),在手術室作練習(int Exam()),也就是說Person可以完全的沒有控制的使用任何實現的接口方法,所以我們的代碼要改為
?1????public?class?OperatingRoom//手術室
?2????{
?3????????public?OperatingRoom(IDoctor?doctor)
?4????????{?
?5????????
?6????????}
?7????}
?8
?9????public?class?ClassRoom//教室
10????{
11????????public?ClassRoom(IGaduate?gaduate)
12????????{?
13????????
14????????}
15????}
16
17????public?class?Office//辦公室
18????{
19????????public?Office(IProfessor?professor)
20????????{?
21????????}
22????}
23
24????public?class?Mall//?購物商場
25????{
26????????public?Mall(IConsumer?consumer)
27????????{?
28????????}????
29????}
如此一來,世界就安全的多了。
我們上篇還講到了顯式實現,顯式實現使C#很有意思的特色。
想想,如果我們對Person的所有接口全部都是顯式實現,那會怎么樣呢?
從表面看,他就是一個普普通通的Person,而只有進入了相應的OperatingRoom、ClassRoom、Office、Mall以后,他的相應接口才被體現出來。
就象超人一樣,平時是一個凡人,一旦穿上了S衣服和把內褲穿到外面來,就擁有了ISupperMan的方法,而你呢?你把內褲穿外面來,也不會飛起來,因為你既沒有標準實現也沒有顯式實現ISupperMan。
好,服務員來了。
你會說:倒茶。或說:點菜。是吧。
你不會說:來,我們討論一下什么是面向對象吧。
這是為什么呢?很簡單,對你(顧客)而言,你并不關心來的是男是女,不管他是不是上知天文下知地理,文能安邦物能定國,你只要知道,來的人一定具有點菜這個業務能力。
從代碼來看,
?1????public?interface?IOrder//點菜
?2????{
?3????????void?Enregister();//記錄點菜
?4????????string?Introduce();//介紹菜肴特色
?5????}
?6
?7????public?interface?IMakeTea//泡茶
?8????{
?9????????void?MakeTea();
10????}
11
12????public?interface?ICheckout//買單
13????{?
14????
15????}
16????public?class?Waiter?:?IOrder,?IMakeTea,?ICheckout
17????{?
18????
19????}
你只關心他是不是實現了IOrder接口,其他的統統不關心。
再說一個,公司HR發布招聘信息,要求會C#和SQL Server,ok這也是接口要求,就是說面試的人要實現ICSharp和ISQLServer接口,其他你實現了高級運動員,38紅旗手,3講活用標兵,我統統地不關心。只要你實現了ICSharp和ISQLServer接口就有資格來面試,否則統統亂棒打出。
現在感覺是不錯,但是我們再來想想我們的Person,他實現了IDoctor, IGaduate, IProfessor, IConsumer,啊,真的是多才多藝阿(如果Consumer也算才藝),
不過我們馬上會發現出現以下的場景
?2????{
?3????????public?OperatingRoom(Person?person)
?4????????{?
?5????????
?6????????}
?7????}
?8
?9
10????public?class?ClassRoom//教室
11????{
12????????public?ClassRoom(Person?person)
13????????{?
14????????
15????????}
16????}
17
18????public?class?Office//辦公室
19????{
20????????public?Office(Person?person)
21????????{?
22????????}
23????}
24
25????public?class?Mall//?購物商場
26????{
27????????public?Mall(Person?person)
28????????{?
29????????}????
30????}
你認為會出現什么場景?我們這位多才多藝的大師,會在商場對收銀小姐拿出刀子(void OPS()),在手術室作練習(int Exam()),也就是說Person可以完全的沒有控制的使用任何實現的接口方法,所以我們的代碼要改為
?1????public?class?OperatingRoom//手術室
?2????{
?3????????public?OperatingRoom(IDoctor?doctor)
?4????????{?
?5????????
?6????????}
?7????}
?8
?9????public?class?ClassRoom//教室
10????{
11????????public?ClassRoom(IGaduate?gaduate)
12????????{?
13????????
14????????}
15????}
16
17????public?class?Office//辦公室
18????{
19????????public?Office(IProfessor?professor)
20????????{?
21????????}
22????}
23
24????public?class?Mall//?購物商場
25????{
26????????public?Mall(IConsumer?consumer)
27????????{?
28????????}????
29????}
如此一來,世界就安全的多了。
我們上篇還講到了顯式實現,顯式實現使C#很有意思的特色。
想想,如果我們對Person的所有接口全部都是顯式實現,那會怎么樣呢?
從表面看,他就是一個普普通通的Person,而只有進入了相應的OperatingRoom、ClassRoom、Office、Mall以后,他的相應接口才被體現出來。
就象超人一樣,平時是一個凡人,一旦穿上了S衣服和把內褲穿到外面來,就擁有了ISupperMan的方法,而你呢?你把內褲穿外面來,也不會飛起來,因為你既沒有標準實現也沒有顯式實現ISupperMan。
轉載于:https://www.cnblogs.com/shyleoking/archive/2007/02/16/651764.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: GMapbook中文版上线
- 下一篇: XDJM的情意比山高,比海深!!