C#中什么是聚合?

1. 什么是聚合?

在面向对象编程中,聚合(Aggregation)是一种关联关系,表示对象之间的“整体-部分”关系。也就是说,一个对象包含另外一个对象,被包含的对象是“整体”,而包含其他对象的对象是“部分”。

举个例子,我们可以将班级和学生之间的关系看作是一种聚合。一个班级包含多个学生,而一个学生属于一个班级。这种关系可以用UML类图来表示,如下图:

2. 聚合与组合的区别

在面向对象编程中,聚合与组合(Composition)是两种比较常见的关联关系。它们有很多相似之处,但也有一些重要的区别。

2.1 聚合与组合的相似之处

它们都是一种关联关系,用来表示对象之间的“整体-部分”关系。

都可以用UML类图来表示。

2.2 聚合与组合的区别

组合是一种更强的关联关系。如果两个对象之间是组合关系,那么被包含的对象只能属于一个“整体”对象,而不能属于其他对象。例如,一个车是由引擎、轮胎和车身等部分组成的,这些部分只能属于这个车,不能属于其他车。

而聚合关系中被包含的对象是可以属于多个“整体”对象的。例如,在上面的班级和学生的关系中,一个学生可以属于多个班级。

在UML类图中,组合关系通常用实心菱形来表示,而聚合关系则用空心菱形来表示。

3. C#中如何实现聚合关系?

C#中实现聚合关系的方式有多种。下面我们以班级和学生为例,介绍两种常见的方式。

3.1 列表/List

一个班级包含多个学生,我们可以使用List来保存这些学生对象。

class Student

{

public string Name { get; set; }

}

class Class

{

public List<Student> Students { get; set; }

public void AddStudent(Student student)

{

Students.Add(student);

}

}

在上面的代码中,Class类中的Students属性是一个List<Student>类型的列表,用于保存学生对象。在AddStudent方法中,我们可以直接向Students列表中添加学生对象。

3.2 构造函数/Constructor

我们也可以通过构造函数来实现聚合关系。在班级的构造函数中传入多个学生对象,并保存到Students列表中。

class Student

{

public string Name { get; set; }

}

class Class

{

public List<Student> Students { get; set; }

public Class(List<Student> students)

{

Students = students;

}

}

在上面的代码中,Class类的构造函数接受一个List<Student>类型的参数,用于保存学生对象。在创建班级对象时,我们可以通过这个构造函数传入多个学生对象。

4. 总结

通过本文,我们了解了什么是聚合关系,在面向对象编程中如何使用聚合关系,以及C#中如何实现聚合关系。

后端开发标签