如何在 C# 中支持聚合和组合?

4

聚合:所包含对象的生命周期独立于容器对象。

组合:所包含对象的生命周期与容器对象相同。

在C++中,可以通过new和delete运算符实现。由于C#不提供delete运算符,那么我们如何在C#中实现聚合和组合呢?


“聚合(Aggregation)”并不是您所描述的C ++中真正有用的概念。在C ++中,通常总是希望具有明确的责任。 - Kerrek SB
3
为什么你关心对象的生命周期?自动内存管理的全部意义在于减轻你需要关注聚合和组合之间差异等琐碎细节的负担。解释为什么这种差异很重要,我们可以描述一个真正满足特定需求的机制。 - Eric Lippert
4个回答

4

2
如果两个对象都实现了IDisposable和垃圾回收,则父对象的Dispose方法可以依次调用所有子对象的Dispose方法。这样就可以实现组合。
然后您可以在父对象上拥有处理子对象的方法,而不是处理父对象,即聚合。

1

在您的包含对象上实现IDisposable并在需要移除它们时调用Dispose


0

生命周期源于所有权,而所有权是区分聚合和组合的关键概念。在组合中,从属对象完全由容器拥有。在C++中,这意味着容器必须注意销毁它以避免内存泄漏。在C#中,这取决于对象/内存(托管或非托管)的类型;容器必须实现IDisposable并清理非托管的组合对象。在两种情况下,聚合体独立于容器存在,并且不是容器负责清理的责任。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接