Скажем, у вас есть холодильник, который может содержать только кусочки бекона (Мечта ?!), вы бы написали его так:
class Fridge : Collection<BaconSlice>
{
public int Capacity;
//logic of bacon storage
}
Или вы бы написали его так:
class Fridge
{
public int Capacity;
private List<BaconSlice> Content;
//logic of bacon storage
}
Теперь мы ясно видим, что это будет трудный выбор между Композиция и Наследование , но что если вы захотите закодировать это так:
class Fridge : IEnumerable<BaconSlice>
{
public int Capacity;
//implementation of IEnumerable<BaconSlice>
//logic of bacon storage
}
Тогда это не было бы наследством само по себе - хотя я полагаю, что в конечном итоге вы получите почти все преимущества наследования Collection<BaconSlice>
- и это определенно не будет композицией; Как тогда можно было бы называть такую практику?
Теперь, для протокола, я полагаю, что лучшим бизнес-выбором здесь была бы композиция, поскольку Холодильник далеко не таков, как список , а реализация IEnumerable<BaconSlice>
- это слишком много работы только для того, чтобы наслаждаться беконом, но, как вы, возможно, уже читали, он не является целью этой темы.