C#接口归纳总结实例详解

2019-12-30 17:16:03于丽

C#接口的学习,在编程中,我们经常会用到接口,那什么是接口呢?

接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接口定义中指定的接口成员。

接口使用interface关键字进行定义,可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。

接口的特性:

1.接口类似于抽象基类,不能直接实例化接口;接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员:

当显式实现该接口的成员时,实现的成员不能通过类实例访问,只能通过接口实例访问。

当隐式实现该接口的成员时,实现的成员可以通过类实例访问,也可以通过接口实例访问,但是实现的成员必须是公有的。

2.接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、不能包含静态成员。

3.接口成员是自动公开的,且不能包含任何访问修饰符。

4.接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。

为什么不能指定接口中方法的修饰符?

接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。它们默认为公有方法。


interface IProgram
 {
  void Fun();
 }
 class Program:IProgram
 {
   //显式实现接口成员
  void IProgram.Fun()
  {
   Console.WriteLine("I am Fun.");
  }
  staticvoid Main(string[] args)
  {
   IProgram p =new Program(); //声明一个接口实例,但不是对接口进行实例化
   p.Fun();
   Console.Read();
  }
 }

上面提到,实现接口可以显式实现和隐式实现,那么这两种实现到底有什么优缺点呢?

一般情况,当类或者结构要实现的是单个接口,可以使用隐式实现。

如果类或者结构继承了多个接口且接口中具有相同名称成员时,就要用到显式实现,当显式实现方式存在时,隐式实现方式就失效了。


interface IProgram
 {
  void Fun();
 }
 interface IAProgram
 {
  void Fun();
 }
 class Program : IProgram, IAProgram
 {
  void IProgram.Fun() //显式实现接口IProgram
  {
   Console.WriteLine("I am IProgram Fun.");
  }
  void IAProgram.Fun() //显式实现接口IAProgram
  {
   Console.WriteLine("I am IAProgram Fun.");
  }
  //public void Fun() //隐式实现接口
  //{
  // Console.WriteLine("I am Program Fun.");
  //}
  staticvoid Main(string[] args)
  {
   //IProgram p = new Program();
   //p.Fun();
   //IAProgram ap = new Program();
   //ap.Fun();
   Program pro =new Program();
   ((IProgram)pro).Fun();
   ((IAProgram)pro).Fun();
   Console.Read();
  }
 }

结果为:I am IProgram Fun.

I am IAProgram Fun.