zoukankan      html  css  js  c++  java
  • 第十三章 接口

    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. 总结

  • 相关阅读:
    mac Path had bad ownership/permissions
    iOS,Android,Jave后台AES加密解密
    iOS bug调试技巧学习----breakpoint&condition
    pod trunk push --verbose 失败的原因总结
    CoreAnimation学习,学习总结,记录各种过程中遇到的坑
    封装TableView有可能用到的数据结构和UITableViewCell的一个继承类
    使用类似于中介者模式实现不同VC之间的跳转
    iOS工程师常用的命令行命令总结
    一个简单的图文混排的排版引擎
    如何添加自己封装的代码到Cocoapod
  • 原文地址:https://www.cnblogs.com/stone_lv/p/4325923.html
Copyright © 2011-2022 走看看