C# 方法重载与重写详解

发布时间:2026/8/6 4:21:02

C# 方法重载与重写详解
引言在C#面向对象编程中方法的重载Overloading和重写Overriding是两个基础且容易混淆的概念。它们都涉及到多个方法拥有相同的名称但实现机制、应用场景和编译时/运行时行为截然不同。本文将系统梳理两者的定义、语法、区别以及常见使用误区帮助读者彻底理清这两个知识点。1. 方法重载Overloading1.1 定义方法重载是指在同一个类中允许多个方法使用相同的名称但参数列表不同参数个数、类型或顺序不同。重载与返回值类型无关仅靠返回值类型不同无法构成重载。1.2 重载的条件方法名称相同参数列表不同个数、类型、顺序至少有一项不同发生在同一个类或派生类中也能对基类方法进行重载但通常指同一作用域不能仅通过返回值类型或参数修饰符如ref、out来区分1.3 示例代码publicclassCalculator{// 两个整数相加publicintAdd(inta,intb){returnab;}// 三个整数相加参数个数不同publicintAdd(inta,intb,intc){returnabc;}// 两个浮点数相加参数类型不同publicdoubleAdd(doublea,doubleb){returnab;}// 参数顺序不同publicstringConcat(intnumber,stringtext){return${number}-{text};}publicstringConcat(stringtext,intnumber){return${text}-{number};}}调用时编译器会根据传入的实参类型和数量自动匹配最合适的方法这属于编译时多态静态多态。1.4 可选参数与重载的冲突当方法带有默认参数时要注意避免产生二义性调用publicvoidPrint(inta,intb0){...}publicvoidPrint(inta){...}// 会产生调用歧义无法通过编译建议在设计中要么使用重载要么使用可选参数不要混用导致混淆。2. 方法重写Overriding2.1 定义方法重写是指派生类重新实现基类中已经定义的虚方法virtual、抽象方法abstract或重写了其他基类的方法override从而在运行时根据对象的实际类型决定调用哪个方法。2.2 重写的条件基类中的方法必须标记为virtual、abstract或本身已经是override派生类中使用override关键字进行重写方法签名必须完全一致名称、参数列表、返回值类型重写方法不能改变访问修饰符的可访问性例如不能将protected改为public但可以把protected internal改为public需谨慎2.3 示例代码// 基类publicclassAnimal{publicvirtualvoidSpeak(){Console.WriteLine(动物发出声音);}}// 派生类publicclassDog:Animal{publicoverridevoidSpeak(){Console.WriteLine(汪汪);}}publicclassCat:Animal{publicoverridevoidSpeak(){Console.WriteLine(喵喵);}}使用多态调用Animala1newDog();Animala2newCat();a1.Speak();// 输出汪汪a2.Speak();// 输出喵喵这种根据运行时对象类型来调用相应方法的行为属于运行时多态动态多态。2.4 重写的链路如果派生类本身又作为基类其override方法依然可以被更深层的子类重写除非使用sealed override阻断重写链。publicclassHusky:Dog{publicoverridevoidSpeak()// 可以继续重写{Console.WriteLine(嗷呜);}}publicclassSealDog:Dog{publicsealedoverridevoidSpeak()// 密封禁止后续重写{Console.WriteLine(汪密封);}}3. 重载与重写的主要区别对比维度重载Overloading重写Overriding发生位置同一个类或派生类中有继承关系的派生类中关键字无额外关键字基类virtual/abstract派生类override方法签名名称相同参数列表不同名称、参数、返回类型完全一致绑定时机编译时静态多态运行时动态多态返回值类型可以不同但不能仅靠它区分必须与基类一致或协变如有主要目的提供多种调用方式方便调用者替换或扩展基类行为与继承的关系不依赖继承可在同一类内实现必须通过继承实现4. 常见误区与最佳实践4.1 误区一重载可以只修改返回值类型错误示例publicintGetValue(){...}publicstringGetValue(){...}// 编译错误仅返回值类型不同4.2 误区二重写可以改变方法签名如果派生类中写了一个同名但参数不同的方法那不是重写而是隐藏new或重载publicclassBase{publicvirtualvoidDoWork(intx){}}publicclassDerived:Base{// 这不是重写而是隐藏如果有new或者产生编译器警告publicvoidDoWork(stringx){}}若要明确隐藏基类成员应使用new关键字若想重写必须签名一致并使用override。4.3 何时使用重载同一个操作有不同类型或数量的输入时如多种构造函数、多种Add方法提高代码的可读性和易用性4.4 何时使用重写基类定义通用行为派生类需要给出具体实现模板方法模式、策略模式等设计模式的实现基础框架和库提供的扩展点4.5 虚方法性能虚方法的调用存在微小的性能开销vtable 查询但对于绝大多数应用场景可以忽略不计。过早优化而避免使用重写是不明智的。5. 总结重载是编译时确定的多态关注“同一个方法名不同的参数”用来提供更方便的调用接口。重写是运行时多态基于继承关系让子类可以替换父类的虚方法行为是实现面向对象扩展性的核心机制。掌握重载与重写的区别是编写清晰、可扩展的C#代码的基础。建议在实际编码中多留意方法的签名和继承链避免混用new与override从而减少难以调试的隐藏 bug。

相关新闻

钙成像数据分析的三大技术挑战与CaImAn的突破性解决方案

钙成像数据分析的三大技术挑战与CaImAn的突破性解决方案

2026/8/6 4:11:02

钙成像数据分析的三大技术挑战与CaImAn的突破性解决方案 【免费下载链接】CaImAn Computational toolbox for large scale Calcium Imaging Analysis, including movie handling, motion correction, source extraction, spike deconvolution and result visualization. 项目…

猫抓浏览器扩展:网页媒体资源一键捕获的终极指南

猫抓浏览器扩展:网页媒体资源一键捕获的终极指南

2026/8/6 4:11:02

猫抓浏览器扩展:网页媒体资源一键捕获的终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓是一款专业的浏览器资源嗅探扩展&…

Prompt与Skill的本质区别:从指令到可复用AI能力的工程化演进

Prompt与Skill的本质区别:从指令到可复用AI能力的工程化演进

2026/8/6 4:11:02

1. 先搞清楚 Skill 和 Prompt 到底解决什么问题Skill 和 Prompt 这两个词最近在 AI 应用开发圈里被频繁讨论,尤其是当一些平台开始提供“Skill 市场”或“Skill 商店”时,很多人会产生一个疑问:Skill 不就是封装好的 Prompt 吗?如…

如何快速上手Sabaki:免费优雅的围棋棋盘与SGF编辑器完整指南

如何快速上手Sabaki:免费优雅的围棋棋盘与SGF编辑器完整指南

2026/8/6 5:21:05

如何快速上手Sabaki:免费优雅的围棋棋盘与SGF编辑器完整指南 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki 想要一款专业又易用的围棋软件吗?Saba…

Unity大文件下载优化:零GC断点续传与固定缓冲区实践

Unity大文件下载优化:零GC断点续传与固定缓冲区实践

2026/8/6 5:21:05

1. 项目概述与核心价值在Unity项目开发中,资源下载是一个绕不开的环节。无论是热更新资源包、动态加载的AB包,还是游戏内的视频、音频素材,动辄几百兆甚至上G的大小是家常便饭。如果你还在用UnityWebRequest或WWW的简单Get方法,遇…

FastAPI 调用第三方接口 403 排查实战:从百炼 LLM 到 apimy.cn 学历验证

FastAPI 调用第三方接口 403 排查实战:从百炼 LLM 到 apimy.cn 学历验证

2026/8/6 5:21:05

本文记录一个 FastAPI 项目(yujhg 后端)在接入「阿里云百炼 DashScope LLM」与「apimy.cn 学历验证接口」时,连续踩中的 6 个 403 / 400 坑,以及逐个定位、修复的完整过程。希望能帮到同样被 403 请求密钥KEY不正确、403 Workspac…

从传递函数到设计调试:深入理解低通滤波器的核心原理与实践

从传递函数到设计调试:深入理解低通滤波器的核心原理与实践

2026/8/6 5:21:05

1. 从“感觉”到“公式”:为什么我们需要理解低通滤波器的传递函数在电路设计、音频处理、控制系统,甚至是图像处理领域,低通滤波器都是一个绕不开的基础元件。我们凭直觉知道它的作用:让低频信号通过,阻挡高频信号。比…

程序员如何入门 Web 安全,半年时间掌握渗透测试核心技能

程序员如何入门 Web 安全,半年时间掌握渗透测试核心技能

2026/8/6 5:21:05

从开发视角切入:为什么安全是上层建筑对于拥有开发经验的程序员来说,转行或进阶 Web 安全往往比零基础小白更具优势。但这里有一个核心认知必须纠正:安全并非独立存在的“黑科技”,而是建立在扎实的计算机基础与开发能力之上的上层…

Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme

Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme

2026/8/6 5:11:04

MaterialExpressiveTheme 与 MaterialTheme 这两个函数都是 Jetpack Compose 的主题包装器,MaterialExpressiveTheme 是 MaterialTheme 的升级版 fun MaterialExpressiveTheme(colorScheme: ColorScheme? null,motionScheme: MotionScheme? null,shapes: Shapes…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/4 15:23:37

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/5 6:02:27

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/5 8:19:55

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

Unity相机抖动插件Camera-Shake集成与应用实战指南

Unity相机抖动插件Camera-Shake集成与应用实战指南

2026/8/6 0:00:51

1. 项目概述与核心价值最近在做一个动作游戏,需要给主角的重击和爆炸场景加点料,让打击感更足。我第一时间就想到了给相机加个抖动效果,毕竟这是提升玩家沉浸感最简单直接的手段之一。自己手写一个也不是不行,但时间成本高&#x…

Cocos Creator 3.7微信小游戏开发:从架构设计到提审上线的全流程实战指南

Cocos Creator 3.7微信小游戏开发:从架构设计到提审上线的全流程实战指南

2026/8/6 0:00:51

1. 项目概述:为什么需要一份3.7版本的专属适配指南?如果你是一位使用Cocos Creator开发微信小游戏的开发者,并且项目正运行在3.7版本上,那么你很可能已经感受到了那份“甜蜜的烦恼”。一方面,Cocos Creator 3.7是一个功…

AI编程实战:从Prompt工程到工具链集成,打造高效开发工作流

AI编程实战:从Prompt工程到工具链集成,打造高效开发工作流

2026/8/6 0:00:51

1. 项目概述:一次开源AI编程课程的深度重构 最近,我把自己的开源AI编程课程《Claude Code》做了一次从里到外的大更新。如果你对利用Claude、Codex这类大模型来辅助编程感兴趣,或者正在寻找一个能跟上最新AI编码工具迭代节奏的学习路径&#…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/4 13:34:51

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/4 14:25:14

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/4 15:11:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…