1、接口类似于类,但接口的成员都没有执行方式,它只是方法、属性、事件和
索引的组合而已,并且也只能包含
这四种成员;类除了这四种成员之外还
可以有别的成员(如字段)。
2、不能实例化一个接口,接口只包括成员的签名;而类可以实例化(abstract类
除外)。
3、接口没有构造函数,类有构造函数。
4、接口不能进行运算符的重载,类可以进行运算符重载。
5、接口的成员没有任何修饰符,其成员总是公共的,而类的成员则可以有修饰
符(如:虚拟或者静态)。
6、派生于接口的类必须实现接口中所有成员的执行方式,而从类派生则不
然。
接口与类实现的不同,仅供自己参考:
static void Main(string[] args) { /* * 继承于接口的类必须实现接口所定义的方法 */ Dog dog1 = new Dog(); dog1.Ibark(); cat mao1 = new cat(); mao1.Ibark(); //如果用类的话,需要在任务project中重写这3个‘程序员’类。 Project pj = new Project(); VBcoder p1 = new VBcoder(); pj.writeProject(p1); Csharp p2 = new Csharp(); pj.writeProject(p2); PHP p3 = new PHP(); pj.writeProject(p3); //使用接口来解决问题2 //prject2类里只要定义 一个方法,其参数是接口。 Project2 pj2 = new Project2(); IFWriteCode programer; //指明接口中的方法实现vb2类所对应的方法。 programer = new vb2(); pj2.WriteProgram(programer); programer = new csharp2(); pj2.WriteProgram(programer); programer = new PHP2(); pj2.WriteProgram(programer); } public interface Ibark { void Ibark(); } /* * 使用类继承接口 */ public class Dog:Ibark { public Dog() { //构造函数 } public void Ibark() { Console.Write("wang!"); } } public class cat : Ibark { public void Ibark() { Console.Write("miao!"); } } /* * 问题2:如果只用类来实现,也可以,但多了就会比较麻烦 */ public class VBcoder { public void WriteCode() { Console.Write("VB."); } } public class Csharp { public void WriteCode() { Console.Write("C#"); } } public class PHP { public void WriteCode() { Console.Write("PHP"); } } //程序员接收到一个任务 public class Project { public void writeProject(VBcoder vb) { vb.WriteCode(); } public void writeProject(Csharp cs) { cs.WriteCode(); } public void writeProject(PHP php) { php.WriteCode(); } } //使用接口解决问题2. public interface IFWriteCode { void WriteCode(); } public class vb2:IFWriteCode { public void WriteCode() { Console.Write("vb2"); } } public class csharp2:IFWriteCode { public void WriteCode() { Console.Write("csharp2"); } } public class PHP2:IFWriteCode { public void WriteCode() { Console.Write("PHP2"); } } public class Project2 { public void WriteProgram(IFWriteCode people) { people.WriteCode(); } }