Добавил:
2200 7008 9480 6099 TKFF БЛАГОДАРНОСТЬ МОЖНО ТУТ ОСТАВИТЬ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДИПЛОМ 2025 / 4 курса_МТУСИ / 1 КУРС / Информатика / С# для чайников - Мюллер.pdf
Скачиваний:
0
Добавлен:
04.06.2025
Размер:
53.3 Mб
Скачать

Не используйте старые коллекции

Изначально классы коллекций были реализованы как коллекции для типа Obj ect, так что было невозможно создать коллекцию конкретно для string или для int. Такая коллекция позволяла хранить любой тип данных, поскольку все объекты в С# порождены от класса Obj ect. Поэтому вы могли добавлять и int, и string , лHт­ 2 e­ тl r lr.29e не получая при этом никаких сообще­ ний об ошибках (в силу наследования и полиморфизма С#, о которых пойдет речь в части 2, "Объектно-ориентированное программирование на С#").

Но у такого решения имеются очень серьезные недостатки: чтобы получить, например, int, о котором известно, что он был помещен в коллекцию, требует­ ся привести объект Obj ect к типу int:

rььщ

кт>> :им > им, rь ьщ иE

n sV цц

,' l, )

Eим г

­им . n Eим sEим x p ЛV

цц

:им

Это выглядит так, как будто int спрятано в матрешке. Если не выполнить приведения типа, матрешка не раскроется, и вы получите ошибки, связанные с тем, например, что Obj ect не поддерживает операцию + или другие мето­ ды, свойства и операторы, которые вы ожидаете от int. Можно работать и с дан ными ограничениями, но такой код подвержен ошибкам и слишком много­ словен из-за переполнения приведениями (на считая определенных накладных расходов, связанных с так называемой упаковкой (boxing), которые могут су­ щественно замедлить программу).

Если в коллекции содержатся разнородные объекты, например капуста и ко­ роли, ситуация только ухудшается. Теперь придется выполнить определенные действия для выяснения, Вятыименно вы выловили из коллекции - капусту или короля, чтобы операция приведения была корректной.

При всех этих ограничениях новые обобщенные коллекции ока,-1ались глот­ ком свежего воздуха. Они не требуют выполнения приведений, и вы всегда знаете, какой объект получили из коллекции, поскольку в одну коллекцию можно помещать объекты только одного типа. Но вы будете встречаться со старыми коллекциями в чужом коде, а иногда вам даже придется ими пользо­ ваться (когда у вас будут очень веские причины для хранения в одной коллек­ ции башмаков и сургуча).

Необобщенные коллекции можно найти в пространствах имен

S ystem . Collections и System . Collections . Specialized. Совре­ менные обобщенные коллекции находятся в пространстве имен куммлрсрВ System . Collections . Generic. (О пространствах имен и обобщенном программировании будет рассказываться в части 2, "Объектно-ори­

ентированное программирование на С#".)

ГЛАВА 6 Глава для коллекционеров 169

Соседние файлы в папке Информатика