Примеры, которые вы привели, хорошие.TextureCollection запечатано и не имеет общедоступного конструктора, только внутренний.TouchCollection реализует IList<TouchLocation>
, аналогично тому, как List<T>
реализует IList<T>
.Обобщения в работе здесь, между прочим, ответ с поправкой не верен.
TextureCollection намеренно ограничен, он гарантирует, что вы никогда не сможете создать его экземпляр.Только секретные знания о текстурах могут заполнить эту коллекцию, List <> будет недостаточно, поскольку он не может быть инициализирован с тем секретным знанием, которое заставляет индексатор работать.Классу также не нужно, чтобы был универсальным, он знает только об экземплярах класса Texture.
TouchCollection специализируется аналогичным образом.Метод Add () создает исключение NotSupportedException.Это невозможно сделать с обычным классом List <>, его метод Add () не является виртуальным, поэтому его нельзя переопределить, чтобы вызвать исключение.
В этом нет ничего необычного.