接口是一种声明,他规定了一个类要包含的带有指定参数的一系列专门方法。接口本身不包含任何方法的实现代码,只是声明公有方法的签名(也就是说在声明的时候不用public)。在每个实现该接口的类中必须实现每个方法。如:
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
}
}
抽象类声明了一个或多个没有实现的方法。如果一个方法被声明为抽象方法,所对应的类必须也声明为抽象类。同时,一个抽象类中至少有一个抽象方法,非抽象方法可有可无。在继承该抽象类的派生类中必须实现所有抽象方法。不能创建抽象类的实例。如下:
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
}
}
接口和抽象类有很多相似之处。由于C#没有多重继承的概念,所以要实现多重继承还必须依靠接口。在很多情况下可以用接口代替抽象类,当然要继承属性那就用接口不行了。