【c# 学习笔记】接口
一、什么是接口
接口 可以理解为对一组方法声明进行的同一命名,但这些方法没有提供任何实现。也就是说,把一组方法声明在一个接口中,然后继承于该接口的类都
需要实现这些方法。
例如,很多类型(比如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# 学习笔记】接口的更多相关文章
- java设计模式学习笔记--接口隔离原则
接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类 ...
- openrisc 之 Wishbone总线学习笔记——接口信号定义
这部分内容就是copy下来的,网上到处都有.先看看接口啥样子,在详细说明 接口定义copy http://blog.csdn.net/ce123/article/details/6929897.百度文 ...
- Java编程思想学习笔记——接口
1.抽象类和抽象方法 抽象方法:不完整的,仅有声明而没有方法体. abstract void f(); 抽象类:包含抽象方法的类.(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的.) 1.用抽 ...
- JAVA学习笔记--接口
一.抽象类和抽象方法 在谈论接口之前,我们先了解一下抽象类和抽象方法.我们知道,在继承结构中,越往下继承,类会变得越来越明确和具体,而往上回溯,越往上,类会变得越抽象和通用.我们有时候可能会需要这样一 ...
- C#图解教程学习笔记——接口
一.接口概念接口是指定一组函数成员而不实现它们的引用类型.所以只能类和结构来实现接口. 二.声明接口1. 接口声明不能包含:数据成员.静态成员,只能包含以下类型的非静态成员函数:方法.属性.事件.索引 ...
- golang学习笔记--接口
go 的接口类型用于定义一组行为,其中每个行为都由一个方法声明表示. 接口类型中的方法声明只有方法签名而没有方法实体,而方法签名包括且仅包括方法的名称.参数列表和结果列表. 只要一种数据类型的方法集合 ...
- C#学习笔记-接口与抽象类
namespace ClassLesson { class Program { static void Main(string[] args) { ); Console.WriteLine(perso ...
- java设计模式学习笔记--单一职责原则
单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...
- RESTful接口设计原则/最佳实践(学习笔记)
RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- 第12章、乐活人生的ABCDE
目录 第12章.乐活人生的ABCDE 什么时候该乐观 让自己乐观的ABC 确认ABC 你的ABC记录 反驳和转移注意 转移注意 反驳 保持距离 学习与自己争辩 证据 其他可能性 暗示 用处 你的反驳记 ...
- cas系列-cas登出(四)
跟登陆一样,登出操作也很重要.由于是多应用间操作,状态保持也是一个要点,根据登出的影响范围,可以将登出操作分为两类: 单应用登出 单点登出(多应用登出) 顾名思义,单应用登出即登出只影响被操作的应用会 ...
- 简易版最长序列(map映射)
题目描述 给你一组数(未排序),请你写设计一个程序:求出里面个数最多的数.并输出这个数的长度. 例如:给你的数是:1. 2. 3. 3. 4. 4. 5. 5. 5 .6, 其中只有6组数:1, ...
- spring bean 的作用域之间有什么区别
spring bean 的作用域之间有什么区别? spring容器中的bean可以分为五个范围.所有范围的名称都是说明的, 1.singleton:这种bean范围是默认的,这种范围确保不管接受到多个 ...
- IOS开发环境搭建
前置条件 1. 必要:一台装有Mac OS X操作系统的电脑:经济允许的话可以买一部Mac book:否则的话,可以试试黑苹果或虚拟机. 2.必要:一个有可用的Apple ID:免费,在Apple的官 ...
- 2018-2019-2 20165209 《网络对抗技术》Exp8: Web基础
2018-2019-2 20165209 <网络对抗技术>Exp8: Web基础 1 基础问题回答和实验内容 1.1基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能.一个表 ...
- Qt之模型/视图(委托)
概念 不同于模型 - 视图 - 控制器模式,模型/视图设计不包括用于管理与用户交互的一个完全独立的组件.一般情况,视图负责将模型数据呈现给用户以及处理用户输入.为了输入更加具有灵活性,则由委托来执行交 ...
- win10 sedlauncher.exe占用cpu处理
打开应用和功能,搜KB4023057,然后卸载. 打开系统服务,找到Windows Remediation Service (sedsvc)和Windows Update Medic Service ...
- npm package.json配置整理
通过npm init 创建 package.json文件 参数: name:项目名字 version: 版本号 description: 项目介绍 main: 项目的入口文件 scripts: npm ...
- 项目管理工具-OmniPlan 3 for Mac
链接:https://pan.baidu.com/s/1tp_37fHXHwJuklL1nNSwig 密码:l0sf 激活迷药(里面自带的keygen不能用,用这个好使): Name: Appked ...