zoukankan      html  css  js  c++  java
  • 解读经典《C#高级编程》继承 页107-113.章4

    前言


    本章节开始讲接口。

    接口

    接口的声明很像抽象类,有方法的声明但无方法体。但它比抽象类限制更多。和类比起来,接口的定义有众多限制。

    • 接口只能包含声明,而无方法体
    • 接口只能包含方法、属性、索引器、事件的声明。即不能有:构造函数、字段、操作符重载
    • 成员不允许声明修饰符。接口默认就是public的。

    定义和实现接口

    一个比较典型的接口定义,比如:

    /// <summary>
    /// 虚拟读写器
    /// </summary>
    public class VirtualReader : RFReader, IRFReader, IDevice
    {
        //此类继承自两个接口:设备IDevice,和读写器IRFReader,并继承读写器基类RFReader
        //派生类 需要实现接口声明的所有方法
    }
    

    我们可以看到:

    1. 类可以继承多个接口
    2. 接口命名规范,是以I开头的字符串,即所谓匈牙利(Hungarian)命名法
      这是由C#语法的特殊性决定的,Java的接口就没有这种命名方式。这是因为C#对类和接口,都叫做继承,对接口加I能够明确区分出哪些是接口哪些是类。而Java继承用关键字extends,实现接口用关键字implements,很好区分。

    在接口使用上,“接口引用”完全等同于“类引用”。比如以上的例子,在实例化类时,如下定义都是可以的:

    IDevice device = new VirtualReader();
    IRFReader reader = new VirtualReader();
    VirtualReader vreader = new VirtualReader();
    

    这样就可以在不同的应用场景下,声明不同的类或者接口来实现代码。

    派生的接口

    接口和类一样可以继承。同时,因为接口可以多继承,所以接口变的非常强大。在编程中用好接口是一个基本技能要求。
    举例:

    /// <summary>
    /// 设备
    /// </summary>
    public interface IDevice
    {
        /// <summary>
        /// 当前设备的属性配置
        /// </summary>
        DeviceConfigurations Configurations { get; set; }
    }
    /// <summary>
    /// Rfid读写器/发卡器/读卡器/一体机等
    /// </summary>
    public interface IRFReader : IDevice
    {
        /// <summary>
        /// 读写器类型Id
        /// </summary>
        ReaderType TypeId { get; set; }
    
        /// <summary>
        /// 读写器是否连接
        /// </summary>
        bool IsConnected { get; set; }
    
        /// <summary>
        /// 读写器是否正在读取
        /// </summary>
        bool IsReading { get; set; }
    }
    

    到此为止,本章的继承已经讲完了。我们讲到了对类的单继承,对接口的多继承。以及在继承过程中使用多种关键字,实现不同的特性,比如virtual,override,new,sealed等。还讲到了类构造时使用初始化器的原理。
    下一章我们开始讲解泛型。泛型是个好东西,理解好、使用好泛型是个基础技术能力。


    觉得文章有意义的话,请动动手指,分享给朋友一起来共同学习进步。
    欢迎关注本人如下公众号 “产品技术知与行” ,打造全面的结构化知识库,包括原创文章、免费课程(C#,Java,Js)、技术专题、视野知识、源码下载等内容。

    微信公众号
    扫描二维码关注

    回到目录,再看看相关文章

  • 相关阅读:
    Shiro笔记---身份验证
    网络时间获取
    网络信息获取代码2------ 慕课第10 北大唐大壮
    CentOS 修改主机名
    CentOS SELinux服务关闭与开启
    SecureCRT 上传下载
    【html】行内元素,块级元素
    【Html】第一个网页helloworld
    C++对C语言的拓展(1)—— 引用
    C++语言对C的增强(2)—— const增强、枚举的增强
  • 原文地址:https://www.cnblogs.com/holyknight17/p/10419922.html
Copyright © 2011-2022 走看看