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

请说明在C#编程语言中,多态性是如何通过方法重写(override)和方法重载(overload)来实现的?

考察说明

考查对C#面向对象多态性的理解,区分重写与重载的概念、机制及应用场景。

回答思路

  1. 【回答框架 1】重写是子类对父类虚方法或抽象方法的重新实现,通过关键字override标记,实现运行时多态。调用时根据对象的实际类型动态绑定到子类方法,父类方法需标记为virtual或abstract,且重写方法的访问级别和签名一致。
  2. 【回答框架 2】重载是在同一类中定义多个同名方法,但参数列表不同(参数个数、类型或顺序),与返回值无关,实现编译时多态。调用时编译器根据实参类型在编译期间选择匹配的方法。
  3. 【回答框架 3】重写和重载的关键区别:重写是父子类之间纵向关系,重载是同类内横向关系;重写基于继承层次和动态绑定,重载基于参数列表静态解析;重写使用override关键字,重载仅靠参数区分。
  4. 【回答框架 4】实际应用中,重写常用于模板方法模式或策略模式实现行为扩展,重载常用于提供便捷调用方式,如Console.WriteLine的重载集合。注意重载时避免歧义,如参数类型存在隐式转换可能造成调用冲突。
  5. 【关键点 1】重写实现运行时多态,依赖虚方法或抽象方法;重载实现编译时多态,依赖参数列表差异。
  6. 【关键点 2】重写方法签名、访问级别需与被重写方法一致;重载方法返回值类型不参与区分。
  7. 【关键点 3】重写用override关键字,被重写方法必须标记为virtual或abstract;重载仅靠参数列表区分。
  8. 【易错点 1】容易混淆重写与重载,重写是针对继承父类方法,重载是同类内方法。
  9. 【易错点 2】重写时未用override而用new,会导致隐藏基类方法,行为可能不符合多态预期。
  10. 【易错点 3】重载时若仅返回值类型不同,编译器报错,因为不构成重载。