一、什么是接口 

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

需要实现这些方法。

  例如,很多类型(比如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();
}

【c# 学习笔记】接口的更多相关文章

  1. java设计模式学习笔记--接口隔离原则

    接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类 ...

  2. openrisc 之 Wishbone总线学习笔记——接口信号定义

    这部分内容就是copy下来的,网上到处都有.先看看接口啥样子,在详细说明 接口定义copy http://blog.csdn.net/ce123/article/details/6929897.百度文 ...

  3. Java编程思想学习笔记——接口

    1.抽象类和抽象方法 抽象方法:不完整的,仅有声明而没有方法体. abstract void f(); 抽象类:包含抽象方法的类.(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的.) 1.用抽 ...

  4. JAVA学习笔记--接口

    一.抽象类和抽象方法 在谈论接口之前,我们先了解一下抽象类和抽象方法.我们知道,在继承结构中,越往下继承,类会变得越来越明确和具体,而往上回溯,越往上,类会变得越抽象和通用.我们有时候可能会需要这样一 ...

  5. C#图解教程学习笔记——接口

    一.接口概念接口是指定一组函数成员而不实现它们的引用类型.所以只能类和结构来实现接口. 二.声明接口1. 接口声明不能包含:数据成员.静态成员,只能包含以下类型的非静态成员函数:方法.属性.事件.索引 ...

  6. golang学习笔记--接口

    go 的接口类型用于定义一组行为,其中每个行为都由一个方法声明表示. 接口类型中的方法声明只有方法签名而没有方法实体,而方法签名包括且仅包括方法的名称.参数列表和结果列表. 只要一种数据类型的方法集合 ...

  7. C#学习笔记-接口与抽象类

    namespace ClassLesson { class Program { static void Main(string[] args) { ); Console.WriteLine(perso ...

  8. java设计模式学习笔记--单一职责原则

    单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...

  9. RESTful接口设计原则/最佳实践(学习笔记)

    RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...

  10. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. php MySQL 选择数据库

    在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库. 从命令提示窗口中选择MySQL数据库 在 mysql> 提示窗口中可以很简单的选择特定的数据库.你 ...

  2. 24 | MySQL是怎么保证主备一致的?

    在前面的文章中,我不止一次地和你提到了binlog,大家知道binlog可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了binlog就可以跟主库保持一致了呢?今天我就正式地 ...

  3. 三十一.MySQL存储引擎 、 数据导入导出 管理表记录 匹配条件

    1.MySQL存储引擎的配置 查看服务支持的存储引擎 查看默认存储类型 更改表的存储引擎 设置数据库服务默认使用的存储引擎 1.1 查看存储引擎信息 mysql> SHOW ENGINES\G ...

  4. java+下载+大文件断点续传

    java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路:1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操 ...

  5. pyexcel_xlsx

    from pyexcel_xlsx import get_data,save_data excel_data = get_data('xxxx.xlsx文件存储位置') #得到的excel_data是 ...

  6. leetcode解题报告(14):Max Consecutive Ones

    描述 Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: ...

  7. P3410 拍照

    漂亮小姐姐点击就送:https://www.luogu.org/problemnew/show/P3410 题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一 ...

  8. Queue Pair in RDMA (zz)

    Queue Pair in RDMA 首页分类标签留言关于订阅2018-03-21 | 分类 Network  | 标签 RDMA 一个CA(Channel Adapter)可以包含多个QP,QP相当 ...

  9. 解决ubuntu14.04 启动时卡在 Waiting for network configuration...

    两种解决方法: 1.把/etc/network/interfaces中没有用到的配置删除掉 2.把 /etc/init/failsafe.conf 文件中的 sleep 40, sleep 59 注释 ...

  10. java中int 和String相互转换

    一.String转为int int i=Integer.parseInt(string):int i=Integer.valueOf(s).intValue(); 二.int转为String Stri ...