Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 88
Текст из файла (страница 88)
Однако обратите внимание, что сразу после этого первый элемент оЬб есся был заменен некоторым экземпляром оЬб ест. Что произойдет в результате второго вызова О1яр1ауЯст1поя с передачей ему массива ятт1пдя? Как и можно было догадаться, исполняющая система сгенерирует исключение типа АттауТуреМ1ящасспехсерс тоси Оппапб1еб ехсерстоп: Буясещ.лттаутуремтзщассьехсерс1оп: Ассещрсеб со ассеяя ап е1ещепт ая а Суре 1псощрас1Ь[е итсь Ссе актау.
Необработанное исключение: БуяСещ.АттауТуреМбящаСсЛЕхсерстол: Попытка обращения к элементу с типом, который несовместим с массивом. Ковариантность массивов в СЗ присутствует изначально для совместимости с языком дача. Но поскольку она несовершенна, а некоторые даже утверждают, что дефектна, как устранить эту проблему? На самом деле существует несколько путей. Те иэ вас, кто знаком с функциональным программированием, естественно предложат в качестве решения инвариантность. То есть, если массив инвариантен, подобно Яуясещ.
ЯСС1по, то в точке, где он присваивается другой переменной, происходит копирование обычным образом, т.е. в "ленивой" манере. Однако давайте посмотрим, как можно решить эту проблему с использованием обобщений: па[ад Буятещ; пя1по Буятещ.со11естсопя.бепет1с; ятаС1с с1аяя ЕпСтуРо1пт ( яСаттс чо1б Мата() ( 11ят<ятт1ПО> ятт1ПОя = ПЕИ 11яС<яст1ПО> ( "ОПЕ", "ТЧО", "ТЬСЕЕк )~ 334 Глава П // Эео ке скомпквяруееоя










