在C#中,方法重写(Method Overriding)是面向对象编程的一个重要概念,它允许子类重写(覆盖)父类中具有相同名称和签名的方法。方法重写用于实现多态性,使得子类对象可以通过调用重写后的方法来改变或扩展父类方法的行为。
要进行方法重写,需要满足以下条件:
1. 子类必须继承自父类。
2. 子类中需要定义一个与父类中要重写的方法具有相同名称、返回类型和参数列表的方法。
3. 父类中被重写的方法必须使用 `virtual` 或 `abstract` 关键字修饰。
下面是一个简单的示例代码,演示了方法重写的用法:
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a Shape");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a Circle");
}
}
class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a Rectangle");
}
}
class Program
{
static void Main(string[] args)
{
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.Draw(); // 调用圆形的 Draw 方法
shape2.Draw(); // 调用矩形的 Draw 方法
}
}
在上面的代码中,`Shape` 类是父类,`Circle` 类和 `Rectangle` 类是子类。子类分别重写了父类中的 `Draw` 方法。在 `Main` 方法中,通过创建子类对象并将其赋值给父类引用变量,可以实现多态性。调用 `shape1.Draw()` 时,会根据实际的对象类型来动态调用相应的重写方法。
需要注意的是,在子类中重写父类的方法时,重写方法的访问修饰符不能比父类的方法更严格(例如,不能由私有方法重写为公共方法)。而且,子类重写的方法必须具有与父类方法相同的返回类型或其派生类型。