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

 

posted @ 2010-08-02 14:35  岩仔  阅读(544)  评论(0编辑  收藏  举报