В чем преимущество использования безопасных типов коллекционных классов? - PullRequest
0 голосов
/ 30 марта 2011

Мне было интересно, почему в некоторых случаях я вижу класс, представляющий коллекцию какого-то типа.

Например:

В Microsoft XNA Framework: TextureCollection, TouchCollection и т. Д. Также другие классы вСам .NET Framework, заканчивающийся Collection.

Почему он разработан таким образом?Каковы преимущества такого подхода, а не сбора общих типов, как это было представлено в C # 2.0?

Спасибо

Ответы [ 5 ]

3 голосов
/ 30 марта 2011

Примеры, которые вы привели, хорошие.TextureCollection запечатано и не имеет общедоступного конструктора, только внутренний.TouchCollection реализует IList<TouchLocation>, аналогично тому, как List<T> реализует IList<T>.Обобщения в работе здесь, между прочим, ответ с поправкой не верен.

TextureCollection намеренно ограничен, он гарантирует, что вы никогда не сможете создать его экземпляр.Только секретные знания о текстурах могут заполнить эту коллекцию, List <> будет недостаточно, поскольку он не может быть инициализирован с тем секретным знанием, которое заставляет индексатор работать.Классу также не нужно, чтобы был универсальным, он знает только об экземплярах класса Texture.

TouchCollection специализируется аналогичным образом.Метод Add () создает исключение NotSupportedException.Это невозможно сделать с обычным классом List <>, его метод Add () не является виртуальным, поэтому его нельзя переопределить, чтобы вызвать исключение.

В этом нет ничего необычного.

3 голосов
/ 30 марта 2011

В самой .NET Framework многие типобезопасные коллекции предшествуют стандарту 2.0 и сохраняются для совместимости.

Для нескольких контекстов, связанных с XAML, либо нет синтаксиса для указания универсального класса, либо синтаксис громоздок. Поэтому, когда List<T> будет использоваться, для каждой потребности будет написано TList.

2 голосов
/ 30 марта 2011

Позволяет определить собственную семантику для коллекции (возможно, вы не захотите использовать метод Add или AddRange и т. Д. ...).

Кроме того, читаемость повышается за счет того, что ваш код не будет помечен List<Touch> и List<Texture> везде.

Существует также довольно много кода .NET 1.0 / 1.1, который все еще должен работать, поэтому старые коллекции, предшествующие дженерикам, все еще должны существовать.

1 голос
/ 30 марта 2011

Исходя из ответа Одеда, ваш собственный тип класса позволяет гораздо легче изменить путь, когда вы решите, что вам нужен стек / очередь и т. Д. Вместо этого List.Для этого может быть множество причин, в том числе производительность, использование памяти и т. Д.

На самом деле, обычно рекомендуется скрывать детали реализации такого типа - пользователи вашего класса просто хотят знать, что он хранит Textures, а не как.

1 голос
/ 30 марта 2011

К примеру, не так просто использовать универсальные классы в XAML.

...