zoukankan      html  css  js  c++  java
  • C#高级编程读书笔记之继承

    第四章 继承
    4.1 继承的类型
    4.1.1 实现继承和接口继承
    在面向对象的编程中,有两种截然不同的继承类型:实现继承和接口继承
    (1) 实现继承:表示一个继承派生于一个基类型,拥有该基类型的所有成员和函数。
    (2) 接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码。
    4.1.2多重继承
    一个c#类(除了Object类之外)都有一个基类,还可以有任意多个基接口。
    4.1.3结构和类
    结构不支持继承,但支持接口继承。定义结构和类可以总结为:
    (1) 结构总是派生于System.ValueType,它们还可以派生于任意多个接口。
    (2) 类总是派生于用户选择的另一个类,它们还可以派生于任意多个接口。
    4.2 实现继承
    4.2.1 虚方法
    把一个基类函数声明为virtual,该函数就可以在派生类中重写了。也可以把属性声明为virtual。
    C#要求在派生类的函数重写另一个函数时,要使用override关键字显示声明。
    4.2.2 隐藏方法
    如果签名相同的方法在基类和派生类都进行了声明,但该方法没有声明为virtual和override,派生类就会隐藏基类方法。
    在大多数情况下,是要重写方法,而不是隐藏方法,因为隐藏方法会存在为给定类的实例调用错误方法的危险。
    在c#中,应使用new关键字声明我们要隐藏一个方法(隐藏基类具有相同函数名和签名的方法)
    4.2.3 调用函数的基类版本
    C#有一种特殊的语法用于从派生类中调用方法的基类版本:base.<MethodName>()(在java中用super关键字实现)。
    注意,可以使用base.<MethodName>()语法调用基类中的任何方法,不必在同一个方法中的重载中调用它。
    4.2.4 抽象类和抽象函数
    C#运行把类和函数声明为abstract,抽象类不能实例化,而抽象函数没有执行代码,必须在非抽象的派生类中重写。如果类包含抽象函数,则该类必须是抽象类。
    4.2.5 密封和密封方法
    C#允许把类和方法声明为sealed。对于类来说表示不能继承该类,对于方法来说,表示不能重写该方法。(java中对应sealed的关键字子final)
    如果定义了一个新方法,但不想让别人重写它,首先不要把它声明为virtual。如果要重写某个基类方法,在派生类的重写方法使用sealed关键字确保该方法提供的代码为最终代码,其他人不能再重写它。
    4.2.6 派生类的构造函数
    构造函数的调用顺序是先调用System.Object,再按照层级结构由上而下进行,直到到达编译器要实例化的类为止。
    4.3 修饰符
    4.3.1 可见性修饰符
    Public、proteced、internal、private、proteced internal
    不要把类型定义为protected、private和protected intenal 因为这些修饰符对于包含在命名空间中的类型是没有意义的。因此这些修饰符只能应用于成员。但是,可以用这些修饰符定义嵌套的类型(即包含在其它类型中的类型),因为在这种情况下,内嵌的类型也有成员状态。如下:
    Public class OuterClass
    {
    Protected class InnerClass
    {
    }
    }
    4.3.2 其它修饰符
    下面的修饰符可以用于类型的成员,而且有不同的用途,在应用于类型时,其中的几个修饰符也是有意义的。如abstract和sealed
    new 应用于函数成员 成员用相同的签名隐藏继承的成员。
    static 应用于所有成员 成员不在类的具体实例上执行。
    virtual 仅类和函数成员可用 成员可以由派生类重写
    abstract 仅函数成员可用 虚拟成员定义了成员的签名,但没有提供实现的代码
    override 仅函数成员可用 成员重写了继承的虚拟或抽象成员
    sealed 应用于类 成员重写了继承的虚拟成员,但继承该类的任何类都不能重写该成员。该修饰符必须和override一起使用。
    extern 仅静态方法 成员在外部用另外一种语言实现
    4.4 接口
    一般情况下,接口只能包含方法、属性、索引器和事件的声明。
    在接口定义中还不允许声明成员上的修饰符。接口成员总是公共的,不能声明为虚拟或静态。
    4.4.1 定义和实现接口
    4.4.2 派生的接口

     


     

  • 相关阅读:
    LayoutInflater作用及使用--自定义EditText,自带清除内容按钮
    SSL backend error when using OpenSSL pycurl install error
    pypyodbc 的坑
    mongo aggregate 删除重复数据
    如何验证代理ip的正确性
    python的非官方的一个下载lib的地方
    rabbitmq web 管理系统的信息
    内存泄漏分析
    readme 语法
    logging dictconfig
  • 原文地址:https://www.cnblogs.com/zoupeiyang/p/1428632.html
Copyright © 2011-2022 走看看