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

请说明抽象类与接口在定义、成员实现、继承关系及使用目的上的主要差异,并各举一个合适的应用场合。

技术原理方案权衡C#

考察说明

考查对C#中抽象类与接口设计意图和语法差异的理解,以及能否在实际场景中做出恰当选择。

回答思路

  1. 【回答框架 1】抽象类是类,用于抽象一组相关对象的公共特征,可包含字段、属性、构造函数、方法实现以及抽象成员;接口是契约,只定义成员签名,C# 8 起可含默认实现,但主要用途是定义行为能力。
  2. 【回答框架 2】继承规则不同:抽象类只能单继承,接口可多实现;接口不能有实例字段和构造函数,抽象类可以。抽象类适合表示‘是什么’的层级关系,接口适合表示‘能做什么’的能力约定。
  3. 【回答框架 3】应用场景:用抽象类实现模板方法模式,比如定义动物基类,让子类共享移动和进食逻辑;用接口定义如 IEnumerable 或 IDisposable,让不相关的类型统一提供可枚举或资源释放能力。
  4. 【回答框架 4】选择建议:优先考虑接口以实现多重能力组合和降低耦合;若需要复用实现或维护公共状态,则使用抽象类。实际开发中常结合两者,抽象类实现公共接口作为适配基类。
  5. 【关键点 1】抽象类是可被继承的类,接口是行为契约。
  6. 【关键点 2】C# 中一个类只能继承一个抽象类,但可实现多个接口。
  7. 【关键点 3】接口不能有实例字段和构造函数,抽象类可以。
  8. 【关键点 4】抽象类用于表示‘is-a’关系,接口用于表示‘can-do’能力。
  9. 【易错点 1】误以为接口不能有默认实现,C# 8 起接口可有默认方法,但主要仍用于契约。
  10. 【易错点 2】将抽象类与接口对立使用,实际可组合。
  11. 【易错点 3】忽略接口不能包含字段的限制,试图在接口中定义常量或状态。