实现重写
实现派生类中基类的成员称为重写。在C#中,可以重写方法、属性和索引器。
重写是多态性的一种形式,因为它使您能够创建具有相同名称和不同功能的不同代码块。
重写函数
在面向对象编程中,子类可以提供超类中已定义的专门版本的函数。这称为函数重写。
函数重写是通过向函数提供相同的名称、参数和返回类型实现的。子类中的实现替换或重写其超类中的实现。
调用的函数版本取决于用于调用该函数的对象。如果超类的对象用于调用方法,那么将执行该超类中定义的函数;如果子类的对象用于调用方法,那么将执行该子类中定义的函数。
通过对子类中定义的函数使用修饰符override可以重写函数。超类中定义的函数必须是抽象或虚拟才能被重写。
小问题:
说明下面的语句正确还是错误。
超类中定义的函数必须是抽象或虚拟才能被重写。
a.正确
b.错误
答案:a.正确
重写属性
类似于函数,属性也可被重写。通过在派生类中提供具有相同名称和返回类型的属性来实现属性重写。超类中定义的属性必须是抽象或虚拟才能被重写。
抽象属性
可以使用关键字abstract将类中的属性声明为抽象。抽象属性没有代码。超类中定义的属性的set和get访问器使用分号表示。它们没有自己的主体。在子类中,必须一并实现set和get访问器。如果抽象类只包括set访问器,那么可以在派生类中只实现set访问器。
思考以下代码:
using System;
abstract class Shape
{
protected int x;
public abstract int X
{
get;
set;
}
}
class Sqyare:Shape
{
public override int X
{
get
{
return x;
}
set
{
x = value; /* value is a variable present by default in the set accessor */
}
}
public static