接口、抽象、迭代器跟java的說法差不多,所以只作簡單的解釋,主要通過實(shí)例簡單了解用法。
創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、臨高網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為臨高等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
接口:通過它可以實(shí)現(xiàn)多重繼承的功能。接口可以包含屬性、方法、索引器和事件,但只可以對其進(jìn)行定義而不能賦值。
簡單聲明的接口:
interface IPeople{ string Name{get;set;} void show(); }
使用Program類實(shí)現(xiàn)接口:
class Program : IPeople{ string name=""; public string Name{get{return name;} set{name=value;}} public show(){Console.Write("Name:"+Name);} }
主程序,使用實(shí)例化Program對象:
Program pro = new Program();//實(shí)例化Program對象 IPeople ip = pro;//使用派生類對象實(shí)例化接口 ip.Name = "hello";//為派生類中的Name屬性賦值 ip.show();//調(diào)用派生類中方法顯示屬性值
上例通過實(shí)例化的接口對象訪問派生類中的屬性和方法。另外,接口還可以多重繼承,使用時(shí)通過( ,)分隔:
interface IPeople{ string Name{get;set;} } interface IMan : IPeople{ void sex(); } class Program :IPeople,IMan{ public void sex(){Console.Write("..."); } } //調(diào)用時(shí): IMan man = pro; man.sex();
顯式調(diào)用接口成員(類實(shí)現(xiàn)兩個接口,兩個接口有相同的成員時(shí),作為區(qū)分使用):
interface ICal1{ int Add(); } interface ICal2{ int Add(); } class Calculate : ICal1,ICal2{ int ICal1.Add(){ //顯式接口成員實(shí)現(xiàn) int x = 10; int y = 20; return x+y; } int ICal2.Add(){ int x = 10; int y = 20; int z = 30; return x+y+z; } } //調(diào)用時(shí) Calculate cal = new Calculate(); ICal1 cal1 = cal; Console.WriteLine(cal.Add());//同理可以使用接口繼承類ICal2的對象實(shí)例化接口
*********
抽象類和抽象方法:
只要有一個方法聲明為抽象方法,這個類也必須被聲明為抽象類。抽象類不能被密封。
抽象類聲明:
public abstract class Test{ public int i; public void method(); public abstract void abdMethod();//抽象方法 }
抽象類和抽象方法的使用:
public abstract class People{ private string name=""; public string Name{ get{return name;} set{name = value;} } public abstract void show();//抽象方法 } public class One :People{ //重寫抽象類中輸出信息的方法 public override void show(){Console.Write("...");} } //實(shí)現(xiàn) One one = new One();//實(shí)例化派生類 People p = one;//使用派生類對象實(shí)例化抽象類 p.Name = "hello";//使用抽象類對象訪問抽象類中的姓名 p.show();//使用抽象類對象調(diào)用派生類中的方法
**********
密封類和密封方法:(為避免濫用繼承而提出來的)
密封類可以限制擴(kuò)展性,如果密封了某個類,則其他類不能從該類中繼承(所以抽象類不能被密封);同理,密封的成員也如此。
密封類的聲明:
public sealed class SealedTest{}
密封方法:
密封方法只能用于對基類的虛方法進(jìn)行實(shí)現(xiàn),并提供具體的實(shí)現(xiàn),所以,聲明密封方法時(shí),sealed修飾符和override修飾符同時(shí)使用。
public class Base{ public virtual void show(){//定義一個虛方法 Console.WriteLine("這是基類中的虛方法"); } } public sealed class Derive:Base{//從基類派生一個密封子類 //密封并重寫基類中的虛方法show() public sealed override void show(){ base.show();//調(diào)用基類的虛方法 Console.WriteLine("這是密封類中重寫后的方法"); } }
密封類和密封方法的使用:
public class People{ public virtual void show(){}//虛方法 } public sealed class Student{ private string name =""; public string Name{get{return name;} set{name = value;}} //密封并重寫基類中的show() public sealed override void show(){ Console.WriteLine("NAME: "+Name); } } //調(diào)用 Student stu = new Student();//實(shí)例化密封類對象 stu.Name = "hello"; stu.show();
迭代器:
用于返回相同類型的值的有序序列的一段代碼。迭代器代碼使用yield return 語句依次返回每個元素,yield break語句將終止迭代。返回類型必須是IEnumerable或IEnumerator中的一種。
創(chuàng)建迭代器:
public class Banks : IEnumerable { string[] arr = { "item1", "item2", "item3", "item4" }; public IEnumerator GetEnumerator() { for (int i = 0; i < arr.Length; i++) { yield return arr[i]; } } } //調(diào)用 Banks banks = new Banks(); foreach (string str in banks) { richTextBox1.Text += str + "\n"; }
**********
分部類:(直接舉例比較容易理解)
partial class Part{//分部類第一部分 public int add(int a, int b){return a+b;} } partial class Part{//分部類第二部分 public int sub(int a, int b){return a-b;} } //調(diào)用時(shí)。可以知道分部類其實(shí)各部分就是組成一個類 Part part = new Part(); part.add(1,2);part.sub(5,3);
********
泛型(和java的類似,所以只是舉例):
public class Manager{ public static int Mana(T[] items, T item){//創(chuàng)建泛型方法 } } //調(diào)用泛型方法 int i = Manager.Mana (new int[]{1,2} , 2);
實(shí)例——利用接口實(shí)現(xiàn)選擇不同的內(nèi)容
interface ISelect{ void Speak(string str); } class Chinese :ISelect{ public void Speak("....."); } class Foreign :ISelect{ public void Speak("....."); }
實(shí)例——通過重寫抽象方法實(shí)現(xiàn)多態(tài)性
class Animal{ public string Run(){return "can run!";} public abstract string Sound();//聲明抽象方法 } class Dog : Animal{ public override string Sound(){ return "Wang!"; } } //該類通過多態(tài)性輸出動物的相關(guān)行為信息 public static class AnimalClass{ public static string AnimalSound(Animal an){ return an.Sound(); } } //在程序中調(diào)用時(shí) Dog dog = new Dog(); AnimalClass.AnimalSound(dog);