亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于接口的問題

https://img1.sycdn.imooc.com//5b7b7e5a000119d402790080.jpg

https://img1.sycdn.imooc.com//5b7b7eac0001a1b103300099.jpg

如果我不在調用方法里面加ICatchMice ic = (ICatchMice)c;這一字段也可以調用接口的抓老鼠和爬樹方法,而加了這一段代碼之后這個ic只能調用抓老鼠這個接口的方法,這不是限制了ic的調用方法的范圍嗎?但是又與c無關,我想問下各位大神這樣做有什么意義呢?謝謝!

正在回答

2 回答

用接口還是用類調用要看具體的使用場景的。

假如有10只不同的寵物,攻城獅A負責收集這10只寵物的叫聲,攻城獅B負責聽這些寵物的聲音來給寵物分類。那么你難道要傳10個不同的寵物類給B嗎,這樣B會打死你的。這個時候,你就要建一個叫的接口集合,把10只寵物都封裝進這個接口集合,把這個接口集合傳給B,B只要循環遍歷接口集合,分別調用這個接口的叫的方法,就能讓不同寵物叫出聲。。。

你可以根據我寫的小代碼然后和我上面的解釋,小小腦補一下。。。

//攻城獅A負責把不同的寵物裝進箱子

? ? ? ? public static List<ICall> GcsA()

? ? ? ? {

? ? ? ? ? ? Pig p = new Pig();

? ? ? ? ? ? Dog d = new Dog();

? ? ? ? ? ? List<ICall> listi = new List<ICall>();

? ? ? ? ? ? listi.Add((ICall)p);

? ? ? ? ? ? listi.Add((ICall)d);

? ? ? ? ? ? return listi;

? ? ? ? }

? ? ? ? static void Main(string[] args)

? ? ? ? {

? ? ? ? ? ? //攻城獅B拿到了10只寵物的箱子,循環讓它門叫

? ? ? ? ? ? List<ICall> listi = GcsA();

? ? ? ? ? ? for (int i = 0; i < listi.Count; i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? Console.WriteLine(listi[i].Call());

? ? ? ? ? ? }

? ? ? ? }

最后說一句,接口一般用于規范,這個規范不僅僅只是對創建者的規范,也是對使用者的規范。B只要寵物的叫聲,那么你還有必要告訴B這些寵物叫什么名字嗎?

6 回復 有任何疑惑可以回復我~

不加ICatchMice ic = (ICatchMice)c;

ic.CatchMice();就沒有辦法使用,這里老師這么寫的目的應該是為了剛好的向學生展示這種調用方法的限制范圍

0 回復 有任何疑惑可以回復我~
#1

星辰的淚 提問者

那為何不直接用c.CatchMice();直接調用抓老鼠的這個方法呢?這不是多此一舉嗎?我就是這一點沒想明白
2018-08-21 回復 有任何疑惑可以回復我~
#2

慕粉1026331268 回復 星辰的淚 提問者

就是為了限定范圍,你樓上已經講的很詳細了,限定范圍就可以減少代碼開銷
2019-07-21 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C#面向對象編程
  • 參與學習       69207    人
  • 解答問題       160    個

本系列教程主要是,帶你學習C#面向對象編程的編程思想、編程技巧

進入課程

關于接口的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號