Как правило, имя класса не основывается на каком-либо интерфейсе , который он реализует.(Какой из них вы выбираете, когда их несколько, для начала?) Весьма типично основывать его на унаследованном классе , но чаще просто на цели класса, и, конечно, не наинтерфейс.(Интерфейс может быть назван в честь класса, если угодно.)
Ваш пример несколько недействителен тем фактом, что хорошо спроектированный ProductCollection
должен реализовывать ICollection<Product>
и IEnumerable<Product>
хотя хорошо спроектированный ProductList
должен реализовывать оба этих интерфейса, а также IList<Product>
.
Если вы посмотрите на BCL .NET Framework, вы должны заметить, что это именно тот случай.Класс List<T>
реализует все три интерфейса, так же как и класс Collection<T>
(хотя обратите внимание, что в общем случае «коллекция» не обязательно должна реализовывать IList<T>
).