什么是接口
- 接口可以理解为对一组方法声明进行的统一命名,但这些方法没有提供任何实现.也就是指将一组方法声明在一个接口中,在该接口中定义比较方法,然后让这些类型去继承该接口,并实现自己的比较方法
如何使用接口
接口的定义
//使用关键字 interfaceinterface ICustomCompare{ //定义比较方法,继承该接口的类都要实现该方法 int CompareTo(object other);}
继承接口
//定义类并继承接口public class Person:ICustomCompare{ int age; public int Age { get{ return age; } set{ age=value; } } //实现接口方法 public int CompareTo(object value) { if(value==null) { return 1; } //将object类型强制转换为Person类型 Person otherp=(Person)value; //把当前对象的Age属性与需要比较的对象Age属性进行对比 if(this.Age < otherp.Age) { return -1; } if(this.Age > otherp.Age) { return 1; } return 0; }}
显式接口实现方式
namespace Person{ ////// 中国人打招呼接口 /// interface IChinaseGreeting { //接口方法声明 void SayHello(); } ////// 美国人打招呼接口 /// interface IAmericanGreeting { //接口方法声明 void SayHello(); } ////// Speaker类实现了二个接口 /// public class Speaker : IChinaseGreeting, IAmericanGreeting { //隐式接口的实现 public void SayHello() { Console.WriteLine("你好"); } //显式接口的实现 void IChinaseGreeting.SayHello() { Console.WriteLine("你好"); } void IAmericanGreeting.SayHello() { Console.WriteLine("Hello"); } } class Program { static void Main(string[] args) { Speaker p=new Speaker(); //隐式调用打招呼的方法,都会输出 "你好" p.SayHello(); //显式的调用中国人打招呼的方法 IChinaseGreeting chinaseGreeting = (IChinaseGreeting)p; chinaseGreeting.SayHello(); //显式的调用美国人打招呼的方法 IAmericanGreeting americanGreeting = (IAmericanGreeting)p; americanGreeting.SayHello(); Console.ReadLine(); //输出结果 //你好 //你好 //Hello } }}
- 若使用显式接口实现方式是,需要注意以下几个问题
- 方法不能使用任何访问修饰符,显式实现的成员默认为私有
- 显式实现的成员默认是私有的,所以这些成员都不能通过类的对象进行访问
- 显式与隐式接口的区别
- 采用隐式接口实现时,类和接口都可以访问接口中的方法;而若采用显式接口实现实现方式,接口方法只能通过接口来完成访问,因为此时接口方法默认为私有
- 当类实现多个接口,并且接口中包含相同的方法名称,参数和返回类型是,则应使用显式接口实现方式.
接口与抽象类
- 接口与抽象类的区别
- 抽象类使用
abstract
关键字进行定义,而接口使用interface
关键字定义;它们都不能进行实例化 - 抽象类中可包含虚方法,非抽象方法和静态成员;但接口中不能包含虚方法和任何静态成员,并且接口中只能定义方法,属性,索引,事件,且方法不能具体实现(无大括号),方法和具体实现由实现类完成
- 抽象类不能实现多继承,接口则支持多继承.
- 抽象类是对一类对象的抽象,继承于抽象类的类的类与抽象类为属于的关系;而类实现接口只是代表实现类具有接口声明的方法,是一种can-do 的关系.所以一般接口后都带有able字段,表示"我能走"的意思;
- 抽象类使用