日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

【C# interface接口】对接口的理解、接口的使用方式(最通俗的解释)

發布時間:2024/2/28 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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()

class Rabbit : Animal{public void favoriteFood(){Console.WriteLine("我是兔子,我喜歡吃蘿卜");}}

公園管理人員發現,問題在于:缺少一種約束,使得子類繼承父類的時候必須實現父類的方法

那么,有沒有一個類,能讓它的子類必須實現它定義的方法?

有,那就是接口

于是,管理人員修改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接口】对接口的理解、接口的使用方式(最通俗的解释)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。