概念
接口描述的是可属于任何类或结构的一组相关行为,所以实现接口的类或结构必须实现接口定义中指定的接口成员。
定义:使用interface 关键字,由方法、属性、事件、索引器或这四种成员类型的任意组合构成。另可使用new、public、protected、intenal和private等修饰符实现接口,但接口成员必须是公共的。
正常人刚接触接口常认为接口多此一举,毕竟直接调用方法就可以了,为什么要用接口呢。那其存在的意义是什么?
总结了一下,接口的目的在于方便类的统一管理和调用,增强约束力。
下面举个简单例子。
示例
interface IProgram
{
void Fun();
}
class Program:IProgram
{
void IProgram.Fun()
{
Console.WriteLine("哈哈");
}
static void Main(string[] args)
{
IProgram p =new Program(); //声明接口实例
p.Fun();
}
}
先看上面的代码,声明一个接口,然后实例化调用方法,似乎我不要接口也可以实现,而且更简单。
class Program
{
void Fun()
{
Console.WriteLine("哈哈.");
}
static void Main(string[] args)
{
Program p = new Program();
p.Fun();
}
}
那接口在这种情况下并没有什么用。看下面的代码:
class Laugh
//显式实现接口成员
{
public void Fun()
{
Console.WriteLine("哈哈.");
}
}
class Cry
//显式实现接口成员
{
public void Fun()
{
Console.WriteLine("呵呵.");
}
}
class Program
{
static void Main(string[] args)
{
Laugh p = new Laugh();
p.Fun();
Cry c = new Cry();
c.Fun();
}
}
interface IProgram
{
void Fun();
}
class Laugh: IProgram
//显式实现接口成员
{
public void Fun()
{
Console.WriteLine("哈哈.");
}
}
class Cry: IProgram
//显式实现接口成员
{
public void Fun()
{
Console.WriteLine("呵呵.");
}
}
class Program
{
static void Main(string[] args)
{
IProgram p = new Laugh();
p.Fun();
IProgram c = new Cry();
c.Fun();
}
}
由上面的对比可以看出,接口适用于多个类都有共同的方法,使用接口可以对这些方法同统一调用管理。
接口继承和类继承的区别
- 类继承不仅是说明继承,也是实现继承;接口继承只是说明继承。派生类可以继承基类的方法实现,而派生的接口只继承了父接口的成员方法说明,而没有继承父接口的实现。
- C#中类继承只允许单继承,但是接口继承允许多继承,一个子接口可以有多个父接口。
参考文章如下:
C# 接口《通俗解释》
C#之接口