Если я создаю свой собственный класс словаря, я наследую от System.Collections.ObjectModel.KeyedCollection.
РЕДАКТИРОВАТЬ для всех тех, кто не понимает дизайн API.
Вы никогда не должны возвращать общий список или словарь из открытого свойства или функции. Insead вы должны вернуть класс, специально созданный для этой цели. Таким образом, вы можете добавить дополнительные функции позже.
Dictionay<integer, Order> Orders() {get;}
CustomerOrders Orders() {get;}
Со второй версией вы можете делать такие вещи, как добавление свойства Total и сделать так, чтобы пользователь действительно его нашел.
Теоретически вы можете вернуть подкласс Dictionary, который добавляет свойство Total, но тогда пользователь должен будет A. знать, что вы это делаете, и B. включить приведение к этому свойству.