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

    目录:

    13.1 类和接口继承

    13.2 定义接口

    13.3 继承接口

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

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

    13.6 泛型接口

    13.7 泛型和接口约束

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

    13.9 用显示接口方法实现来曾强编译时类型安全性

    13.10 谨慎使用显示接口方法实现

    13.11 设计:基本类型

    13.1 类和接口继承

     从Object派生的人任何类实际都继承了:

    方法签名:使代码认为自己是在操作Object类的实例,但实际操作的可能是其他类的实例。

    方法实现:使开发人员定义Object的派生类是不必手动实现Object的方法。

     类继承的一个重要特定是,凡是能使用基类型实例的地方,都能使用派生类型的实例。接口继承的一个重要特点是,凡是能使用具名接口类型的实例的地方,都能使用实现了接口的一个类型的实例。

    13.2 定义接口

    接口对一组方法签名进行了统一命名。接口还能定义事件,无参属性和有参属性(C#索引器) 。接口不能定义任何构造器方法,也不能定义任何实例字段。

    CLR允许定义静态方法,静态字段,常量和静态构造器,但符合CLS标准的接口不允许,因为有的编程语言不能定义或访问它们。

    13.3 继承接口

    在对象上调用接口方法时,调用的是该方法在该对象的类型中的实现。

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

    CLR允许定义接口类型的字段,参数或局部变量。使用接口类型的变量可以调用该接口定义的方法。

    和引用类型相似,值类型可实现零个或多个接口。但值类型的实例在转换为接口类型时必须装箱。这是由于接口变量时引用,必须指向堆上的对象,使CLR能检查对象的类型指针,从而判断对象的确切类型,调用已装箱值类型的接口方法时,CLR会跟随对象的类型对象指针找到对象的方法表,从而调用正确地方法。

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

     在C#中,将定义方法的那个接口的名称作为方法名前缀,就会创建显示接口方法实现(Explicit Interface Method Implementation,EIMI)。EIMI方法不能标记为virual,所以不能被重写

    13.6 泛型接口

     好处:

    泛型接口提供了出色的编译时类型安全性。

    处理值类型时装箱次数会少很多。

    类可以实现同一个接口若干次(每次使用不同的类型参数)。

    13.7 泛型和接口约束

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

    第一可将类型参数约束为多个接口。(传递的参数的类型必须实现全部接口约束)

    第二是传递值类型的实例时减少装箱。

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

     要实现多个接口相同的方法,必须使用“显示接口方法实现”。

    13.9 用显示接口方法实现来曾强编译时类型安全性 

    13.10 谨慎使用显示接口方法实现

     EIMI主要问题:

    没有文档解释类型具体如何实现一个EIMI方法,也没有Microsoft Visual Studio"智能感知"支持。

    值类型的实例在转换成接口时装箱。

    EIMI不能由派生类调用。

    13.11 设计:基本类型

     IS-A对比CAN-DO关系

    类型只能继承一个实现。如果派生类型和基类型建立不起IS-A关系,就不用基类而用接口。接口意味着CAN-DO关系。如果多种对象都“能”做某事,就为它们创建接口。

    易用性 

    对于开发人员,定义基类派生的新类型通常比实现接口的所有方法容易的多。基类型可提供大量功能,所以派生类型可能只需稍作改动。而提供接口的话,新类型必须实现所有成员。

    一致性实现

    无论接口协定订立的多好,都无法保证所有人百分之百正确实现它。如果为基类提供良好的默认实现,那么一开始得到的就是能正常工作并经过良好测试的类型。

    版本控制

    向基类型添加一个方法,派生类型将继承新方法。

    每天学习一丢丢
  • 相关阅读:
    项目中遇到的问题:前台 disabled 与 后台disabled
    差距
    那些零碎的感悟,那些成长的事【壹】
    假期数据结构学习总结
    烟大 2242: 回文(栈和队列)
    烟大 2241: 相同序列(栈和队列)
    烟大 2239: 十进制与八进制的转换(栈和队列)
    烟大 2238: 括号匹配(栈和队列)
    hdu 1018:Big Number(水题)
    hdu 2050:折线分割平面(水题,递归)
  • 原文地址:https://www.cnblogs.com/terry-1/p/10133642.html
Copyright © 2011-2022 走看看