第一階段C#基礎-13:索引器,接口,泛型

1_索引器

(1)索引器是C#中一個強大而實用的特性,允許像訪問數組一樣訪問類的成員

(2)索引器:一種可以讓我們使用索引來訪問對象的一種方法,是一組get,set訪問器,與屬性類似,但不同,索引器使用索引運算符[]而非點運算符.訪問

(3)格式:public 返回值類型,this[索引器數據類型 索引]

(4)獲取數據使用get訪問,獲取數據時set執行

class ClassRoom{public string No { get; set; }private List<Student> students= new List<Student>();public void MyAdd(Student s){students.Add(s);}public Student this[int index]{ get{ Console.WriteLine("index="+index);return students[index];} ?set{ ? ? ? ? ? ? ? ?Console.WriteLine("value=========" + value);students[index] = value;}}public Student this[string n]{get{/* for(int i = 0; i < students.Count; i++){if (students[i].Name == n){return students[i];} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}return null;*/return students.Find(s => s.Name == n);}}
?}

2_接口

(1)接口:沒有實現的合同,契約,規則,是定義一組成員,而不對成員進行實現的引用類型,只能被類和結構體所繼承,類和結構體實現接口的時候,必須實現接口中定義的所有成員

(2)接口是一種規范,不具備存儲數據和定義方法的能力,類和結構體繼承這個接口就要以這個接口為準,進行一一實現,具體怎么實現由類和結構體決定

(3)接口:規則,指定應該有什么;類和結構體:實現規則,具體應該有什么

(4)接口一般以I開頭:格式:interface 接口的名稱{成員}

(5)接口成員不能加訪問修飾符,方法不能有方法體

(6):的作用:類的繼承、接口的實現

(7)類的實現中,可以擁有更多的成員,但不能少

(8)當父類已經實現了接口,當子類再次繼承咸通的接口,子類可以不用實現接口成員,也可以重寫

(9)當基類和接口擁有相同的屬性名和方法的時候,派生類不需要自己實現,也可以使用new關鍵字重新實現

interface IPeople{string Name { get; set; }char Sex { get; set; }int Age { get; set; }}interface IStudnt{string StudentNo { get; set; }int Age { get; set; }
?}class People : IPeople, IStudnt{public string Name { get; set; }public string StudentNo { get; set; }public int Age { get; set; }public char Sex { get; set; }}//父類已經實現了接口,子類再次繼承相同接口可以不需要實現接口成員,也可以重寫,//當基類和接口中擁有同名的屬性和方法的時候,派生類不需要自己實現,也可以使用new關鍵字重新實現class Student : People, IStudnt{//重新實現public new int Age { get; set; }}

3_多接口

(1)當一個類實現了多個接口的時候,如果多個接口擁有相同的屬性,只需要實現一個即可

(2)如果多個接口擁有不同類型但數據名相同的屬性,需要顯示實現接口中的屬性;顯示實現接口,不需要也不能添加訪問修飾符,訪問這個成員的時候需要將對象標記為對應的接口類型

(3)因為方法可以重載,所以直接重載兩個接口中的方法即可

internal class Program{static void Main(string[] args){Test test = new Test();//  test.CIA t1 = new Test();t1.C = 12;}}interface IA{string A { get; set; }string B { get; set; }int C { get; set; }void Fn(int v);}interface IB{string B { get; set; }string C { get; set; }string D { get; set; }void Fn(string v);}class Test : IA, IB{public string A { get; set; }//當一個類實現了多個接口的時候,如果多個接口擁有相同的屬性,只需要實現一個即可public string B { get; set; }//如果多個接口擁有不同類類型但是名稱相同的屬性,需要顯示實現接口中的屬性//顯式實現接口 不需要也不能添加訪問修飾符  這個成員的訪問,需要將對象標記為對應的接口類型int IA.C { get; set; }string IB.C { get; set; }public string D { get; set; }
?//因為方法可以重載,所有直接重載兩個接口中的方法即可public void Fn(int v){}public void Fn(string v){}
?}

4_接口的繼承

(1)一個類實現一個接口的時候,如果接口(B)繼承了另一個接口(A),這個類就必須實現A和B里面的所有成員

(2)接口與抽象類的異同

①:相同點:1、抽象類和接口都不能實例化 2、都可以包含未實現的方法,有派生類實現

②:不同點:

抽象類可以包含非抽象方法,接口不能包含抽象成員

一個類只能繼承一個抽象類,但可以實現多個接口

抽象類的派生類需要使用override覆寫類的成員,接口派生直接覆寫

抽象類包含訪問修飾符,接口不能有訪問修飾符

抽象類可以包含屬性,方法字段;接口可以包含屬性和方法

5_泛型

(1)泛型:不固定數據類型,廣泛的類型,泛型可以讓不同數據類型支持相同的業務邏輯

(2)默認情況下在定義方法時就需要指定類型,通過泛型可以把指定類型延遲到方法調用的時候

(3)泛型方法:在方法名后面添加<>,里面相當于類型的形參列表

(4)泛型的命名規范:以T開頭的單詞,盡量表達出這個類型的作用,如果使用一個單詞作為方法,建議使用T

(5)泛型方法在調用的時候指定數據類型,方法的返回值也可以用泛型;再調用方法的時候,泛型的指定可以省略,C#會自動根據實參推斷類型

Fn<int>(123);//明確23<T>的數據類型.
Fn<string>("aaaaa");
Fn<bool>(true);
//類型的指定是可以省略的,C#會自動根據實參推斷類型
Fn(123);
Fn("4444");
?
public static void Fn<T>(T i)
{Console.WriteLine(i);
}
//返回值也可使用泛型
public static T Fn1<T>(T i, T[] arr)
{return i;
}
public static Test1 Fn2<Test1,Test2>(Test1 i, Test2[] arr)
{return i;
}
public static int Fn3<Test1, Test2>(Test1 i, Test2[] arr)
{return 1;
} ? 

6_泛型的使用

(1)泛型類:Cal3c<T> : ICalc<T>泛型接口中的泛型的類型,使用的是泛型類中定義的類型(即泛型是什么類型,接口就是什么類型)

(2)default 默認的,default(T)得到T的默認值

(3)泛型方法在調用的時候指定類型;泛型接口在實現的時候指定類型;泛型類實例化的時候指定類型

 class Cal3c<T> : ICalc<T>{public T Add(T a, T b){//return a + b;//報錯,//T 未知類型,指所有的類型,并不是所有的數據類型都重載了+運算符,所以報錯
?//default 默認的 default(T)得到T的默認值return default(T);}public T Sub(T a, T b){throw new NotImplementedException();}}

7_泛型的約束

(1)聲明泛型方法,泛型接口,泛型類的時候,可以通過添加約束讓這個泛型不那么廣泛

(1)where T:struct 約束 T只能是值類型

public static void Fn2<T>(T v)where T:struct{}

(2)where T: calss 約束T只能是引用類型

 public static void Fn3<T>(T v) where T : class{}

(3)where T :new() 約束泛型必須是一個類,并擁有無參構造方法

public static void Fn4<T>(T v) where T : new(){}

(4)where T : Peopele 約束泛型只能是這個類或者這個類的子類

public static void Fn5<T>(T v) where T : People{}

(5)where T : IPeople 約束泛型必須是實現了這個接口類或者這個類的子類

public static void Fn6<T>(T v) where T : IPeople

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

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

相關文章

SQL-leetcode— 2356. 每位教師所教授的科目種類的數量

2356. 每位教師所教授的科目種類的數量 表: Teacher ----------------- | Column Name | Type | ----------------- | teacher_id | int | | subject_id | int | | dept_id | int | ----------------- 在 SQL 中&#xff0c;(subject_id, dept_id) 是該表的主鍵。 該表…

基于單片機溫控風扇設計/PWM調速風扇/智能風扇

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 該設計基于單片機實現智能溫控風扇系統&#xff0c;通過溫度傳感器實時監測環境溫度&#xff0c;…

【datawhale組隊學習】RAG技術 - TASK02

教程地址&#xff1a;https://github.com/datawhalechina/all-in-rag/ 感謝datawhale的教程&#xff0c;以下筆記大部分內容來自該教程 文章目錄基于LangChain框架的RAG實現初始化設置數據準備索引構建查詢與檢索生成集成低代碼&#xff08;基于LlamaIndex&#xff09;conda ac…

Mitt 事件發射器完全指南:200字節的輕量級解決方案

簡介 Mitt 是一個輕量級的事件發射器庫&#xff0c;體積小巧&#xff08;約 200 字節&#xff09;&#xff0c;無依賴&#xff0c;支持 TypeScript。它提供了簡單而強大的事件發布/訂閱機制&#xff0c;適用于組件間通信、狀態管理等場景。 特點 &#x1f680; 超輕量級&…

數據庫鎖與死鎖-筆記

一、概述 數據庫是一個共享資源,可以供給多個用戶使用。運行多個用戶同時使用一個數據庫的數據系統統稱多用戶數據庫系統。例如,飛機訂票數據庫系統。在這樣的一個系統中,在同一時刻并發運行的事務數可達數百上千個。 當多個用戶并發地存取數據庫時就會產生多個事務同時存…

滲透藝術系列之Laravel框架(二)

任何軟件&#xff0c;都會存在安全漏洞&#xff0c;我們應該將攻擊成本不斷提高&#xff01;?**——服務容器與中間件的攻防博弈**?本文章僅提供學習&#xff0c;切勿將其用于不法手段&#xff01;一、服務容器的"依賴注入陷阱"1.1 接口綁定的"影子服務"…

官網SSO登錄系統的企業架構設計全過程

第一階段&#xff1a;架構愿景與業務架構設計 (Architecture Vision & Business Architecture) 任何架構的起點都必須是業務目標和需求。 1.1 核心業務目標 (Business Goals) 提升用戶體驗&#xff1a;用戶一次登錄&#xff0c;即可無縫訪問集團下所有子公司的官網和應用&a…

2025世界機器人大會:中國制造“人形時代”爆發

2025世界機器人博覽會8月8日在北京亦莊開幕&#xff0c;主題為“讓機器人更智慧&#xff0c;讓具身體更智能”&#xff0c;匯聚全球200余家企業、1500余件展品&#xff0c;其中首發新品超100款&#xff0c;人形機器人整機企業參展數量創同類展會之最。 除了機器人本體外&#…

Oracle 庫定期備份表結構元數據信息至目標端備份腳本

一、背景描述當前 xxx 項目 Oracle 11g RAC 庫缺少 DG&#xff0c;并且日常沒有備份&#xff0c;存在服務器或存儲損壞&#xff0c;數據或表結構存在丟失風險&#xff0c;在和項目組同步后&#xff0c;項目組反饋可對該數據庫定期備份相關結構信息&#xff0c;如存在數據丟失&a…

wps安裝后win系統瀏覽窗口無法查看

前提需要有安裝office軟件&#xff0c;PDF一般默認是瀏覽器&#xff0c;如果設置瀏覽器不行&#xff0c;就安裝Adobe Acrobat DC軟件1、按winR鍵&#xff0c;輸入regedit&#xff0c;進入注冊表2、找到路徑&#xff1a;\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current…

Qt 中最經典、最常用的多線程通信場景

實現步驟創建工作類 (Worker)&#xff1a;在工作線程中處理數據的對象。創建線程對象 (QThread)&#xff1a;用來托管工作對象。連接信號槽&#xff1a;主線程 -> 工作線程&#xff1a;連接一個主窗口發出的信號到工作對象的槽&#xff0c;用于傳遞數據。工作線程 -> 主線…

【CV 目標檢測】Fast RCNN模型①——與R-CNN區別

3.Fast RCNN模型 相比于R-CNN&#xff0c;Fast RCNN模型主要在以下三個方面進行了改進&#xff1a; 提高訓練和預測速度 R-CNN首先從測試圖中提取2000個候選區域&#xff0c;然后將這2000個候選區域分別輸入到預訓練好的CNN中提取特征。由于候選區域有大量的重疊&#xff0c;這…

Zookeeper學習

要精通 ZooKeeper&#xff0c;需要掌握其核心原理、數據模型、分布式協調機制、典型應用場景、運維管理與性能調優等方面的知識。以下是系統化的知識體系&#xff1a;? 一、ZooKeeper 基礎原理ZooKeeper 是什么 分布式協調服務&#xff0c;提供一致性、高可用的元數據管理核心…

用TestComplete打造高效CI/CD測試流程

傳統的UI測試往往受限于圖形界面渲染&#xff0c;導致執行速度慢、資源占用高&#xff0c;難以適應持續集成/持續交付&#xff08;CI/CD&#xff09;管道的需求。自動化UI測試平臺TestComplete的智能質量附加組件通過無頭測試技術&#xff0c;為開發團隊提供了一種更高效、更可…

C++ 淺拷貝 和深拷貝的知識點講解

好問題 &#x1f44d;&#xff0c;這個就是理解 delete 的關鍵前置知識。 我從 C語言基礎 出發&#xff0c;像教科書一樣&#xff0c;從零講給你聽。1. 什么是“拷貝”&#xff1f; 在 C 中&#xff0c;當你有一個對象 A&#xff0c;然后寫&#xff1a; Device_Info a; Device…

Arkts加載網頁url的pdf發票黑屏問題

使用模擬器會閃退&#xff0c;連接真機預覽正常import { HMRouter, HMRouterMgr, HMParamType, HMPageParam } from "hadss/hmrouter"; import { BaseTitle, RouterConstants } from "commonlib"; import { webview } from kit.ArkWeb; import { PDFView }…

使用 mongosh 設置 MongoDB 賬號密碼

可以使用 mongosh(MongoDB 6.0+ 的現代Shell)來設置賬號密碼。mongosh 是官方推薦的新一代MongoDB Shell工具,替代了傳統的 mongo 命令。 【本人博文提到的ip均為隨機生成的,不是實際的ip,僅供參考,如有雷同,純屬巧合】 使用 mongosh 設置 MongoDB 賬號密碼 1. 首先連…

HTML+CSS:浮動詳解

在HTMLCSS布局中&#xff0c;浮動&#xff08;float&#xff09; 是一種經典的布局技術&#xff0c;用于控制元素在頁面中的排列方式。它最初設計用于實現文字環繞圖片的效果&#xff0c;后來被廣泛用于復雜布局&#xff0c;但隨著Flexbox和Grid的興起&#xff0c;其使用場景有…

GPIO初始化及調用

下面把 HAL 庫 和 標準外設庫&#xff08;SPL&#xff09; 初始化 GPIO 點亮/熄滅 LED 的完整步驟、示例代碼和常用 API 逐一說清楚。用例默認 PC13 接 LED&#xff08;藍板常見&#xff1b;低電平點亮&#xff0c;高電平熄滅——若板子相反&#xff0c;只把寫 1/0 對調即可&am…

【GPT入門】第48課 LlamaFacotory 合并原模型與LoRA模型

【GPT入門】第48課 LlamaFacotory 合并原模型與LoRA模型1.合并原模型與LoRA訓練的增量模型2. 測試模型1.合并原模型與LoRA訓練的增量模型 llamafactory-cli webui 執行合并 合并后模型大小 (base) rootautodl-container-b4b04ea4f2-b5ee47d1:~# du -sh /root/autodl-tmp/mod…