Я думаю, что код пытается вести себя как доступный только для чтения List
. Нельзя было бы записать элемент переменной типа MyClassList<T>
по индексу, хотя можно было бы привести его обратно к List<T>
и записать переменную таким образом. Есть моменты, когда имеет смысл иметь переменную, тип которой имеет ограниченные возможности, содержать объект, чьи реальные возможности намного выше. Тем не менее, правильный способ сделать это, как правило, с интерфейсами, ярким примером является IEnumerable<T>
. Если List<T>
передается подпрограмме, которая принимает параметр типа IEnumerable<T>
, подпрограмма может преобразовать свой параметр обратно в List<T>
и использовать такие элементы, как Add()
, Remove()
и т. Д., Но должны подпрограммы, которые принимают параметр типа IEnumerable<T>
не будет пытаться использовать его как что-либо еще.
Основная проблема со стилем кода, показанного оригинальным постером, состоит в том, что более «мощное» направление - это базовый, а не производный тип. Поскольку List<T>
происходит от IEnumerable<T>
, это означает, что все экземпляры List<T>
могут быть перечислены, но не только некоторые перечисляемые вещи имеют дополнительные возможности в List<T>
. Напротив, когда ваш класс реализован, каждый MyClassList<T>
может быть прочитан и записан, но только некоторые экземпляры List<T>
могут использоваться как MyClassList<T>
.