C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记11--接口/泛型
一.接口
1.1簡介:
接口是一種特殊的引用類型, 和類很相似. 它定義了屬性, 方法, 事件, 這些都作為接口的成員/ 接口中只包含成員的聲明, 成員的定義是派生類的責(zé)任(誰繼承誰實現(xiàn)).
接口在某種程度上與抽象類類似, 但是接口大多數(shù)只用在當(dāng)只有少數(shù)方法由基類聲明由派生類實現(xiàn)時.
其實接口主要就是用來解決多繼承問題的;
1.2 接口的定義
接口使用 interface 關(guān)鍵字聲明,它與類的聲明類似, 聲明默認(rèn)為 public .
interface栗子
// 定義一個陸地生物接口再次注意:方法默認(rèn)就是抽象的, 所以不用加abstract關(guān)鍵字, 加了反而會報錯;
1.3 接口實例
讓 Dog 類繼承 ITerrestrial 接口
classFish 類繼承 IAquatic 接口
class執(zhí)行代碼
static1.4 接口多繼承
- 派生類可以繼承多個接口, 但是對繼承過來的接口方法需要實現(xiàn);
- 派生類可以同時繼承類跟接口, 但是基類只能有一個, 接口不受限制;
- 多繼承中間用逗號分隔連接;
例如 讓青蛙類繼承 ITerrestrial 接口和 IAquatic 接口
// 繼承多個接口直接用逗號隔開即可實現(xiàn):
// Main 函數(shù)接口的特點:
接口和抽象類的區(qū)別(重點!!!):
相同點:
不同點:
二.泛型
我們在編寫程序時,經(jīng)常遇到兩個模塊的功能非常相似(例如排序),只是一個是處理int數(shù)據(jù),另一個是處string數(shù)據(jù),或者其他自定義的數(shù)據(jù)類型,雖然代碼幾乎一樣,然還是得寫好遍;
這時你可能會想到用object 來解決這個問題。但是他是有缺陷的:
2.1 泛型方法
不過好在C#提供了泛型功能, 它能夠?qū)㈩愋妥鳛閰?shù)來傳遞, 即在創(chuàng)建類型時用一個特定的符號如 " T" 作為一個占位符, 代替實際的類型, 等待在實例化時用一個實際的類型來代替.
在方法名后面加<T>, T 是類型占位符; 這個是你自己定義的, 也可以是U,E等, 但一般都是大寫字母.
2.1.1 泛型方法的定義:
1> 參數(shù)類型不確定, 返回值確定;public void ShowT<T>(T t){ 代碼段; }2> 參數(shù)類型確定, 返回值類型不確定;
public T ShowT<T>(string name){ 代碼段; }
使用情景: Unity 游戲開發(fā)中通過名字從資源文件夾中獲取對象(比如模型);
3> 參數(shù)類型和返回值類型都不確定;public T ShowT<T>(T t){ 代碼段; }// 栗子: 將參數(shù)的值打印出來
2.1.2 泛型的優(yōu)點:
2.1.3 注意事項:
2.2 泛型類型參數(shù)
在泛型類型或方法定義中,類型參數(shù)是客戶端在實例化泛型類型的變量時指定的特定類型的占位符, 可以將多個類型進行泛化。
例如:
public說明:
2.3 泛型類型參數(shù)的約束
定義泛型類或泛型方法時, 可以對泛型類型進行約束限制客戶端的傳值. 如果客戶端代碼嘗試使用某個約束不允許的類型來實例化類或方法, 則會產(chǎn)生編譯錯誤. 這些限制成為約束.
2.3 泛型類
泛型類封裝不特定數(shù)據(jù)類型的操作. 通常, 創(chuàng)建泛型類是從現(xiàn)有具體類開始, 然后每次逐個將類型更改為類型參數(shù).
練習(xí)1: 將任意類型的數(shù)組拼接成字符串
// 定義一個泛化方法練習(xí)2 : 將任意類型的數(shù)組進行冒泡排序(考慮 對類和結(jié)構(gòu)體排序)
// 定義一個Person類, 繼承 IComparable接口是因為類本身是不能進行比較的, 但是繼承該接口就可以重寫接口中的CompareTo方法;自己定義比較運算同理 結(jié)構(gòu)體類型和類非常類似
// 定義 Student 結(jié)構(gòu)體繼承IComparable 接口泛型的冒泡排序:
// 這里注意 泛型類型的參數(shù)是不能進行運算符的運算的, 要通過CompareTo方法來實現(xiàn), 所以就要規(guī)定一下T要遵循IComparable接口=======================================================
思維導(dǎo)圖:
總結(jié)
以上是生活随笔為你收集整理的C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记11--接口/泛型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java葵花宝典_JAVA程序员想入职跳
- 下一篇: echarts怎么控制一个点沿着折线移动