c#接口
接口描述的是类或结构所描述的一组相关功能。
所以继承此接口的类或结构必须实现接口中定义的所有成员。
接口使用interface关键字进行声明,成员可以为属性,方法,索引,事件。
接口的特性:
1)、接口类似与抽象类,不能实例化,实现接口的任何非抽象类都必须实现接口的所有成员:
当显示实现成员时,实现成员不能通过类的对象访问,只能通过接口实例访问。
当隐示实现成员时,可以通过类和接口的实例访问,但是实现成员须是public。
2)、接口不能包含字段,常量,构造函数,析构函数和静态成员等。
3)、接口成员是公开的,且不需要任何的访问修饰符。
4)、接口,类和结构都可以继承多个接口。
1 interface IProgram 2 { 3 void Fun(); 4 } 5 6 class Program : IProgram 7 { 8 //显示接口实现 9 void IProgram.Fun() 10 { 11 Console.WriteLine("i am fun."); 12 } 13 static void Main(string[] args) 14 { 15 IProgram i = new Program();//声明一个接口,但不是对接口实例化 16 i.Fun(); 17 Console.ReadKey(); 18 } 19 }
隐式接口与显示接口实现的区别:
一般当类和结构实现单个接口时使用隐式接口。
而当要实现多个接口时,且接口中含有同名函数时就需要使用显示接口。且使用了显示接口隐式接口就失效了。
1 interface IProgram 2 { 3 void Fun(); 4 } 5 interface IAPrograme{ 6 void Fun(); 7 } 8 class Program : IProgram,IAPrograme 9 { 10 //显示接口实现 11 void IProgram.Fun() 12 { 13 Console.WriteLine("i am IProgram fun."); 14 } 15 void IAPrograme.Fun(){ 16 Console.WriteLine("i am IAPrograme fun."); 17 } 18 //实现隐式接口 19 //void Fun() { 20 21 //} 22 static void Main(string[] args) 23 { 24 Program p = new Program(); 25 ((IProgram)p).Fun(); 26 ((IAPrograme)p).Fun(); 27 Console.ReadKey(); 28 } 29 }
接口的继承:
接口的继承指的是继承的父接口的所有成员,但是还是没有实现。且允许多继承。
1 interface IProgram 2 { 3 void Fun(); 4 } 5 interface IAPrograme : IProgram 6 { 7 8 } 9 class Program : IProgram, IAPrograme 10 { 11 //显示接口实现 12 void IProgram.Fun() 13 { 14 Console.WriteLine("i am IProgram fun."); 15 } 16 //void IAPrograme.Fun() 17 //{ 18 // Console.WriteLine("i am IAPrograme fun."); 19 //} 20 //实现隐式接口 21 //void Fun() { 22 23 //} 24 static void Main(string[] args) 25 { 26 Program p = new Program(); 27 //((IProgram)p).Fun(); 28 ((IAPrograme)p).Fun(); 29 30 Console.ReadKey(); 31 } 32 }
接口的覆盖:
1 interface IProgram 2 { 3 void Fun(); 4 } 5 abstract class IAProgram : IProgram 6 { 7 abstract public void AFun(); 8 void IProgram.Fun() 9 { 10 AFun(); 11 } 12 } 13 class Program : IAProgram 14 { 15 16 public override void AFun() 17 { 18 Console.WriteLine("i am AProgram fun."); 19 } 20 static void Main(string[] args) 21 { 22 IProgram p = new Program(); 23 //((IProgram)p).Fun(); 24 p.Fun(); 25 26 Console.ReadKey(); 27 } 28 }
先进行接口的实现,然后再调用抽象函数。
异:
不能直接实例化接口。
接口不包含方法的实现。
接口可以实现多继承,而类只能是单继承。
类定义可在不同的源文件之间进行拆分。
同:
接口、类和结构可从多个接口继承。
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口可以包含事件、索引器、方法和属性。
一个类可以实现多个接口。