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

请描述在 C# 中为现有类添加新方法(不修改原类)的常见实现方式,并说明其适用场景和限制。

技术原理方案权衡C#

考察说明

考查对 C# 扩展方法机制的理解及其与继承、组合等其他扩展方式之间的差异。

回答思路

  1. 【回答框架 1】扩展方法是 C# 3.0 引入的静态方法,通过 this 关键字修饰第一个参数来绑定到指定类型,调用时如同实例方法。定义时必须位于静态类中,且静态类不能被实例化。
  2. 【回答框架 2】使用场景:为第三方类型或无法继承的密封类添加行为,例如为 string 添加自定义方法。但扩展方法不能访问原类型的私有成员,只能使用其公共接口。
  3. 【回答框架 3】与继承相比,扩展方法不能实现多态,且优先级低于实例方法;与组合相比,扩展方法不改变类型结构,只是编译时的语法糖,实际调用会被编译为静态方法调用。
  4. 【回答框架 4】注意扩展方法的查找规则:编译器会先查找实例方法,若找不到再按命名空间和 using 指令搜索扩展方法,且扩展方法不能隐藏实例方法。
  5. 【关键点 1】扩展方法必须定义在静态类中,且第一个参数用 this 修饰。
  6. 【关键点 2】扩展方法不能访问类型的私有成员,且不能覆盖实例方法。
  7. 【关键点 3】扩展方法适用于不能修改源码的类型,但应谨慎使用以免造成 API 混乱。
  8. 【易错点 1】误以为扩展方法可以改变原类型的行为,实际上它只是静态方法的语法糖。
  9. 【易错点 2】忽略命名空间冲突,导致扩展方法无法被找到或产生歧义。
  10. 【易错点 3】在接口上定义扩展方法时,若实现类型有同名方法,则实例方法优先。