для List явно да, он должен быть закрытым, в зависимости от того, какие функциональные возможности должны быть доступны для вас, лучше выбрать такие интерфейсы, как IEnuemerable, ICollection или IList или если вы выставляете коллекцию. См. Ответ SLaks.
В целом, разоблачение внутренней структуры и состояния является плохой идеей, и, поскольку ваш объект типа List является и тем и другим, вы хотели бы сохранить его внутренним.
Возможно, имеет смысл дать пользователю возможность перебирать его, добавлять или удалять элементы, но вы все равно должны сохранять внутренний список и либо предоставлять методы Add / Remove, либо, как минимум, предоставлять интерфейс, позволяющий изменять тип внутреннего представления без влияния на открытый интерфейс.
Более того, если вы используете интерфейс, вам следует выбрать самый узкий интерфейс.
Так что, если клиентскому коду нужно только перечислить его. используйте IEnumerable, если клиентскому коду необходимо индексировать, используйте ICollection и т. д.
далее, если вы выставляете как IEnumerable, вы должны убедиться, что все, что вы возвращаете, действительно доступно только для чтения, либо используя класс коллекции только для чтения, либо используя блок итератора
РЕДАКТИРОВАТЬ после обновления
Что касается вашего примера. Спросите себя, имеет ли смысл, что кто-либо, кроме Работодателя, может изменить, кто его сотрудники? для меня это в словах, которые вы уже выбрали. Работодатель нанимает Работника и должен полностью контролировать, кем являются его / ее сотрудники. Так что в этом конкретном случае я бы оставил это в тайне и раскрыл Hire (сотрудник IEmployee) и Fire (сотрудник IEmployee) таким образом, чтобы код явно указывал намерение