接口
大约 2 分钟
接口
- 为不同的类或结构声明一个同一的访问入口;
以List.Sort ( )为例,Sort方法通过List元素实现IComparer<T>接口对元素进行排序,对于List<int>的对象能够进行排序,因为int实现了IComparer<T>接口,而当自定义类没有实现IComparer<T>接口时是不能使用List.Sort排序的;
自定义类实现IComparer<T>接口需要实现接口的Compare方法,参见MSDN;
声明接口
接口声明不能包含数据成员和静态成员;
接口声明可以包含方法、属性、事件、索引器;
函数成员声明不能包含任何实现代码;
接口名称必须以 I 开始;
接口声明可以像类和结构一样分部声明;
接口成员为隐式 public 不能有任何访问修饰符;
interface IMyInterface { int DoStuff(int nVar1,long lVar2); }
实现接口
- 接口位于基类列表中,可以实现多个接口;
- 基类必须放在所有接口之前,并且只能单继承;
- 必须实现接口的所有成员;
- 多个接口中有重复方法时只需要对一个方法进行实现;
- 派生类的接口如果在基类中已经实现,则不用重复实现;
- 多个接口可以显示实现,达到分离不同接口实现的目的,显示实现不是类级别的实现,可以单独进行类级别的实现,但不是必须的;
- 显示接口成员实现的访问只能通过将类转化为接口才能访问,不能使用类对象访问;
接口和 as 运算符
- 接口属于引用类型;
- 可以把类对象强制转换为接口来访问接口的方法,如果类没有实现接口,则会抛出异常;
- 使用 as 将类转化为接口,如果类没有实现接口,不会抛出异常,而是返回 null;
- 对于不同的类,可以分别使用 as 转化成同一个接口,通过同一个接口访问不同类的实现;