Как вы можете прочитать в википедии, у OCP есть пара определений. Тот, который, вероятно, в основном используется в stackoverflow, является полиморфным. Я предпочитаю защищенные варианты spin, поскольку в идеале мы хотим иметь дизайн, который допускает варианты в одном месте, которые не влияют на определенные (защищенные) классы, которые зависят от этих вариантов.
В вашем примере изменения в реализациях IEntity не повлияют на классы клиентов, которые используют IEntities, при условии, что у вас нет прямой связи между клиентами и реализациями. То есть клиенты должны знать только об IEntities, а не о конкретных реализациях. Это часто требует реализации фабрики, чтобы клиенты могли получить доступ к реализациям, не зная их конкретно.