C# 接口介紹


.NET學習資料

.NET學習資料

.NET學習資料


一、接口的定義

在 C# 中,接口是一種特殊的抽象類型,它定義了一組方法簽名,但不包含方法的實現。接口使用interface關鍵字來聲明。例如,定義一個表示形狀的接口IShape:

interface IShape
{double Area();double Perimeter();
}

在這個接口中,定義了Area和Perimeter兩個方法,但沒有給出具體的實現代碼,這兩個方法僅僅是方法簽名,用于規范實現該接口的類型必須具備的行為。

二、接口的使用示例

接口不能直接實例化,需要由類或結構體來實現。下面通過一個Circle類實現IShape接口來展示其用法:

class Circle : IShape
{private double radius;public Circle(double radius){this.radius = radius;}public double Area(){return Math.PI * radius * radius;}public double Perimeter(){return 2 * Math.PI * radius;}
}

在上述代碼中,Circle類通過: IShape語法表示實現了IShape接口,并提供了Area和Perimeter方法的具體實現。可以通過以下方式測試:

class Program
{static void Main(){Circle circle = new Circle(5);Console.WriteLine($"圓的面積: {circle.Area()}");Console.WriteLine($"圓的周長: {circle.Perimeter()}");}
}

這段代碼創建了一個半徑為 5 的圓,然后調用其實現的接口方法來計算并輸出面積和周長。

三、C# 接口的特點

(一)完全抽象

接口只包含方法、屬性、索引器和事件的聲明,不包含任何實現代碼。這使得接口成為一種純粹的行為契約,實現接口的類型必須提供接口中所有成員的具體實現。

(二)多繼承能力

C# 類不支持多重繼承,但一個類可以實現多個接口。這為實現復雜的功能提供了靈活性。例如,一個類可以同時實現IComparable(用于比較)和IDisposable(用于資源釋放)接口,從而具備多種不同的行為。

(三)接口成員訪問修飾符

接口成員默認是公共的,并且不能使用任何訪問修飾符(如public、private、protected等)來修飾。這是因為接口的目的是提供一種公共的契約,所有實現接口的類型都必須遵循這個契約。

(四)接口可以繼承其他接口

一個接口可以從一個或多個其他接口繼承。例如:

interface IAdvancedShape : IShape
{void Draw();
}

這里IAdvancedShape接口繼承了IShape接口,同時增加了一個Draw方法。實現IAdvancedShape接口的類型必須實現IShape接口的所有成員以及IAdvancedShape接口新增的Draw方法。

(五)接口與抽象類的區別

抽象類可以包含實現代碼和抽象成員,而接口只能包含抽象成員聲明:抽象類可以為某些方法提供默認實現,子類可以繼承并根據需要重寫這些方法;而接口的所有成員都需要由實現類型來實現。

抽象類只能被一個類繼承,而一個類可以實現多個接口:這使得接口在需要實現多種不同行為時更具優勢。

抽象類可以有構造函數,而接口沒有構造函數:因為接口只是一種行為定義,不涉及對象的創建和初始化。

四、接口的應用場景

(一)定義通用行為

在開發框架或庫時,接口常用于定義一組通用的行為。例如,在ASP.NET Core 中,IEnumerable接口定義了對集合進行迭代的行為,許多集合類型(如List、Array等)都實現了這個接口,使得它們可以在各種需要迭代的場景中統一使用。

(二)實現多態性

通過接口實現多態性,使得不同類型的對象可以根據其自身的實現來響應相同的方法調用。例如,不同的圖形類(如Circle、Rectangle、Triangle等)都實現IShape接口,在需要計算圖形面積或周長時,可以統一調用接口方法,而不需要關心具體的圖形類型。

(三)依賴注入

在依賴注入模式中,接口起著關鍵作用。通過接口定義依賴關系,而不是依賴具體的實現類,可以提高代碼的可測試性和可維護性。例如,在一個服務類中,通過接口依賴另一個服務,在測試時可以很容易地提供一個模擬實現來替代真實的服務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894614.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894614.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt常用控件 多元素控件

文章目錄 1. QListWidget1.1 常用屬性和方法1.2 常用信號1.4 例子1,操作元素 2. QTableWidget2.1 常用屬性和方法2.2 常用信號2.3 例子1,創建表格3.1 常用屬性和方法3.2 常用信號3.3 例子1,創建樹形結構 Qt中提供的多元素控件有: QListWidget…

2. 動態測試

一、動態測試是什么? 動態測試(Dynamic Test)允許在運行時生成測試用例,而不是在編譯時通過 Test 靜態定義。它通過 TestFactory 注解標記的方法動態生成一組測試用例,適用于需要靈活生成測試場景的場景。 核心特點&…

33.Word:國家中長期人才發展規劃綱要【33】

目錄 NO1.2樣式? NO3? 圖表 ? NO4.5.6? 開始→段落標記視圖→導航窗格→檢查有無遺漏 NO1.2樣式 F12/另存為:Word.docx:考生文件夾樣式的復制樣式的修改 樣式的應用(沒有相似/超級多的情況下)——替換 [ ]通配符&#x…

Qt展廳播放器/多媒體播放器/中控播放器/幀同步播放器/硬解播放器/監控播放器

一、前言說明 音視頻開發除了應用在安防監控、視頻網站、各種流媒體app開發之外,還有一個小眾的市場,那就是多媒體展廳場景,這個場景目前處于壟斷地位的軟件是HirenderS3,做的非常早而且非常全面,都是通用的需求&…

2021版小程序開發5——小程序項目開發實踐(1)

2021版小程序開發5——小程序項目開發實踐(1) 學習筆記 2025 使用uni-app開發一個電商項目; Hbuidler 首選uni-app官方推薦工具:https://www.dcloud.io/hbuilderx.htmlhttps://dev.dcloud.net.cn/pages/app/list 微信小程序 管理后臺:htt…

【零拷貝】

目錄 一:了解IO基礎概念 二:數據流動的層次結構 三:零拷貝 1.傳統IO文件讀寫 2.mmap 零拷貝技術 3.sendFile 零拷貝技術 一:了解IO基礎概念 理解CPU拷貝和DMA拷貝 ? 我們知道,操作系統對于內存空間&…

全棧開發:使用.NET Core WebAPI構建前后端分離的核心技巧(一)

目錄 cors解決跨域 依賴注入使用 分層服務注冊 緩存方法使用 內存緩存使用 緩存過期清理 緩存存在問題 分布式的緩存 cors解決跨域 前后端分離已經成為一種越來越流行的架構模式,由于跨域資源共享(cors)是瀏覽器的一種安全機制,它會阻止前端應用…

《Linux服務與安全管理》| 數據庫服務器安裝和配置

《Linux服務與安全管理》| 數據庫服務器安裝和配置 目錄 《Linux服務與安全管理》| 數據庫服務器安裝和配置 任務一: 安裝PostgreSQL數據庫,設置遠程登錄,客戶端可以成功登錄并操作數據庫。 任務二: 安裝MySQL數據庫&#xf…

Linux系統之whereis命令的基本使用

Linux系統之whereis命令的基本使用 一、whereis命令介紹二、whereis命令的使用幫助2.1 whereis命令的幫助信息2.2 whereis命令幫助解釋 三、whereis命令的基本使用3.1 查找命令的位置3.2 僅查找二進制文件3.3 僅查找手冊頁3.4 輸出實際使用的查找路徑3.5 指定自定義搜索路徑 四…

Autosar-以太網是怎么運行的?(Davinci配置部分)

寫在前面: 入行一段時間了,基于個人理解整理一些東西,如有錯誤,歡迎各位大佬評論區指正!!! 目錄 1.Autosar ETH通訊軟件架構 2.Ethernet MCAL配置 2.1配置對應Pin屬性 2.2配置TXD引腳 2.3配…

2024年度總結

首先,我是在2023年結束高中生涯進入大學的,難免會有固化的“高中生”思維,我等著老師的安排,看著課表上課,跟著時間吃飯,睡覺,偶爾會熬夜,但整體跟高中沒差太多。我對社團沒興趣&…

【Block總結】CSAM,包含分割、關鍵點、切分等均適用!|即插即用

論文信息 標題: CSAM: A 2.5D Cross-Slice Attention Module for Anisotropic Volumetric Medical Image Segmentation 論文鏈接: https://arxiv.org/pdf/2311.04942 GitHub鏈接: https://github.com/aL3x-O-o-Hung/CSAM 創新點 CSAM(跨切片注意力模塊&#xff…

解決PyG安裝中torch-sparse安裝失敗問題:詳細指南

1 問題描述 最近在學習GNN,需要使用PyTorch Geometric(PyG)庫。在安裝PyG的過程中,遇到了torch-sparse安裝失敗的問題,錯誤提示為: ERROR: Failed building wheel for torch-sparse本文將詳細記錄問題的解…

鳥哥Linux私房菜筆記(三)

鳥哥Linux私房菜筆記(三) 該第三部分和第四部分主要為原書的第十一章(正則表達式與文件格式化處理),第十二章學習shell腳本,第十六章(進程管理與SElinux初探部分),第十七…

學習日記-250203

一.論文 看師兄寫好的一稿。 二、計劃: 繼續看論文里的問題。 然后繼續看promptCD相關,明天要看論文啦,今天家里有些事比較忙(碎碎念) 三. )——( 注冊了 openreview,ORCID,Google scholar&…

python學opencv|讀取圖像(五十四)使用cv2.blur()函數實現圖像像素均值處理

【1】引言 前序學習進程中,對圖像的操作均基于各個像素點上的BGR值不同而展開。 對于彩色圖像,每個像素點上的BGR值為三個整數,因為是三通道圖像;對于灰度圖像,各個像素上的BGR值是一個整數,因為這是單通…

Kafka ACL(訪問控制列表)介紹

文章目錄 Kafka ACL(訪問控制列表)介紹1. Kafka ACL 的基本概念1.1 Kafka ACL 的目標1.2 Kafka ACL 的組成部分 2. Kafka 支持的資源類型2.1 Topic(主題)2.2 Consumer Group(消費者組)2.3 Cluster&#xff…

在 WSL2 中重啟 Ubuntu 實例

在 WSL2 中重啟 Ubuntu 實例,可以按照以下步驟操作: 方法 1: 使用 wsl 命令 關閉 Ubuntu 實例: 打開 PowerShell 或命令提示符,運行以下命令: wsl --shutdown這會關閉所有 WSL2 實例。 重新啟動 Ubuntu: 再次打開 Ubuntu&#x…

Spring Boot 2 快速教程:WebFlux處理流程(五)

WebFlux請求處理流程 下面是spring mvc的請求處理流程 具體步驟: 第一步:發起請求到前端控制器(DispatcherServlet) 第二步:前端控制器請求HandlerMapping查找 Handler (可以根據xml配置、注解進行查找) 匹配條件包括…

小程序設計和開發:如何研究同類型小程序的優點和不足。

一、確定研究目標和范圍 明確研究目的 在開始研究同類型小程序之前,首先需要明確研究的目的。是為了改進自己的小程序設計和開發,還是為了了解市場趨勢和用戶需求?不同的研究目的會影響研究的方法和重點。例如,如果研究目的是為了…