在这里,您创建了一个新的类类型,它扩展了 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/