與繼承)
1.接口//接口是指定一組成員而不對他們的成員進行實現(xiàn)的引用類型只能被類和結(jié)構(gòu)體所實現(xiàn)當(dāng)類或結(jié)構(gòu)體去繼承這個接口的時候必須實現(xiàn)接口中定義的所有成員//接口只作屬性、行為規(guī)范不具備存儲數(shù)據(jù)和定義方法的能力//接口制定規(guī)則應(yīng)該有什么//類或結(jié)構(gòu)體實現(xiàn)接口的指定規(guī)則具體怎么有//定義一個接口用interface關(guān)鍵字行業(yè)規(guī)范一般用大寫字母I開頭命名//格式interface 接口的名字{ }interfaceIBook{//接口中所有成員隱式public不能主動寫訪問修飾符//屬性聲明stringName {get;set; }doublePrice {get;set; }//方法聲明voidFn();voidFn2(strings);//接口中不能寫字段和靜態(tài)成員//int a;報錯//static int b { get; set; }報錯//static void fn3();報錯}//某個類或結(jié)構(gòu)體實現(xiàn)接口必須實現(xiàn)這個接口的所有成員//一個類可以繼承多個接口classBook:IBook,IPaper{//實現(xiàn)的類或結(jié)構(gòu)體中可以擁有更多的成員}//一個類可以繼承另一個類的同時去實現(xiàn)接口classStudent:Person,IStudent{}//當(dāng)父類有和子類的接口同名的屬性時子類可以不需要自己實現(xiàn)也可以通過new關(guān)鍵字重新實現(xiàn)接口只是定義類是實現(xiàn)1.接口中只能定義屬性、方法不能定義字段和靜態(tài)成員2.接口的修飾符默認public不能手寫3.類或結(jié)構(gòu)體實現(xiàn)接口時成員只能多不能少如果接口中規(guī)定的屬性有g(shù)et,set實現(xiàn)的時候就必須有g(shù)et,set接口規(guī)定的只有g(shù)et實現(xiàn)時可以有g(shù)et或get和set4.類可以實現(xiàn)多個接口用,分隔5.當(dāng)類同時繼承父類和實現(xiàn)接口時必須把類放在最前面2.多接口實現(xiàn)//當(dāng)一個類實現(xiàn)多接口中擁有相同類型的相同屬性的聲明時只需要實現(xiàn)一次//當(dāng)一個類實現(xiàn)多接口中擁有不同類型的相同屬性的聲明需要使用顯式接口去實現(xiàn)//顯式實現(xiàn)的成員不需要加訪問修飾符classTest:IA,IB{intIA.D {get;set; } 123;stringIB.D {get;set; } 張三;publicvoidFn(){//如果同名同參的方法方法體也一樣只實現(xiàn)一次//如果同名同參的方法方法體不一樣像屬性一樣顯示接口去實現(xiàn)void IA.Fn(){} void IB.Fn(){}}//因為方法可以重載因此可以直接重載兩個接口中同名的不同方法publicvoidFn1(intx){}publicvoidFn1(stringx){}Testt newTest();Console.WriteLine(t.D);//True//顯式接口成員只能通過接口類型引用訪問不能用類對象IAa t;Console.WriteLine(a.D);//123IBb t;Console.WriteLine(b.D);//張三3.接口的繼承//一個接口可以繼承另一個接口如果接口B繼承了接口A某個類實現(xiàn)接口B時要同時實現(xiàn)A和B的所有成員抽象類和接口異同相同點1.抽象類和接口都不能被new創(chuàng)建實例2.都包含未實現(xiàn)的方法(可以聲明方法而不提供實現(xiàn))不同點1.抽象類可以包含非抽象的成員接口只能包含抽象成員2.抽象類只支持單繼承一個類一次可以實現(xiàn)多個接口3.抽象類可以有訪問修飾符接口不能有訪問修飾符4.抽象類可以有字段接口不能定義字段