第十三章 接口

1. 概述

  本章将讨论如何定义和使用一个接口,还要提供一些指导原则,帮助你判断何时应该使用接口而不是基类。

2. 名词解释

3. 主要内容

  3.1 类和接口继承

    ① 在CLR中,任何类都肯定是从一个类(而且只能是一个从Object派生的类)派生的。

      ②CLR还允许开发人员定义接口,它实际只是对一组方法签名进行了统一命名。

  3.2 定义接口

    对CLR而言,接口定义就像是一个类型定义。CLR会为接口类型对象定义一个内部数据结构,同时可用反射机制来查询接口类型的功能。

  3.3 继承接口

    如果实现一个接口方法时没有显示标记为virtual,编译器会将它们标记virtual和sealed。

  3.4 关于调用接口方法的更多探讨

    System.String类型实现了以下几个接口:IComparable, ICloneable, IConvertible, IEnumerable, IComparable<String>,

    IEnumerable<Char>, IEquatable<String>.

  3.5 隐式和显式接口方法实现(幕后发生的事情)

    在C#中,将定义方法的那个接口的名称作为方法名的前缀,创建的就是一个 显式接口方法实现(Explicit Interface Method Implementation,     EIMI)。

    EIMI不能指定可访问性(默认private),不能标记为virtual。

  3.6 泛型接口

    ① 编译时类型安全性。

    ② 处理值类型时,大量减少的装箱次数。

    ③ 类可以实现同一个接口若干次,只要每次使用不同的类型参数。

  3.7 泛型和接口约束

    泛型类型参数约束为接口的好处:

    ① 可将一个泛型类型参数约束为多个接口。

    ② 传递值类型的实例时可减少装箱操作。

  3.8 实现多个具有相同方法名和签名的接口

    必须用 显式接口方法实现。

  3.9 用显式接口方法实现来增强编译时类型安全性

    对于没有泛型版本的接口,可以用 显式接口方法实现 来增强类型安全性和减少装箱。

internal struct SomeValueType : IComparable
{
    private Int32 m_x;
    public SomeValueType(Int32 x) { m_x = x; }

    public Int32 CompareTo(SomeValueType other)
        return (m_x - other.m_x);

    Int32 IComparable.CompareTo(Object other)
        return CompareTo((SomeValueType) other);
}

  3.10 谨慎使用显式接口方法实现(EIMI)

    ① 没有文档解释一个类型具体如何实现一个EIMI,也没有智能感知支持。

    ② 值类型的实例在转型为接口时装箱。

    ③ EIMI不能由派生类型调用。

  3.11 设计:基类还是接口

    ① IS-A vs CAN-DO 关系。

    ② 易于使用。(使用基类要易于使用接口)

    ③ 一致性的实现。(无法保证任何人都能百分之百正确的实现一个接口)

    ④ 版本控制。(向接口添加一个成员,会强迫接口的继承者更改源码)

4. 总结

时间: 2024-08-11 15:11:17

第十三章 接口的相关文章

“全栈2019”Java第六十三章:接口与抽象方法详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十三章:接口与抽象方法详解 下一章 "全栈2019"Java第六十四章:接口与静态方法详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&qu

“全栈2019”Java第八十三章:内部类与接口详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第八十三章:内部类与接口详解 下一章 "全栈2019"Java第八十四章:接口中嵌套接口详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&quo

《汇编语言 基于x86处理器》第十三章高级语言接口部分的代码 part 1

? 书中第十三章的程序,主要讲了汇编语言和 C/++ 相互调用的方法 ● 代码,数组求和的几种优化 1 int arraySum(int array[], int count) ; O0 2 { 3 010716D0 push ebp 4 010716D1 mov ebp,esp 5 010716D3 sub esp,0D8h 6 010716D9 push ebx 7 010716DA push esi 8 010716DB push edi 9 010716DC lea edi,[ebp-0

Gradle 1.12 翻译——第十三章 编写构建脚本

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/40976325 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin

Java编程思想第四版读书笔记——第十三章 字符串

Java编程思想第四版读书笔记--第十三章 字符串 字符串的操作是计算机程序设计中最常见的行为. 关键词: StringBuilder ,StringBuffer,toString(),format转换,正则表达式, 1.不可变String String对象时不可变的.每当把String对象作为方法的参数时,都会复制一份引用.(其实就是对函数中参数列表中参数的操作不会影响外面的原参数) 如下: import static net.mindview.util.Print.*; public cla

第五——十三章的作业

第五章 1.团队模式和团队的开发模式有什么关系? 团队模式指团队的分工模式,团队内部的结构,团队开发模式指团队开发的流程及步骤 2.如果你领头开展一个全新的项目,你要怎么选择“合适”的团队模式? 根据团队的能力和项目的结构,选择合适的团队模式.如果大家都比较自觉,且其中有一人能力较强,就会选择主治医师模式.如果项目比较复杂且每个人都有自己熟悉的开发领域,会选择功能团队模式.如果项目在不同方向和领域都有任务,就会选交响乐团模式.如果是开放式项目,可能会选择爵士乐模式.如果开发的人非常多,会选择官僚

MiS603开发板 第十三章 千兆网RGMII PHY测试

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第十三章 千兆网RGMII PHY测试 13.1 RGMII 简介 RGMII(Reduced Gigabit Me

Java学习笔记—第十三章 数据库编程入门

第十三章 数据库编程入门 了解JDBC Java中对数据库的访问主要是通过JDBC进行的.JDBC是Java数据库连接技术(Java Database Connectivity)的简称,是用于执行SQL语句的API,可以为多种关系数据库提供统一访问.由一组用Java语言编写的类和接口组成.(SQL是Structure Query Language的缩写,意义为结构化查询语言,是一种标准的关系数据库访问语言.) JDBC的工作机制 使用JDBC完成对数据库的访问主要包括以下五个层次:Java应用程

《Java从入门到精通》第十三章学习笔记

第十三章 Swing程序设计 一.Swing概述 Swing是GUI(图形用户界面Graphic User Interface)开发工具包,在AWT(抽象窗口工具 Abstract Windows Tool)的基础上使开发跨平台的Java应用程序界面成为可能.使用Swing开发的Java程序,其界面是不受本地系统平台限制的. 二.Swing常用窗体 1.JFrame框架窗体 JFrame窗体是一个容器,它是Swing程序中各个组建的载体,可以通过继承java,swing.JFrame类创建一个窗