C# 接口interface的實(shí)現(xiàn)(多接口、同名沖突、繼承+接口)
一、接口 核心概念
接口(interface):是一套行為規(guī)范/標(biāo)準(zhǔn),只定義成員聲明,不寫(xiě)實(shí)現(xiàn)。
類/結(jié)構(gòu)體實(shí)現(xiàn)接口,必須實(shí)現(xiàn)接口中所有成員。
接口核心特點(diǎn)(必考)
- 接口 不能實(shí)例化
- 接口中所有成員 默認(rèn)是公共、未實(shí)現(xiàn)
- 接口 支持多實(shí)現(xiàn)(多繼承)(解決類單繼承問(wèn)題)
- 接口只包含:屬性、方法、事件、索引器(不能有字段)
- 接口命名規(guī)范:以 I 大寫(xiě)開(kāi)頭(IBook、IPaper、IPeople)
二、基礎(chǔ)語(yǔ)法與定義
1. 接口定義
//書(shū)的接口:規(guī)范書(shū)本必須擁有的屬性和方法
interface IBook
{
int Id { get; set; }
int Name { get; set; }
void F1();
}
//紙張的接口:規(guī)范紙張必須擁有的屬性和方法
interface IPaper
{
string color { get; set; }
void F2();
}
2. 關(guān)鍵字區(qū)分(超級(jí)重點(diǎn))
- 類 : 類 → 叫 繼承(單繼承)
- 類 : 接口 → 叫 實(shí)現(xiàn)(多實(shí)現(xiàn))
三、多接口實(shí)現(xiàn)(一個(gè)類實(shí)現(xiàn)多個(gè)接口)
C# 類只能單繼承,但可以實(shí)現(xiàn)無(wú)數(shù)個(gè)接口,解決多繼承問(wèn)題。
完整實(shí)現(xiàn)代碼
// Book類 同時(shí)實(shí)現(xiàn) IBook、IPaper 兩個(gè)接口
class Book : IBook, IPaper
{
// 實(shí)現(xiàn)IBook接口屬性
public int Id { get; set; }
public int Name { get; set; }
// 實(shí)現(xiàn)IPaper接口屬性
public string color { get; set; }
// 實(shí)現(xiàn)IBook方法
public void F1()
{
}
// 實(shí)現(xiàn)IPaper方法
public void F2()
{
}
// 類自己的擴(kuò)展屬性(接口沒(méi)有)
public string StudentId { get; set; }
}
規(guī)則
實(shí)現(xiàn)多個(gè)接口時(shí),必須重寫(xiě)/實(shí)現(xiàn)所有接口的所有屬性和方法,缺一不可。
四、接口同名成員沖突問(wèn)題(重點(diǎn)難點(diǎn))
1. 場(chǎng)景介紹
父類 Book 中已經(jīng)存在 StudentId 屬性
新接口 IPeople 中也定義了同名 StudentId 屬性
interface IPeople
{
string StudentId { get; set; }
}
2. 子類繼承父類 + 實(shí)現(xiàn)接口
SmallBook 繼承 Book、同時(shí)實(shí)現(xiàn) IPeople
class SmallBook : Book, IPeople
{
// 父類Book已經(jīng)有StudentId
// 滿足接口IPeople的成員要求,所以【不用重復(fù)實(shí)現(xiàn)】
// 如果想要重新實(shí)現(xiàn)接口、覆蓋父類屬性,需要加 new
public new string StudentId { get; set; }
}
核心規(guī)則(必背)
- 如果父類已經(jīng)擁有和接口同名同返回值的成員
- 子類繼承父類后,默認(rèn)自動(dòng)滿足接口要求,不需要重寫(xiě)
- 如果想要重新實(shí)現(xiàn)、覆蓋父類成員,使用 new 隱藏
五、接口 VS 抽象類(高頻面試)
- 接口:全是抽象規(guī)則(無(wú)實(shí)現(xiàn)),支持多實(shí)現(xiàn)
- 抽象類:可以有普通成員、抽象成員,只能單繼承
六、完整可運(yùn)行測(cè)試代碼(我?guī)湍阊a(bǔ)全 Main 調(diào)用)
internal class Program
{
static void Main(string[] args)
{
// 1. 實(shí)例化實(shí)現(xiàn)多接口的類
Book b = new Book();
b.Id = 1;
b.Name = 1001;
b.color = "白色";
b.StudentId = "S1001";
b.F1();
b.F2();
// 2. 子類繼承父類 + 實(shí)現(xiàn)新接口
SmallBook sb = new SmallBook();
sb.StudentId = "S2002"; // new 新屬性
Console.WriteLine("Book顏色:" + b.color);
Console.WriteLine("子類StudentId:" + sb.StudentId);
}
}
七、滿分必考總結(jié)
- 接口 不能 new、不能實(shí)例化
- 接口 全部成員默認(rèn)公共、無(wú)實(shí)現(xiàn)
- 類實(shí)現(xiàn)接口 必須實(shí)現(xiàn)全部成員
- 類支持 多接口實(shí)現(xiàn),只能單類繼承
- 父類已有同名成員,子類實(shí)現(xiàn)接口可免實(shí)現(xiàn)
- 想要覆蓋父類成員,使用 new 關(guān)鍵字隱藏
八、背誦口訣
接口定規(guī)范,無(wú)體不能實(shí)例化;單類繼承多接口,父有同名不用寫(xiě);想要覆蓋加 new,多態(tài)擴(kuò)展最靈活
到此這篇關(guān)于C# 接口interface的實(shí)現(xiàn)(多接口、同名沖突、繼承+接口)的文章就介紹到這了,更多相關(guān)C# 接口interface內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
同步調(diào)用和異步調(diào)用WebService
本文給大家介紹webservice同步調(diào)用和異步調(diào)用,同步調(diào)用就是一個(gè)同步操作會(huì)阻塞整個(gè)當(dāng)前的進(jìn)程,直到這個(gè)操作完成才能執(zhí)行下一段代碼,異步調(diào)用不會(huì)阻塞啟動(dòng)操作的調(diào)用線程,調(diào)用程序必須通過(guò)輪流檢測(cè),或者等待完成信號(hào)來(lái)發(fā)現(xiàn)調(diào)用的完成。小伙伴們跟著小編一起學(xué)習(xí)2015-09-09
C#調(diào)用執(zhí)行命令行窗口(CMD)的方法與技巧
在 C# 的編程世界里,我們常常會(huì)遇到需要與操作系統(tǒng)底層進(jìn)行交互的場(chǎng)景,這時(shí),調(diào)用命令行窗口(CMD)就成為了一個(gè)強(qiáng)大的工具,通過(guò) C# 調(diào)用 CMD 都能為我們提供極大的便利,極大地拓展了 C# 應(yīng)用程序的功能邊界,本文介紹了C#中調(diào)用執(zhí)行CMD的方法與技巧2025-01-01
C#使用Post調(diào)用接口并傳遞json參數(shù)
這篇文章主要介紹了C#使用Post調(diào)用接口并傳遞json參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-06-06
C#實(shí)現(xiàn)鬧鐘AlarmClock實(shí)例代碼
這篇文章主要介紹了C#實(shí)現(xiàn)鬧鐘AlarmClock實(shí)例代碼,很實(shí)用的功能,需要的朋友可以參考下2014-08-08
C#小知識(shí)之有趣的類型靜態(tài)構(gòu)造器
這篇文章主要介紹了C#小知識(shí)之有趣的類型靜態(tài)構(gòu)造器,本文直接給分實(shí)例代碼,然后分析了C#中的這一個(gè)有趣的現(xiàn)象,需要的朋友可以參考下2015-04-04

