My guess would be that the code was trying to behave as a read-only List. One would be unable to write to an item of a variable of type MyClassList<T> by index, though one would be able to cast it back to List<T> and write a variable that way. There are times when it makes sense to have a variable whose type has limited abilities, hold an object whose actual capabilities are much greater. The proper way to do that, though, is generally with interfaces, a prime example being IEnumerable<T>. If List<T> is passed to a routine which accepts a parameter of type IEnumerable<T>, the routine could cast its parameter back to a List<T> and use members like Add(), Remove(), etc. but must routines which accept a parameter of type IEnumerable<T> won't try to use it as anything else.
A major problem with the style of code shown by the original poster is that the more 'powerful' direction is the base, rather than the derived type. Because List<T> derives from IEnumerable<T>, that means that all instances of List<T> can be enumerated, but not only some enumerable things have the extra capabilities in List<T>. By contrast, as your class is implemented, every MyClassList<T> can be read and written, but only some instances of List<T> can be used as a MyClassList<T>.