一、什么是接口 

  接口 可以理解为对一组方法声明进行的同一命名,但这些方法没有提供任何实现。也就是说,把一组方法声明在一个接口中,然后继承于该接口的类都

需要实现这些方法。

  例如,很多类型(比如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修饰符。如果在接口中定义了不该包含的成员,就会导致编译错误。

三、继承接口

  定义完接口后,若有类想继承该接口,则它必须实现接口中定义的所有方法。类继承接口与继承类是一样的,只需要使用英文的冒号“:”,后接接

口名就可以了。如下:

  

     //不使用封装特性来定义一个Person类
public class Person:ICustomCompare
{
int age;
public int Age
{
get { return age; }
set { age = value; } }
public int CompareTo(object value)
{
if(value == null)
{
return ;
} //将object类型强制转换为Person类型
Person otherp = (Person)value;
//把当前对象的Age属性与需要比较的对象的Age属性进行对比 if(this.Age < otherp.Age)
{
return -;
} if (this.Age < otherp.Age)
{
return ;
} return ;
} }

  以上代码中,定义了一个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 = ; Person p2 = new Person();
p2.Age = ; if (p1.CompareTo(p2) > )
{
Console.WriteLine("P1比P2大");
}
else if (p1.CompareTo(p2)<)
{
Console.WriteLine("p1比p2小");
}
else
{
Console.WriteLine("p1和p2一样大");
} Console.Read();
}

最新文章

  1. ASP.NET MVC学前篇之Lambda表达式、依赖倒置
  2. C++代码重构——从C global到C++ template
  3. HTML5新增标签及具体用法
  4. JavaScript DOM 编程艺术(第2版)读书笔记(1)
  5. NSString常见用法总结
  6. iOS开发中遇到的头文件找不到的问题解决办法
  7. Ehcache简单说明及使用
  8. JOSM学习下载地址
  9. php 控制页面跳转
  10. 使用SpringMVC时,配置DispatcherServlet注意的url-pattern的问题
  11. 如何通过 WebP 兼容减少图片资源大小
  12. python函数高级特性
  13. AccessibilityService+WindowManager+SurfaceView开系统权限
  14. python基础(str,list,tuple)
  15. PTA中如何出Java题目?
  16. Android反编译获取源码-android学习之旅(70)
  17. newcode网学习笔记(1)
  18. Django(一)自定义web框架
  19. HashMap实现原理(jdk1.7/jdk1.8)
  20. iphone越狱安装python2.7

热门文章

  1. codeforces#572Div2 D1---Add On A Tree【思维】
  2. oracle数据库中 impdb/expdb 详解
  3. Vue项目中v-bind动态绑定src路径不成功
  4. jquery点击显示或隐藏
  5. HTML5中table标签与form标签的区别
  6. ubuntu ukylin wineqq 登录时提示:您的号码暂时不能使用低版本的qq
  7. python 最小二乘 leastsq 函数实现
  8. python 查看安装的库的路径(找site-packages)
  9. springboot连接redis进行CRUD
  10. Go 语言入门(三)并发