【C# interface接口】对接口的理解、接口的使用方式(最通俗的解释)
我們為什么需要使用接口
比如說,我定義了一個Animal父類。
class Animal{public virtual void likeFood(){Console.WriteLine("我是Animal類");}}現在,有3個子類。子類繼承父類Animal,分別叫:Dog, Cat, Monkey
Dog
class Dog : Animal{public override void likeFood(){Console.WriteLine("我是小狗,我喜歡吃肉");}}Cat
class Cat : Animal{public override void likeFood(){Console.WriteLine("我是小貓,我喜歡吃魚");}}Monkey
class Monkey : Animal{public override void likeFood(){Console.WriteLine("我是猴子,我喜歡吃桃子");}}有一個公園的管理員Zoo
class Zoo{public void show(Animal animal){animal.likeFood();}}現在,管理員Zoo想知道每個Animal喜歡的食物likeFood
管理員只需要使用zoo.show(動物),即可調用子類中重寫的likeFood()函數
public static void Main(string[] args){Zoo zoo = new Zoo(); //公園管理員Dog dog = new Dog();Cat cat = new Cat();Monkey monkey = new Monkey();zoo.show(dog); //"我是小狗,我喜歡吃肉"zoo.show(cat); //"我是小狗,我喜歡吃肉"zoo.show(monkey); //"我是猴子,我喜歡吃桃子"}但是問題來了
有一天,新來了一個動物:Rabbit
雖然這個動物寫了Rabbit類,但是他并不知道,你們之前約定的動物喜歡的食物命名為:likeFood()
Rabbit類里面的方法叫:favoriteFood(),而沒有像其他動物那樣重寫父類的方法likeFood()
公園管理人員發現,問題在于:缺少一種約束,使得子類繼承父類的時候必須實現父類的方法。
那么,有沒有一個類,能讓它的子類必須實現它定義的方法?
有,那就是接口。
于是,管理人員修改Animal為接口,代碼如下:
interface Animal{void LikeFood();}- 為了遵守接口命名規范,此處把之前所有的likeFood改為LikeFood首字母大寫
由于Animal接口有個likeFood()方法,那么Rabbit子類去使用Animal接口的時候,必須也實現likeFood(),否則程序不能通過。
這就是接口的作用。
運行結果
我是小狗,我喜歡吃肉
我是小貓,我喜歡吃魚
我是猴子,我喜歡吃桃子
代碼正常工作,因為Animal是接口,里面有個likeFood()方法,以后再添加各種動物進來,只需要實現Animal接口,并且也不會出現有的人會因為子類的方法命名問題而導致出錯了。
雖然用繼承一個普通父類也可以滿足要求,但是一個普通父類根本沒有約束力。
而用了接口就不一樣了:子類必須實現父類的所有方法,因為Zoo類里調用的是likeFood(),由于子類必須實現父類,那么所有子類都會有likeFood(),你根本不用擔心子類有沒有這個方法。
所以,接口能在多人協作下,定義一系列方法,讓子類必須存在接口定義的類,防止在另外的類里調用一個人寫的接口的子類時,找不到方法的問題。
完整代碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{public static void Main(string[] args){Zoo zoo = new Zoo();Dog dog = new Dog();Cat cat = new Cat();Monkey monkey = new Monkey();zoo.show(dog); //"我是小狗,我喜歡吃肉"zoo.show(cat); //"我是小狗,我喜歡吃肉"zoo.show(monkey); //"我是猴子,我喜歡吃桃子"}}interface Animal{void LikeFood();}class Dog : Animal{public void LikeFood(){Console.WriteLine("我是小狗,我喜歡吃肉");}}class Cat : Animal{public void LikeFood(){Console.WriteLine("我是小貓,我喜歡吃魚");}}class Monkey : Animal{public void LikeFood(){Console.WriteLine("我是猴子,我喜歡吃桃子");}}class Rabbit : Animal{public void LikeFood(){Console.WriteLine("我是兔子,我喜歡吃蘿卜");}}class Zoo{public void show(Animal animal){animal.LikeFood();}} }- 參考博文:C# 接口《通俗解釋》
總結
以上是生活随笔為你收集整理的【C# interface接口】对接口的理解、接口的使用方式(最通俗的解释)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#继承与多态 virtual虚方法的使
- 下一篇: 【C# interface接口】模拟MP