例如:
public class AssetCollection : List<Asset>
如何使用它来反对从类的正常继承?我通常不能像在List<string>
或int等中存储字符串那样使用类似的东西,那么如何使用呢?
这里创建了一个新的类类型,它扩展了List<Asset>
的函数性以专门化其行为。
例如,您可以添加一个属性来指示总额:
using System.Linq;
public class AssetCollection : List<Asset>
{
public int Total
{
get
{
return Items.Sum(asset => aasset.Amount);
}
}
}
在这里,我们使用Linq扩展方法来计算列表中每个资产金额的总和。
因此,您可以添加任何字段、任何属性和任何方法来管理资产列表。
但是在这里,列表的所有公共属性和方法都是公开的。
一般来说,我们希望有一个强大的封装,只提供所需的,我们写道:
public class AssetCollection
{
private readonly List<Asset> Items = new List<Asset>();
public int Count
{
get { return Items.Count; }
}
public int Total
{
get
{
return Items.Sum(asset => aasset.Amount);
}
}
public void Add(Asset asset)
{
Items.Add(asset);
}
}
因此,我们将所有需要的行为包装到列表项中,忘记了我们想要保护但用于内部管理列表的内容。
这被称为组合,而不是使用继承。
https://www.tutorialspoint.com/composition-vs-aggregation-in-chash
https://www.c-sharpcorner.com/article/difference-between-composition-and-aggregation/