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();
}
}