Трудно дать ответ на этот вопрос, не видя гораздо больше подробностей о том, что вы пытаетесь сделать. Тем не менее, я бы обычно не наследовал от Collection, поскольку он не дает достаточно виртуальных методов для переопределения. Это может сделать изменение поведения вашего класса немного сложным в будущем.
Проблема с наследованием заключается в том, что если вы используете его, вы застрянете с поведением базового класса Collection навсегда или столкнетесь со сложным рефакторингом. Например, вы можете добавить операции фильтрации, поиска и сортировки, после чего вам нужно будет переключиться на Список из коллекции. Возможно, вы даже захотите сделать привязку данных, где вам понадобится BindingList вместо Collection.
Другой план будет наследовать от ICollection или, еще лучше, IList , а затем делегировать частному члену Коллекции. Это дает вам максимальный контроль и позволяет изменять внутреннее представление вашего класса, не затрагивая общедоступный интерфейс. Проблема в том, что вам нужно больше времени, чтобы развивать ваши классы.
Таким образом, перед вами стоит компромисс между более быстрым развитием и будущей гибкостью, и, как я уже сказал в начале, немного сложно судить о том, какой путь выбрать из информации, приведенной в исходном посте.
PS: Чтобы сделать реализацию IList доступной только для чтения, просто верните true из IsReadOnly и затем сгенерируйте исключение NotSupportedException для всех методов, которые изменяют список.