How .Net breaks Liskov Substitution Principle and Solves it at the same time
Ever traced the .NET collection hierarchy and wondered why ICollection<T> has an IsReadOnly flag? Let's walk through it.
It starts with IEnumerable<T> — the most basic contract. Just "give me one item