Это сделано с использованием явной реализации интерфейса. Вы можете увидеть реализацию только тогда, когда вы используете список в качестве определенного интерфейса:
List<int> x = new List<int>();
bool b1 = x.IsReadOnly; // not accessible
ICollection<T> y = x;
bool b2 = y.IsReadOnly; // accessible