谈谈C#中的三个关键词new , virtual , override

 C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可使程序结构更加清晰,代码重用性更高。
如下是msdn中对newvirtualoverride的定义:
        使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。
        virtual 关键字用于修改方法或属性的声明,在这种状况下,方法或属性被称做虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。
调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,若是没有派生类重写该成员,则它多是原始成员。默认状况下,方法是非虚拟的。不能重写非虚方法。
不能将 virtual 修饰符与如下修饰符一块儿使用:
static    abstract    override
        使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具备相同的签名。
不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。
重写声明不能更改虚方法的可访问性。重写方法和虚方法必须具备相同的访问级修饰符。
不能使用下列修饰符修改重写方法:
new   static    virtual   abstract
重写属性声明必须指定与继承属性彻底相同的访问修饰符、类型和名称,而且重写属性必须是虚拟的、抽象的或重写的。 
能够稍微概括一下:
一、对于基类中说明为虚的方法则必须在派生类中new或者override( :对于基类的虚方法,虽然你在派生类中即不new也不override,但系统仍是会提示你添关键字。不然系统将视其为隐藏。咱们的意思是同样的,但总以为明明确确写上关键字仍是好些)。 二、若是用基类指针指向派生类对象的方式,动态匹配的源动力是virtual,而new和override都会阻止这种向下寻求匹配的行为,因此要使虚函数的性质得已保持下去,就要隐藏基类的虚方法,即在派生类中隐藏基类虚方法时,同时加以virtual关键字,使在多层次继承中可以调用到对象自身的版本。 三、在多层次继承中,三个关键字使用次序有限定,new没有使用前提,即无论是普通方法、虚方法仍是重写了的方法。virtual的使用,在它的基类不能有函数签名相同的方法,不然系统将提示添加new,即隐藏基类中的方法。virtual通常只出现一次,除非要在子类中隐藏父类的虚方法。override的使用是为了重写基类虚方法。
相关文章
相关标签/搜索