• viturl abstract override 的再理解



    对象初始化顺序
    派生类的属性或字段----->基类的属性或字段----->基类的构造函数----->派生类的构造函数                                    

      a 先变量后构造函数   
      b 先静态化后实例化
      c 先基类后派生类构造函数


    c# viturl abstract override 的理解

    virtual标识的方法是允许派生类重写此方法,基类方法中已经有方法体实现,派生类中采有override来标识,重写此方法;
    abstract标识的方法是允许派生类重写此方法,基类方法中没有方法体实现,派生类中采有override来标识,重写此方法,抽象方法只能包含在抽象类中;
    override标识的方法允许派生类重写此方法,基类方法是重写其父类的方法,派生类中采有override来标识,重写此方法;
    派生类方法用NEW标识的,派生类方法隐藏基类的方法;

    /*重载,覆盖,隐藏之间的区别
    *
         重载(overload)用于同一类中的成员函数,这个行为称为多态,其特征为:
         * 1)在同一类中
         * 2)相同的函数名
         * 3)参数不同(包括参数类型不同,或参数个数不同,或两者都不同,注意:和返回值没关系)
         * 4)和是否虚函数无关
         覆盖(override)是指派生类函数覆盖基类函数,其特征为:
         * 1)不同的范围(分别位于派生类与基类)
         * 2)相同的函数名称
         * 3)参数相同
         * 4)基类函数必须是虚函数
         隐藏(hide)是指派生类的函数屏蔽了与其同名的基类函数,其特征为:
         * 1)不同的范围(分别位于派生类与基类)
         * 2)相同的函数名
         (3)若参数不同,基类函数无virtual关键字,基类函数将会被隐藏。(因为派生类和基类不在同一范围,所以是隐藏而不是重载);
        ()若参数不同,基类函数有virtual关键字。基类函数将会被隐藏。(因为派生类和基类不在同一范围,所以是隐藏而不是重载;因为参数不同,所以是隐藏而不是覆盖);
        ()若参数相同,基类函数无virtual关键字。基类函数将会被隐藏。(因为基类函数不是虚函数,所以是隐藏而不是覆盖)。
        ()若参数相同,基类函数有virtual关键字。如果基类函数有多个重载版本,且派生类并没有重写所有的同名虚函数,当在派生类中调用函数时,基类中未被重写的虚函数将被隐藏。(当然,被重写的函数就是覆盖了)。

    * 注意: 如果想在派生类中调用基类中的被隐藏的函数,可以在派生类中填写如下代码:using Base::Fun2

    作者:不老神仙
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御
    探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理
    SVN:Previous operation has not finished; run 'cleanup' if it was interrupted
    探索ASP.NET MVC5系列之~~~1.基础篇---必须知道的小技能
    MVC:The name 'Scripts' does not exist in the current context
    Dapper.Contrib:GetAsync<T> only supports an entity with a [Key] or an [ExplicitKey] property
    Dapper扩展之~~~Dapper.Contrib
    AutoFac在项目中的应用
    群福利:百度云管家-本地SVIP
    【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划
  • 原文地址:https://www.cnblogs.com/allanbolt/p/1790455.html
Copyright © 2020-2023  润新知