Является ли реализация IEnumerable средним звеном между композицией и наследованием? - PullRequest
0 голосов
/ 02 мая 2020

Скажем, у вас есть холодильник, который может содержать только кусочки бекона (Мечта ?!), вы бы написали его так:

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> - это слишком много работы только для того, чтобы наслаждаться беконом, но, как вы, возможно, уже читали, он не является целью этой темы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...