接口類---interface
什么是接口? 在接口當中一般我們認為接口中的成員都是抽象的。
接口一般認為是功能的集合。在接口類當中定義的方法都是抽象象方法。(沒有方法體)
接口一般我們認為它是一種標準,一種規范,一種約定。
給子類或者是派生類制定規范,規定,標準。
當子類繼承了該接口類,那么就需要重寫該接口類中定義的所有的抽象方法,(需要在子類中添加方法的具體實現)
接口的出現,是為了給子類提供一種能力,實現多態。
//定義一個接口代表的是一種能力 public interface IFLyAble { void Fly(); } //定義一個class類Bird public class Bird : IFlyAble public void Fly() {} Console.WriteLine("鳥會飛"); 3 public class Program public static void Main(string[] args) IFlyAble flyAble = new Bird(); flyAble.Fly();接口類沒有構造方法,也不能進行重載,所以接口不能實例化
接口類中的成員,不能添加任何修飾符,默認修飾符就是publicabstract
接口中的成員不能有任何的實現,屬性不能有初始值,方法不不能有方法體都是以分號做結尾
在接口類中不能定義字段,一般定義屬性(get和set)和方法。
接口類與接口類之間可以繼承,并且可以實現多繼承。單繼承說的是由class定義的類,而由interface定義的類是可以多繼承的。
//定義接口 public interface MyInterface01 { } public interface MyInterface02: MyInterface01 { } public interface MyInterface03: MyInterface01,MyInterface02{} public interface MyInterface04:MyInterface01,MyInterface02,MyInterface03{} public interface MyInterface05:MyInterface01,MyInterface02,MyInterface03,MyInterface04 {}接口類不能繼承class聲明的類,但是class聲明的類可以繼承接口類,并且還可以繼承多個接口類。
// 定義接口 public interface MyInterface01 /*: MyCLass*/ { }3 public interface MyInterface02: MyInterface01 { } public interface Myinterface03: MyInterface01,MyInteerface02{} public interface MyInterface04:MyInterface01,My1Interface02,MyInterface03 { } public interface MyInterface05:MyInterface01,MyInterface02,MyInterface03,MyInter face04 {} //定義一個c1ass聲明的類 public class MyClass : MyInterface01,MyInterface202,MyInterface03,MyInterface04{}一個class類在繼承class類的時候同時還可以繼承接口類,前提條件就是class類必須放在interface聲明的接口類的前面
// 定義接口 public interface MyInterface01 /*: MyCLass*/ { }3 public interface MyInterface02: MyInterface01 { } public interface Myinterface03: MyInterface01,MyInteerface02{} public interface MyInterface04:MyInterface01,My1Interface02,MyInterface03 { } public interface MyInterface05:MyInterface01,MyInterface02,MyInterface03,MyInter face04 {} //定義一個c1ass聲明的類 public class MyClass : MyInterface01,MyInterface202,MyInterface03,MyInterface04{} //定義一個c1ass聲明的類 public class Myclass2:MyClass, Myinterface01, Myinterface02, Myinteerface03, Myinterface04{}接口只能繼承接口,但是類可以繼承接口也可以繼承class類
如果一個抽象類繼承了一個接口,那么該接口中的成員在抽象類中中也是必須實現的,需要進行方法重寫。
當在程序當中定義了一個接口類,一般情況下我們會把接口的類名以"I"字母開頭進行命名。
當一個類繼承了多個接口,這多個接口當中有重名的方法,對于繼承的子類來說,只需要在子類中重寫一次即可。(如果重名的方法形參列
表不同,那么接口中定義了幾個方法,子類就需要重寫幾個方法)
支持接口的顯示實現
定義接口 public interface MyInterface01 /*: MyCLass*/ {} void Study(); public interface MyInterface02 : MyInterface01 { new void Study(); {} //定義一個子類MyC1ass3 public class Myclass3 : MyInterface01, MyInterface02 //支持接口的顯示實現 void MyInterface01. Study() {} void MyInterface02.Study() { } //public void Study(int x) { } }接口的顯示實現是為了解決子類中和接口中定義的重名方法 語法格式: 返回值類型接口名.方法名稱(形參列表){方法體內容....}
public interface 接口名稱 { 抽象方法... }
其他知識點
SortedList集合
SortedList它是一個雙列(鍵值對)排序集合,其中的鍵自動按照順序進行排序。
該集合既可以使用帶有泛型的特征,也可以不使用帶有泛型的特證。
SortedList它是Hashtable和Array的結合體。
當使用Key來訪問集合當中的元素時,其行為類似于Hashtable,當使用下標索引GetBylndex()和SetByIndex()來訪問集合當中的元素時,其行為類似于Array數組。
//創建SortedList集合對象 SortedList sortedList = new SortedList();//無序添加輸出是帶有排序 //添加一些元素 sortedList.Add(3,"張三"); sortedList.Add(5,"王五"); sortedList.Add(7, "田七"); sortedList.Add(4,"李四"); sortedList.Add(6,"趙六"); sortedList.Add(8,"周八") sortedList.Add(1,"天一") // 遍歷查看 ICollection keys = sortedList.Keys; foreach(var key in keys)//var它是一個可變類型 { object value = sortedList[key];//通過key獲取value Console.WriteLine(key +"---->" + value); }
常用方法
高級方法
排序特征
如果我們想要實現自定義排序,需要讓SortedList中的Key實現一個ICompare<T>接口
例子:
比較規則
只要是比較:規則如下:=0,位置相同不改變0---->x在y前 <0--->x在y后
設計模式
23種設計模式:對象創建型 結構型 行為型
依據面向對象編程六大設計原則:單一原則,接口隔離原則,依賴倒置原則,迪米特原則等等
單例模式
屬于對象創建型中的其中一種
該模式的目的就是確保在程序運行過程中某一個類有且僅有一個實例。并且需要提供一個全局訪問點來訪問這個類的唯一實例。
有兩種實現方式:懶漢式(延時獲取)、餓漢式(及時獲取)
?