C# 聚合 (HAS-A 关系)

2025 年 8 月 23 日 | 7 分钟阅读

在 C# 编程语言中,聚合是一种关系,其中一个类持有对另一个类的引用。它允许在一个类中重用另一个类。它是一种关联类型,表示不同类之间的“Has-A”关系,其中两个类可以独立存在,但一个类包含对另一个类的引用。它有助于促进代码重用、简洁性和可维护性。

语法

它具有以下语法。

在这个语法中,

ClassA 是一个独立的类,拥有自己的字段和方法,而 ClassB 包含对 ClassA 对象的引用以表示聚合。

C# 聚合示例

让我们举一个例子来说明 C# 中的聚合。

示例

编译并运行

输出

ID is 1, Name is John
City is New York, State is USA, Contact is 356545161

说明

在 C# 程序中,我们定义了两个类:Student 和 Information。Information 类存储城市、州和联系电话等详细信息。Student 类存储基本详细信息、ID 和姓名,并且还持有对 Information 对象的引用。在 main() 方法中,它创建 Information 对象并将其传递给 Student 对象,从而显示组合数据。

C# 中的组合

C# 编程语言中,组合是一种特殊的聚合类型,表示“部分-整体”关系。如果在组合下父对象被删除,子对象也会被销毁,因为它不能独立存在。

例如:房子有房间。如果房子被摧毁,房间也随之消失。

语法

它具有以下语法。

在这个语法中,

Part 类是一个独立的组件(子),由 Whole 类(父)创建和拥有。父类在自身内部创建 Part 类,因此 Part 的生命完全依赖于父类。如果父类被删除,子类也会被删除。

C# 组合示例

让我们举一个使用 Home 和 Room 的 C# 组合示例。

示例

编译并运行

输出

The room is the Living Room
This room is part of the house.

说明

在此示例中,我们创建了两个名为 Room 和 House 的类。Room 类包含 name 属性,还包括 ShowRoom() 方法以显示房间的名称。之后,House 类通过创建自己的 Room 对象并调用 ShowHouse() 方法来演示组合。在 main 方法中,我们创建 House 类的实例并调用 ShowHouse() 方法以显示所需的输出。

聚合和组合的区别

在 C# 中,聚合和组合的区别如下。

聚合 (Aggregation)组合 (Composition)
它是一种特殊的关联类型。它是一种特殊的聚合类型。
每个对象都有自己的生命周期。子对象没有自己的生命周期。它主要取决于其父对象的生命周期。
它是一种弱关联。它是一种强关联。
聚合意味着一个对象只使用另一个类。它意味着一个类完全由另一个类组成。组合表示一个对象包含在另一个类中。
父类不负责创建或销毁子类。父类负责创建或删除子类。

LINQ 中的聚合函数

在 C# 中,LINQ 中的聚合函数是将多行值作为输入然后返回单个值作为输出的函数。因此,我们可以说 C# 聚合函数总是产生一个单个值。

聚合函数的一个实际示例是计算公司的总销售收入。

以下是用于执行聚合操作的方法列表。

方法描述
聚合它对集合的元素执行自定义聚合操作。
数量它计算集合中的元素数量。
平均数它确定一组值的平均值。
大计数它计算大集合中的元素数量
Max它计算集合的最大值。
最小值它计算集合的最小值。
求和它确定集合值的总和。

C# LINQ 聚合示例

让我们举一个计算数字之和的例子。

示例

编译并运行

输出

The total of all the numbers is:
1927

说明

在此示例中,我们应用 System.Linq.namespace 中的 Sum() 聚合函数。首先,我们定义整数数组并初始化数字序列。在 main() 函数中,它使用 Sum() 方法计算数组中元素的总和。最后,我们使用 Console.WriteLine() 函数打印输出。

使用 C# 聚合的优点

C# 聚合的几个优点如下:

  • 它表示两个类对象之间的单向 HAS-A 关系。
  • 它还有助于增强代码的可重用性。
  • 它提高了代码的可读性,并使其易于理解关系。
  • 与关联相比,它包含更多限制。

结论

总之,C# 聚合是一个类持有对另一个类的引用的过程。它促进了更清晰的代码组织,从而实现了更好的灵活性、可扩展性和组件重用。这种方法在大型应用程序中很有用。为了提高可维护性并促进未来的更新,组件必须在不形成强依赖关系的情况下进行交互。

C# 聚合常见问题

1) C# 中的聚合是什么?

在 C# 编程语言中,聚合是一个类持有对另一个类的引用的过程。它是重用类的另一种方式。它是一种关联类型,表示不同类之间的“Has-A”关系,其中两个类可以独立存在,但一个类包含对另一个类的引用。

2) C# 中的聚合与继承相同吗?

聚合与继承不同。聚合表示不同类之间的“Has-A”关系,其中两个类可以独立存在,但一个类包含对另一个类的引用。

3) 聚合支持多态吗?

是的,聚合支持多态。如果聚合对象是接口或基类类型,可以通过存储派生类对象来实现多态。

4) 聚合可以在没有构造函数的情况下实现吗?

是的,C# 中的聚合可以在不使用构造函数的情况下实现。可以使用构造函数将现有对象传递到另一个类中,但一旦对象被创建,也可以使用属性或设置器方法分配引用。

5) C# 中聚合的实际例子有哪些?

聚合的实际例子是

  • 学校有老师
  • 图书馆有老师
  • 团队有队员

下一主题C# 成员重载