Я просто хотел добавить, что Бертран Мейер, изобретатель Эйфеля и дизайн по контракту, наследовал бы Team
от List<Player>
, не так как моргнув веком.
В своей книге, Объектно-ориентированное программное обеспечение , он обсуждает реализацию GUI-системы, в которой прямоугольные окна могут иметь дочерние окна. Он просто имеет Window
наследовать от Rectangle
и Tree<Window>
для повторного использования реализации.
Однако C # не является Eiffel. Последний поддерживает множественное наследование и переименование функций . В C #, когда вы выполняете подкласс, вы наследуете интерфейс и реализацию. Вы можете переопределить реализацию, но соглашения о вызовах копируются непосредственно из суперкласса. Однако в Eiffel вы можете изменить имена общедоступных методов, поэтому вы можете переименовать Add
и Remove
в Hire
и Fire
в свой Team
. Если экземпляр Team
снова возвращается к List<Player>
, вызывающий будет использовать Add
и Remove
для его изменения, но ваши виртуальные методы Hire
и Fire
будут вызваны.
Вот сценарий, который использует случайную опцию вида GNU:
ls |sort -R |tail -$N |while read file; do
# Something involving $file, or you can leave
# off the while to just get the filenames
done