一、什么是接口
接口 可以理解为对一组方法声明进行的同一命名,但这些方法没有提供任何实现。也就是说,把一组方法声明在一个接口中,然后继承于该接口的类都
需要实现这些方法。
例如,很多类型(比如int 类型、string类型和字符类型等)都需要比较大小,此时可以定义一个比较接口,在该接口中定义比较方法,然后让这些类型去
继承该接口,并实现自己的比较方法。
通过接口,你可以对方法进行统一的管理,避免了在每种类型中重复定义这些方法。
二、接口的定义
2.1、接口的定义与类的定义非常类似,只是使用的关键字不一样罢了,类的定义使用class关键字,而接口使用interface关键字进行定义。
在visual Studio中添加接口的步骤如下:
2.1.1、创建一个全新的控制台应用程序,把它命名为CustomInterface;
2.1.2、右击项目,在弹出的菜单中选择“添加” →“新建项” 菜单项,选择接口,输入名称,点击确定。如下:
interface ICustomCompare { //定义比较方法,继承该接口的类都要实现该方法
int CompareTo(object other);
}
在接口中定义方法不能添加任何访问修饰符,因为接口中的方法默认为Public,如果显式地指定了修饰符,则会出现编译时错误。
在接口中除了可以定义方法之外,还可以包含属性、事件、索引器,或者这4类成员(包括方法)类型的任意组合;但接口类型不能包含字段、运算符重载、
实例构造函数和析构函数。
接口中的所有成员都默认是公共的,因此不能再使用public、private和protected等访问修饰符进行修饰,也不能使用static修饰符。如果在接口中定义了不该包含的成员,就会导致编译错误。
三、继承接口
定义完接口后,若有类想继承该接口,则它必须实现接口中定义的所有方法。类继承接口与继承类是一样的,只需要使用英文的冒号“:”,后接接
口名就可以了。如下:
1 //不使用封装特性来定义一个Person类 2 public class Person:ICustomCompare 3 { 4 int age; 5 public int Age 6 { 7 get { return age; } 8 set { age = value; } 9 10 } 11 public int CompareTo(object value) 12 { 13 if(value == null) 14 { 15 return 1; 16 } 17 18 //将object类型强制转换为Person类型 19 Person otherp = (Person)value; 20 //把当前对象的Age属性与需要比较的对象的Age属性进行对比 21 22 if(this.Age < otherp.Age) 23 { 24 return -1; 25 } 26 27 if (this.Age < otherp.Age) 28 { 29 return 1; 30 } 31 32 return 0; 33 } 34 35 36 }
以上代码中,定义了一个Person类继承于ICustomCompare接口,并且该类实现了接口中定义的CompareTo方法。
CompareTo方法会首先判断参数对象是否为null,如果比较的对象为空,就直接返回1,代表当前对象比传入对象大。如果比较的对象不为null,则首先把它强制转换为Person类型(传进来的参数是object类型,不同类型的对象间不存在可比性)。再比较他们的Age属性。如果当前对象(即Person对象)的Age属性比传入对象的Age属性值大,则返回1,说明当前对象比传入对象大;如果返回-1,则表示比传入的对象小;相等,则返回0;
四、调用接口中的方法
代码如下:
static void Main(string[] args) { Person p1 = new Person(); p1.Age = 19; Person p2 = new Person(); p2.Age = 19; if (p1.CompareTo(p2) > 0) { Console.WriteLine("P1比P2大"); } else if (p1.CompareTo(p2)<0) { Console.WriteLine("p1比p2小"); } else { Console.WriteLine("p1和p2一样大"); } Console.Read(); }