Encapsulation of object state is fundamental to proper
object oriented programming and design. C# makes it very easy to create
properties and to work with strongly typed collections of objects, and often
this results in object models that expose too much functionality when it comes
to collections. By using interfaces or wrapper classes like the
ReadOnlyCollection<T>, we can ensure our classes' internal state remains
safe from calling code that might inadvertently introduce bugs by changing it
inappropriately.