11. 接口

一、接口

  1定义:接口是指定义一组函数成员而不实现成员的引用类型。
  2、组成:可由属性、方法、事件、索引器这四种成员任意组成构成。接口不能包含常量、字段、运算符、实例构造函数、析构函数,也不能包含静态成员。接口不能含实现其成员的任何代码,只能定义成员本身。
  3、接口成员:接口成员是自动公开的,不能含有访问修饰符(如 public 等)。接口默认声明为 public,而类的默认声明为 private。
  4、继承

    (1)类继承具有单根性(子类只能继承一个父类,不能同时继承多个父类),接口可多重继承,类和结构可继承多个接口,但接口不能继承类。父接口也称为该接口的显式基接口。
    (2)不同接口(不包含派生)中允许有同名的成员,如果派生接口中对显式基接口中的成员进行重新定义时,需要使用关键字 new 。

例:

 1 namespace ConsoleApplication13
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             
 8         }
 9     }
10 
11     //创建接口1
12     interface Interface1
13     {
14         //属性。由于接口不能有字段,所以属性经常被写作自动属性        
15         string Name { get; set; }
16 
17         //方法不能包含方法体
18         void write();
19     }
20 
21     //接口2继承接口1
22     interface Interface2:Interface1 
23     {
24         //派生接口中对显式基接口中的成员进行重新定义时,需使用new 关键字
25         new void write();
26     }
27 }

 

二、接口的隐式与显式实现

1、格式:

 1     class Animal:IAnimal 
 2     {
 3         //隐式实现接口成员
 4         public void Dog()                                   //这个Dog方法是在接口中定义的
 5         {
 6             Console.WriteLine("我是隐式实现接口的dog...");
 7         }
 8 
 9         //显式实现接口成员(前面不能加public)
10         void IAnimal.Dog()
11         {
12             Console.WriteLine("我是显式实现接口的dog...");
13         }
14     }

 

  2、隐式实现接口:可以通过类调用方法调用,也可以通过接口调用方法调用

  3、显式实现接口:通过接口调用方法调用,如果想通过类方法调用则必须通过强制转换

  4、当显式实现方式存在时,隐式实现方式就失效了。

  5、当一个类实现的多个接口中具有相同的方法时,用显式方式专门显式某个接口的方法。

例:

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             //一、隐式接口实现可以通过两种调用方式
 6 
 7             //通过类调用输出
 8             Animal animal = new Animal();
 9             animal.Dog();
10 
11             //通过接口调用输出(在这里因为同时存在隐式和显式接口实现,所以隐式实现失效了)
12             IAnimal animal1 = new Animal();
13             animal1.Dog();
14 
15             //二、显式接口实现
16 
17             //通过接口调用输出
18             IAnimal animal2 = new Animal();
19             animal2.Dog();
20 
21             //通过强制转换调用输出
22             Animal animal3 = new Animal();
23             (animal3 as IAnimal).Dog();
24             Console.ReadKey();
25         }
26     }
27 
28     //新建一个接口
29     interface IAnimal
30     {
31         //只能有方法定义而不能包含方法体,实现过程(方法体)必须在实现接口的类中完成
32         void Dog();
33     }
34 
35     //新建一个类实现接口的隐式与显式实现
36     class Animal:IAnimal 
37     {
38         //隐式实现接口成员
39         public void Dog()
40         {
41             Console.WriteLine("我是隐式实现接口的dog...");
42         }
43 
44         //显式实现接口成员(前面不能加public)
45         void IAnimal.Dog()
46         {
47             Console.WriteLine("我是显式实现接口的dog...");
48         }
49     }

 

posted @ 2017-10-05 00:13  LiuChangwei  阅读(298)  评论(0编辑  收藏  举报