接口、抽象、迭代器跟java的说法差不多,所以只作简单的解释,主要通过实例简单了解用法。

接口:通过它可以实现多重继承的功能。接口可以包含属性、方法、索引器和事件,但只可以对其进行定义而不能赋值。

简单声明的接口:

interface IPeople{ string Name{get;set;} void show();}

使用Program类实现接口:

class Program : IPeople{ string name=""; public string Name{get{return name;} set{name=value;}} public show(){Console.Write("Name:"+Name);}}

主程序,使用实例化Program对象:

Program pro = new Program();//实例化Program对象IPeople ip = pro;//使用派生类对象实例化接口ip.Name = "hello";//为派生类中的Name属性赋值ip.show();//调用派生类中方法显示属性值

上例通过实例化的接口对象访问派生类中的属性和方法。另外,接口还可以多重继承,使用时通过( ,)分隔:

interface IPeople{ string Name{get;set;}}interface IMan : IPeople{ void sex();}class Program :IPeople,IMan{ public void sex(){Console.Write("..."); }}//调用时:IMan man = pro;man.sex();

显式调用接口成员(类实现两个接口,两个接口有相同的成员时,作为区分使用):

interface ICal1{ int Add();}interface ICal2{ int Add();}class Calculate : ICal1,ICal2{ int ICal1.Add(){ //显式接口成员实现 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; }}//调用时Calculate cal = new Calculate();ICal1 cal1 = cal;Console.WriteLine(cal.Add());//同理可以使用接口继承类ICal2的对象实例化接口


*********

抽象类和抽象方法:

只要有一个方法声明为抽象方法,这个类也必须被声明为抽象类。抽象类不能被密封。

抽象类声明:

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("...");}}//实现One one = new One();//实例化派生类People p = one;//使用派生类对象实例化抽象类p.Name = "hello";//使用抽象类对象访问抽象类中的姓名p.show();//使用抽象类对象调用派生类中的方法


**********

密封类和密封方法:(为避免滥用继承而提出来的)

密封类可以限制扩展性,如果密封了某个类,则其他类不能从该类中继承(所以抽象类不能被密封);同理,密封的成员也如此。

密封类的声明:

public sealed class SealedTest{}

密封方法:

密封方法只能用于对基类的虚方法进行实现,并提供具体的实现,所以,声明密封方法时,sealed修饰符和override修饰符同时使用。

public class Base{ public virtual void show(){//定义一个虚方法 Console.WriteLine("这是基类中的虚方法"); }}public sealed class Derive:Base{//从基类派生一个密封子类//密封并重写基类中的虚方法show() public sealed override void show(){ base.show();//调用基类的虚方法 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); }}//调用Student stu = new Student();//实例化密封类对象stu.Name = "hello";stu.show();

迭代器:

用于返回相同类型的值的有序序列的一段代码。迭代器代码使用yield return 语句依次返回每个元素,yield break语句将终止迭代。返回类型必须是IEnumerable或IEnumerator中的一种。

创建迭代器:

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]; } }}//调用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;}}//调用时。可以知道分部类其实各部分就是组成一个类Part part = new Part();part.add(1,2);part.sub(5,3);

********

泛型(和java的类似,所以只是举例):

public class Manager{ public static int Mana<T>(T[] items, T item){//创建泛型方法 }}//调用泛型方法int i = Manager.Mana<int>(new int[]{1,2} , 2);

实例——利用接口实现选择不同的内容

interface ISelect{ void Speak(string str);}class Chinese :ISelect{ public void Speak(".....");}class Foreign :ISelect{ public void Speak(".....");}

实例——通过重写抽象方法实现多态性

class Animal{ public string Run(){return "can run!";} public abstract string Sound();//声明抽象方法}class Dog : Animal{ public override string Sound(){ return "Wang!"; }}//该类通过多态性输出动物的相关行为信息public static class AnimalClass{ public static string AnimalSound(Animal an){ return an.Sound(); }}//在程序中调用时Dog dog = new Dog();AnimalClass.AnimalSound(dog);