接口与抽象类

接口是一种声明,他规定了一个类要包含的带有指定参数的一系列专门方法。接口本身不包含任何方法的实现代码,只是声明公有方法的签名(也就是说在声明的时候不用public)。在每个实现该接口的类中必须实现每个方法。如: [csharp] public interface IAnimal {     //接口中没有方法的实现,也没有public修饰符     void Run();     int Beat(string name); } public class Dog : IAnimal {     public Dog()     { }     //接口的继承类中必须实现接口的所有方法     public void Run()     {         // TODO     }     public int Beat(string name)     {         // TODO     } } [/csharp] 抽象类声明了一个或多个没有实现的方法。如果一个方法被声明为抽象方法,所对应的类必须也声明为抽象类。同时,一个抽象类中至少有一个抽象方法,非抽象方法可有可无。在继承该抽象类的派生类中必须实现所有抽象方法。不能创建抽象类的实例。如下: [csharp] public abstract class Animal {     protected int height, weight;     public void Run()     {         // TODO     }     public abstract int Beat(string name); } public class Cat : Animal {     public Cat()     { }     //Cat继承自抽象类Animal,拥有Run()方法,同时必须实现抽象方法Beat()。     public override int Beat(string name)     {         // TODO     } } [/csharp] 接口和抽象类有很多相似之处。由于C#没有多重继承的概念,所以要实现多重继承还必须依靠接口。在很多情况下可以用接口代替抽象类,当然要继承属性那就用接口不行了。