C#:重写基函数(override)

本文探讨了面向对象编程中的多态特性,通过C#代码示例解释了如何重写基类方法。当子类需要提供与父类不同行为的同名方法时,可以使用`override`关键字进行重写。文章展示了Animal和Bird两个类,以及它们的Move方法如何被重写和调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    面向对象编程的三大特性是继承,封装和多态。当我们从父类中继承了一种方法,但是我们事实上需要的是另外一种方法,这时候我们就可以通过重写方法,实现一个方法名对应多种方法。

    举例来说,我们有一个类名叫Animal,其中有一个方法名为Move

class Animal
    {
        public virtual void Move()
        {
            Console.WriteLine("Move!");
        }
    }

    有一个继承于该类的子类Bird,其也有一个Move方法,而Bird里面的Move方法和父类中的不一致,我们需要重写。重写方法需要使用关键词override

class bird : Animal
    {
        public override void Move()
        {
            Console.WriteLine("Fly!");
        }
    }

    我们在主函数中分别调用这两个方法

static void Main(string[] args)
        {
            Animal myAnimal = new Animal();
            myAnimal.Move();

            bird myBird = new bird();
            myBird.Move();

            Console.ReadKey();
        }

    效果

### 方法重写的基础概念 在面向对象编程中,继承允许子类扩展或修改父类的行为。`override` 关键字用于实现多态性,使派生类能够提供基类虚方法的新实现[^1]。 ### `override` 的基本语法 当定义一个覆盖的方法时,必须遵循特定的语法规则: ```csharp public class BaseClass { public virtual void MethodToOverride() { Console.WriteLine("Base method"); } } public class DerivedClass : BaseClass { public override void MethodToOverride() { Console.WriteLine("Derived method"); } } ``` 在这个例子中,`MethodToOverride()` 是一个虚拟方法,在 `BaseClass` 中声明并可以在任何继承自它的类里被覆写。为了在 `DerivedClass` 中重新定义此行为,使用了 `override` 关键字来指定这是对基类同名成员的一个新版本。 ### 使用场景举例 假设有一个表示几何形状的抽象基类 Shape 和几个具体的形状如 Circle 或 Rectangle 继承自它。如果希望每个具体类型的面积计算方式不同,则可以创建一个名为 GetArea 的公共虚函数,并让各个子类通过 `override` 来给出各自的实现逻辑。 ```csharp public abstract class Shape { public abstract double GetArea(); } public class Circle : Shape { private readonly double radius; public Circle(double r) => this.radius = r; public override double GetArea() { return Math.PI * radius * radius; } } // Similar implementation would exist for other shapes like Rectangle. ``` 这里展示了如何利用 `abstract` 类型配合 `virtual/override` 实现更灵活的设计模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值