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

在 C# 中,组合和聚合这两种关联关系分别应该如何实现?请说明它们的代码实现方式及区别。

考察说明

考查对 C# 面向对象中组合与聚合关系的理解及实现能力。

回答思路

  1. 【回答框架 1】组合和聚合都是关联关系的特化,表示整体与部分的关系。组合是强拥有关系,部分的生命周期由整体管理,整体销毁时部分也随之销毁;聚合是弱拥有关系,部分可独立存在,整体销毁时部分仍可存活。
  2. 【回答框架 2】在 C# 中,组合通常通过在整体类中直接实例化部分类对象来实现,例如在整体类的构造函数中创建部分实例,字段类型为具体类,确保部分不能独立于整体存在。
  3. 【回答框架 3】聚合则通过在整体类中持有部分类的引用实现,该引用可通过构造函数、属性或方法从外部传入,部分对象在外部创建,整体只负责使用,不管理其生命周期。
  4. 【回答框架 4】区别的关键在于生命周期和所有权:组合中整体负责部分的创建和销毁,聚合中部分由外部管理。实现时,组合的字段通常为私有且直接初始化,聚合的字段通常为可公开设置的属性或通过构造注入。
  5. 【关键点 1】组合:整体类内部直接 new 部分对象,生命周期绑定。
  6. 【关键点 2】聚合:整体类持有外部传入的部分对象引用,生命周期独立。
  7. 【关键点 3】区分依据:整体销毁时部分是否随之销毁。