C#简单理解-方法的重载和重写

本文详细介绍了方法重载与重写的概念及其应用。重载指在同一类中使用相同名称但参数不同的多个方法;而重写则是在继承关系中子类对父类方法的重新实现。文章通过具体示例帮助读者理解这两种方法的区别。

方法的重载:方法名相同,参数列表不同(参数的类型,个数不同)。和参数的顺序以及方法的返回值没有关系
正确示例:


错误示例:
 

方法的重写:父类的方法在子类中进行重新编写。
如何重写:
1,父类被重写发方法加上virtual成为虚方法
2,子类重写的方法加上override
具体可参见上一篇:C#面向对象的一些知识

 

 

### 什么是方法重写(Override)? 方法重写是指在派生类中重新定义基类中声明为 `virtual`、`abstract` 或 `override` 的方法。通过重写,可以在子类中提供与父类不同的实现逻辑,同时保持方法签名一致[^4]。这样做的主要目的是实现多态性,即运行时根据对象的实际类型来决定调用哪个方法。 #### 示例:方法重写 ```csharp class Base { public virtual void Print() { Console.WriteLine("Print in Base"); } } class Derived : Base { public override void Print() { Console.WriteLine("Print in Derived"); } } ``` 在这个例子中,`Base` 类中的 `Print` 方法被标记为 `virtual`,表示它可以被子类重写;而 `Derived` 类使用 `override` 关键字提供了自己的实现[^3]。 --- ### 什么是方法重载(Overload)? 方法重载是指在同一类中定义多个同名的方法,但这些方法的参数列表(参数的数量、类型或顺序)必须不同。返回值类型不能作为区分重载方法的依据。重载通常用于增强代码的可读性灵活性,使开发者可以根据不同的输入调用相同名称的方法。 #### 示例:方法重载 ```csharp class MathOperations { public int Add(int a, int b) { return a + b; } public double Add(double a, double b) { return a + b; } public string Add(string a, string b) { return a + b; } } ``` 上述代码中,`Add` 方法被多次定义,分别处理整数、浮点数字符串类型的加法操作。编译器会根据传入参数的类型自动选择合适的方法[^5]。 --- ### 方法重写重载的主要区别 | 特性 | 方法重写(Override) | 方法重载(Overload) | |------|----------------------|----------------------| | 所属类 | 发生在父子类之间 | 发生在同一个类内 | | 方法签名 | 必须完全相同 | 参数必须不同(数量、类型或顺序) | | 关键字 | 使用 `virtual` `override` | 不需要特殊关键字 | | 多态支持 | 支持运行时多态 | 不涉及多态机制 | | 访问权限 | 重写方法访问级别必须一致 | 可以有不同的访问修饰符 | --- ### 使用场景对比 - **方法重写**适用于希望子类改变从父类继承的方法行为的情况。例如,在图形绘制系统中,`Shape` 类可能有 `Draw()` 方法,而 `Circle` `Rectangle` 子类可以分别重写方法以实现各自形状的绘制逻辑。 - **方法重载**适用于希望一个方法名能适应多种数据类型的场景。例如,数学计算类中的 `CalculateArea()` 方法可以根据传入的参数(如半径、长宽等)计算不同几何图形的面积。 --- ### 注意事项 - 在进行方法重写时,必须确保基类方法是 `virtual`、`abstract` 或 `override` 的,否则无法覆盖其行为。 - 使用 `new` 关键字可以在子类中隐藏基类方法,但这不是真正的重写,也不会实现多态效果。 - 重载方法之间仅靠返回类型的不同是不合法的,因为 C# 编译器无法据此判断应调用哪一个方法[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值