一、什么是接口 

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

需要实现这些方法。

  例如,很多类型(比如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. 2019-2020-1 20199312《Linux内核原理与分析》第二周作业

    c语言代码 // main.c int g(int x) { return x + 4; } int f(int x) { return g(x); } int main(void) { return ...

  2. 006——C#关闭窗口 添加FormClosing事件

    (一)参考文献:C# 添加FormClosing事件 (二)在  项目名.Designer.cs中的InitializeComponent()添加: this.FormClosing += new S ...

  3. Devtool-Console

    1. console面板展示 1.全屏展示 打开开发者工具(option+cmd+i),点击console的tab 2. 在其他面板展示的同时展示console面板 1)esc快捷命令 2)或者选择打 ...

  4. Greenplum 查看表的分区键与分区类型

    方法一 查看表的分区键 select d.nspname||'.'||a.relname as table_name,string_agg(b.attname,',') as column_namef ...

  5. 超过20g的文件+上传

    demo下载地址:jsp-Eclipse,jsp-MyEclipse,PHP,ASP.NET 教程:ASP.NET,JSP,PHP 一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件 ...

  6. BZOJ 1576 树剖+LCT

    题意:给定一张图,保证 $1$ 号点到其他所有点的最短路径是唯一的,求:对于点 $i$,不经过 $1$ 到 $i$ 最短路径上最后一条边的最短路. 题解:可以先建出最短路树,然后枚举每一条非树边. 对 ...

  7. maven 安装 jar 包

    注意 jar 包路径,和版本号 mvn install:install-file -Dfile=E:\ChromeBox\box\kaptcha-2.3.2\kaptcha-2.3.2.jar -Dg ...

  8. js 删除节点

    亲身经历,寻得此法,告知大家=============== 在javascript操作dom树的时候可能会经常遇到增加,删除节点的事情,比如一个输入框后一个增加按钮,一个删除按钮,点击增加就增加 个输 ...

  9. CentOS 7 常用命令大全(转)

    博主最近疯狂迷恋上linux的centos 7 系统,特意从网上找了一篇centos 7的命令大全来学习,下面我分享下这个博客. 转载自:https://blog.csdn.net/o0darknes ...

  10. Vue中的动画效果

    Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate.css ...