override修饰符

使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。

不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。

重写声明不能更改虚方法的可访问性。重写方法和虚方法必须具有相同的访问级修饰符。

不能使用下列修饰符修改重写方法:

new   static    virtual   abstract

重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且重写属性必须是虚拟的、抽象的或重写的。

有关访问基类成员的更多信息,请参见 7.5.8 基访问。

有关重写方法的更多信息,请参见 10.5.4 重写方法。

示例

请参见 virtual 关键字的示例。

从具有重写方法的派生类中,仍然可以通过使用 base 关键字来访问同名的重写基方法。例如,如果有虚方法 MyMethod() 和派生类上的重写方法,就可以通过下列调用从派生类访问此虚方法:

base.MyMethod()

将此方法与使用范围解析运算符 (::) 和基类名的 C++ 方法进行比较,例如:

My_Base_Class_Name::MyMethod()
示例

在该示例中,有一个基类 Square 和一个派生类 Cube。因为立方体的面积是六个正方形的面积之和,因此可以通过调用基类上的 Area() 方法来计算。

None.gif //  cs_override_keyword.cs
None.gif
//  Calling overriden methods from the base class
None.gif
using  System;
None.gif
class  TestClass 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif   
public class Square 
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif      
public double x;
InBlock.gif
InBlock.gif      
// Constructor:
InBlock.gif
      public Square(double x) 
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif         
this.x = x;
ExpandedSubBlockEnd.gif      }

InBlock.gif
InBlock.gif      
public virtual double Area() 
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif         
return x*x; 
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockEnd.gif   }

InBlock.gif
InBlock.gif   
class Cube: Square 
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif      
// Constructor:
InBlock.gif
      public Cube(double x): base(x) 
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
ExpandedSubBlockEnd.gif      }

InBlock.gif
InBlock.gif      
// Calling the Area base method:
InBlock.gif
      public override double Area() 
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif         
return (6*(base.Area())); 
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockEnd.gif   }

InBlock.gif
InBlock.gif   
public static void Main()
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif      
double x = 5.2;
InBlock.gif      Square s 
= new Square(x);
InBlock.gif      Square c 
= new Cube(x);
InBlock.gif      Console.WriteLine(
"Area of Square = {0:F2}", s.Area());
InBlock.gif      Console.WriteLine(
"Area of Cube = {0:F2}", c.Area());
ExpandedSubBlockEnd.gif   }

ExpandedBlockEnd.gif}

None.gif
输出
Area of Square = 27.04
Area of Cube = 162.24

转载于:https://www.cnblogs.com/linuxSeek/archive/2005/03/04/113224.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值