C#面试题更新 2026-08-03

请解释在 C# 编程语言中,方法重载和方法重写的触发条件分别是什么?

考察说明

考查对 C# 中方法重载与重写概念、触发时机及区别的理解。

回答思路

  1. 【回答框架 1】方法重载发生在同一个类中,当多个方法具有相同名称但参数列表(参数个数、类型或顺序)不同时,编译器根据调用时提供的参数选择匹配的方法。重载不依赖于继承,返回值类型不影响重载判定。
  2. 【回答框架 2】方法重写发生在继承体系中,子类使用 override 关键字重写基类中标记为 virtual 或 abstract 的方法,要求方法签名(名称、参数列表)与基类方法完全一致,且返回类型必须兼容(C# 9 起支持协变返回类型)。运行时根据对象的实际类型调用相应实现。
  3. 【回答框架 3】重载是在编译时静态绑定的,编译器根据实参类型决定调用哪个重载版本;重写是在运行时动态绑定的,通过虚方法表(vtable)实现多态。
  4. 【回答框架 4】触发条件不同:重载要求方法名相同但参数列表不同,可以在不修改基类的情况下扩展行为;重写要求基类方法必须可重写(virtual 或 abstract),且子类必须显式使用 override,否则会隐藏基类方法(new 关键字)。
  5. 【关键点 1】重载:同一个类中,方法名相同,参数列表不同,编译时绑定。
  6. 【关键点 2】重写:继承体系中,子类 override 基类的 virtual/abstract 方法,运行时绑定。
  7. 【关键点 3】返回值类型不参与重载判别,但重写要求返回类型兼容。
  8. 【易错点 1】混淆重载和重写,重载不依赖继承,重写必须继承且使用 override。
  9. 【易错点 2】用 new 隐藏基类方法时,不会触发多态,容易误以为是重写。
  10. 【易错点 3】仅更改返回类型不能构成重载,会导致编译错误。