0

0

C# 怎么实现方法的重载和重写_C# 方法重载与重写技巧详解

畫卷琴夢

畫卷琴夢

发布时间:2025-11-11 20:02:02

|

468人浏览过

|

来源于php中文网

原创

方法重载在类内通过不同参数列表实现同名方法,编译时确定调用版本;方法重写通过virtual/override在继承中修改父类行为,运行时决定执行逻辑。

c# 怎么实现方法的重载和重写_c# 方法重载与重写技巧详解

方法重载重写是 C# 面向对象编程中的两个核心概念,它们都能实现“同名方法不同行为”的效果,但应用场景和实现方式完全不同。下面详细说明如何在 C# 中正确使用方法重载与重写,并提供实用技巧。

方法重载(Overloading)

方法重载是指在同一个类中定义多个同名方法,但参数列表不同(参数类型、个数或顺序不同)。编译器根据调用时传入的参数决定调用哪个方法。

注意:返回值类型不同不足以构成重载,必须参数不同。

重载示例:

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
public double Add(double a, double b)
{
    return a + b;
}

public int Add(int a, int b, int c)
{
    return a + b + c;
}

}

重载的关键点:

  • 必须在同一个类中
  • 方法名相同
  • 参数列表必须不同
  • 访问修饰符可以不同
  • 返回类型可不同,但不能仅靠返回类型区分

实用技巧:

合理使用重载能提升 API 的易用性。例如,提供带默认行为的简化版本:

public void Save(string path) => Save(path, encoding: Encoding.UTF8);

public void Save(string path, Encoding encoding) { // 实际保存逻辑 }

方法重写(Overriding)

方法重写用于子类修改父类中 virtualabstract 方法的实现。它体现多态性,运行时根据对象实际类型调用对应方法。

海螺AI
海螺AI

MiniMax平台的AI对话问答工具,你的AI伙伴

下载

重写示例:

public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

public class Dog : Animal { public override void MakeSound() { Console.WriteLine("Woof!"); } }

调用演示:

Animal myDog = new Dog();
myDog.MakeSound(); // 输出:Woof!

重写的关键点:

  • 必须有继承关系
  • 父类方法必须标记为 virtualabstractoverride
  • 子类使用 override 关键字
  • 方法签名(名称、参数)必须完全一致
  • 访问级别不能更严格(如父类 protected,子类不能 public)

实用技巧:

重写时可通过 base 调用父类实现:

public override void MakeSound()
{
    base.MakeSound(); // 先执行父类逻辑
    Console.WriteLine("Dog barks loudly.");
}

重载 vs 重写 对比总结

理解两者的区别有助于正确设计类结构:

  • 作用范围:重载在类内部,重写在父子类之间
  • 绑定时机:重载是编译时决定,重写是运行时决定
  • 关键字:重载无需特殊关键字,重写需 virtual/override
  • 目的:重载提供多种调用方式,重写实现多态行为

基本上就这些。掌握重载和重写的规则与场景,能让代码更灵活、可维护性更强。关键在于理解“什么时候用哪个”。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

54

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

46

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

14

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

14

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

14

2025.11.27

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

30

2025.12.25

错误代码dns_probe_possible
错误代码dns_probe_possible

本专题整合了电脑无法打开网页显示错误代码dns_probe_possible解决方法,阅读专题下面的文章了解更多处理方案。

20

2025.12.25

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

37

2025.12.25

word转换成ppt教程大全
word转换成ppt教程大全

本专题整合了word转换成ppt教程,阅读专题下面的文章了解更多详细操作。

6

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.4万人学习

550W粉丝大佬手把手从零学JavaScript
550W粉丝大佬手把手从零学JavaScript

共1课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号