Не принимайте это как ответ.
Я повторяю то, что workmad3 сказал выше.
Реализуя его в ArrayList, легко узнать, какие интерфейсы реализует ArrayList, а не переходить к IList и обнаруживать, что он реализует ICollection & IEnumerable.
Это избавляет от необходимости ходить туда-сюда по цепочке наследования.
РЕДАКТИРОВАТЬ: На базовом уровне интерфейс, реализующий другой интерфейс, не может обеспечить реализацию. Класс, производный (от IList), следовательно, косвенно также реализует ICollection и IEnumerable. Таким образом, даже если вы напишите свой собственный класс, реализующий IList (и не добавите ICollection, IEnumerable в объявлении), вы увидите, что ему придется предоставить реализацию для ICollection & IEnumerable.
И рассуждения workmad3 имеют смысл.