解读经典《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)、技术专题、视野知识、源码下载等内容。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值