Этот вопрос пришел в голову после прочтения ответа на этот вопрос; который в основном подчеркивал, что List<T>
не имеет виртуальных методов, поскольку он был разработан, чтобы быть «быстрым, не расширяемым».
Если это цель дизайна, почему не было оригинального дизайна, включая герметизацию класса? (Я знаю, что сейчас это невозможно, поскольку это может сломать множество дочерних классов в клиентском коде)
List<T>
для создания специализированной коллекции и добавления вспомогательных методов (например,List<Crayon>.Count(Color)
), но может быть хорошей идеейseal
некоторые методы (Add
и т. Д.). Кроме того, хотя .Net имеет несколько причуд, в целом это единый фреймворк. Кроме того, нельзя ли задать один и тот же вопрос для всех незапечатанных классов с невиртуальными методами? - person Kobi   schedule 25.01.2011IList<T>
,ICollection<T>
илиIEnumerable<T>
. Нет необходимости в наследовании, и тогда вы можете применить такие методы к любому списку / коллекции / перечислимому элементу правильного типа, а не только к экземплярам вспомогательного класса. Такие занятия обычно пахнут плохим дизайном. - person cdhowie   schedule 25.01.2011ColorBox
в моем примере вместоList<Crayon>
везде) - вы можете усложнить пример с помощью нескольких дополнительных элементов и свойств (например,Owner
). Кроме того, помните, что методы расширения не существовали, когда вышел C # 2.0. (Я также стараюсь не создавать методы расширения для своих типов, я стараюсь использовать их для типов, которые иначе не могу расширить, но это другое обсуждение) - person Kobi   schedule 25.01.2011List<T>
поставлялся задолго до того, как появились методы расширения. Кроме того, какая альтернатива? Тот, кто плохо наследует отList<T>
, вероятно, тоже плохо реализует альтернативу. - person Gabe   schedule 25.01.2011ColorBox
, вероятно, реализует некоторые другие интерфейсы, что упрощает работу, чемList<Color>
. - person Cheng Chen   schedule 25.01.2011