重写的概念和作用
在 C# 中,子类可以通过重写(override)基类的方法和属性来实现对基类的更改和完善。重写的作用在于子类可以继承基类的所有方法和属性,但有时基类的方法和属性并不能完全满足子类的需求,为此子类需要对基类的方法和属性进行修改和补充。通过重写,子类可以拥有自己的方法和属性,这些方法和属性可以覆盖基类的方法和属性。
重写方法语法
在 C# 中,可以使用 override 关键字来重写父类方法。重写方法的语法如下:
public override 方法的返回类型 方法名(参数列表)
{
//方法体
}
其中,public 修饰符确定了方法的访问权限;override 关键字指示该方法是对基类中同名方法的重写;方法的返回类型、方法名、参数列表必须与基类方法相同。
注意事项:
重写方法的访问权限不能低于基类方法的访问权限。
重写方法只能出现在子类中,子类的类型必须是基类类型的派生类。
重写方法必须与基类方法在相同的类中。
使用 virtual 关键字来定义基类方法,以使其可以被子类重写。
不能使用 static 或 private 修饰符来定义重写方法。
重写方法可以使用 base 关键字调用基类中的方法。
重写属性语法
与重写方法类似,也可以使用 override 关键字来重写父类属性。重写属性的语法如下:
public override 返回类型 属性名
{
get
{
// 获取属性值的代码
}
set
{
// 设置属性值的代码
}
}
其中,get 访问器用于获取属性的值,set 访问器用于设置属性的值。
注意事项:
与重写方法类似,重写属性的访问权限不能低于基类属性的访问权限。
重写属性只能出现在子类中,子类的类型必须是基类类型的派生类。
重写属性必须与基类属性在相同的类中。
使用 virtual 关键字来定义基类属性,以使其可以被子类重写。
不能使用 static 或 private 修饰符来定义重写属性。
重写属性可以使用 base 关键字访问基类中的属性。
重写示例
下面的示例展示了如何在 C# 中使用重写来扩展基类的功能。
基类:
public class Animal
{
public virtual void Speak()
{
Console.WriteLine("Animal speaks");
}
}
子类:
public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("Dog barks");
}
}
在上述示例中,Animal 类定义了 Speak 方法,该方法可以被子类重写。Dog 类继承了 Animal 类,并重写了 Speak 方法,使得 Dog 实例调用 Speak 方法时输出 "Dog barks"。
下面是使用该示例的代码:
Animal animal = new Animal();
animal.Speak(); //输出 "Animal speaks"
Dog dog = new Dog();
dog.Speak(); //输出 "Dog barks"
在上述代码中,首先创建了一个 Animal 实例并调用其 Speak 方法,输出 "Animal speaks"。然后创建了一个 Dog 实例并调用其 Speak 方法,输出 "Dog barks"。
总结
重写(override)是 C# 中继承的重要特性之一,它允许子类对基类的方法和属性进行修改和完善。重写方法和属性的语法基本相同,两者的注意事项也很相似。在使用重写时要注意访问权限和基类的类型,以及如何使用 base 关键字来调用基类的方法和属性。通过重写,可以使类更加灵活和可扩展,适应不同的需求。