Главная » Просмотр файлов » Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)

Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 67

Файл №1160865 Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)) 67 страницаНэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865) страница 672019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 67)

Однако для следующей переменной — 1ыр11с1г1утурес(Актау — применяется новый сокращенный синтаксис, лишенный информации о типе. Вместо указания компилятору информации о типе ему просто предоставляется возможность догадаться, что каждЫй элемент в массиве будет иметь тип 1пг. Чтобы еще больше сэкономить на клавиатурном вводе, 1ир11с1г1утурес(Аггзу объявляется как неявно типизированная локальная переменная. Выполнив этот код.

вы обнаружите, что вызов метода иг1гее1пе, следующий за ней, показывает что неявно типизированная переменная имеет тип Я уз ген. 1пг32 ( ] . Фактически, ту же строку кода можно было бы записать следующим образом: 1пс[] 1ир11с111утурет(Актау = пен (] ( 4, 5, б Однако, поскольку компилятору уже предоставлена возможность догадаться о типе элементов массива, можно позволить ему вывести весь тип массива, особенно если переменная остается локальной по отношению к контексту метода.

Но что случится, если объявить массив, используя множество типов в списке инициализации7 Когда компилятор встречает множество типов внутри списка инициализации неявно типизированного массива, он определяет тип, к которому могут быть неявно приведены все элементы. И, конечно, для практических целей любой тип экземпляра может быть преобразован в собственный тип.

Поэтому в объявлении экземпляра я оыекшпЬе ге в данном примере компилятор определит, что все типы внутри скобок являются преобразуемыми к Буягеа. Ноць1е. Неудивительно, что следующий вызов метода хгаге11пе подтверждает это. Но что, если типы элементов не могут быть неявно преобразованы в один общий тип7 Когда компилятор не может найти подходящий общий тип. к которому можно преобразовать все элементы массива, он выдает ошибку СБ0826: Но Ьеяк Суре Тоцпг( Тот гараксТГ1у сурет( актау Не найдено подходящего типа ддя неявно тнпияирояанногп массива 262 Глава 9 Если удалить комментарий со строки, где объявляется переменная эогпеэег1псз, именно такое предупреждение и сгенерируется, поскольку экземпляры 5узгеп.

Туре не могут быть неявно преобразованы к эуэеея. 5Сг1пд. На заметку! Все объекты в .Р)ЕТ могут быть неявно преобразованы в 5узеел7. 0Ь7ее)Ц таким образом, может возникнуть вопрос, почему компилятор не принял решение испольэовать 5уэсет.оьбесс в качестве общего типа в предыдущем присваивании зопеэсг1пдз.

Причина в том, что компилятор может применять только те типы, которые присутствуют в выражении неявно типизированного массива. Поскольку 5узсеп. Оь1есс не входит в их число, он во внимание не принимается. А что произойдет, если объявить массив с двумя элементами, и оба типа окажутся преобразуемыми друг к другу? Такая ситуация случается очень редко и обычно является следствием наличия двух пользовательских типов, у которых определены операции неявного преобразования друг в друга'. Чтобы посмотреть, что случится, так было и сделано. При попытке объявить неявно типизированный массив с элементами каждого из типов возникла ошибка компиляции С80826. как и следовало ожидать. Возможно, вы уже думаете о множестве полезных применений для неявно типизированных массивов.

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

На заметку! Поскольку неявно типизированные массивы в действительности являются неявно типизированными локальными переменными, то если только метод, который вы читаете, не слишком сложный и большой, у вас не должно быть проблем в определении действительного типа такой переменной. Если же догадаться о типе не удается сразу, прочитав код, это может означать, что функция слишком сложна и нуждается в рефакторизации. Вдобавок, если в коде используются неявно типизированные локальные переменные, выбирайте для них логичные имена, чтобы инженер службы сопровождения мог легко догадаться о типе каждой переменной. С учетом всего сказанного, неявно типизированные массивы отлично подходят для создания экземпляров и-кратных элементов.

Например, в еле)блещем фрагменте кода демонстрируется сокращенный способ объявления матрицы целых чисел: сэзпо эузтеэг рсЬ11с с1азз Епггугогпг [ зтзгьс тока Ма1п[) [ тат Снгеевутпгее = пен [) [ пен [) [ 1, 2, 3 ), пен [) [ 4, 5, б )„ пен [) [ 7, 8, 9 ) ): ' Определение собственных операций явного и неявного преобразования типов рассматривалось в главе 6. г Неявно типизированные массивы также очень полезны при использовании с Ы)Чй. Фактически. то же можно сказать о большинстве новых средств СВ 3.0.

Взятые по отдельности, онн обладают минимальной ценностью, но в целом прн использовании с Ы)Чй они обеспечивают возможность создание исключительно выразительных конструкций. Язык Ы)уй рассматрнваетсл з главе 16. Массивы, типы коллекций и итераторы 253 1агеасЬ( тат 1 тп СЬгвевутпгее ) Гагвзаъ( тзг ] тп 1 ) ( Сапяа1е.нггте( "(0), " ° ] )' ) Сапяа1е.нгтсв( "1п" ) Возможность преобразования и ковариантность При объявлении массива, способного содержать экземпляры определенного ссылочного типа, экземпляры, которые можно поместить в такой массив, в действительности могут быть экземплярами производного типа нлн любого другого ссылочного типа, неявно преобразуемого в содержащий тип.

Например, если создается массив экземпляров типа Аптюа1, то в него с успехом можно поместить экземпляры рад или Сащ если оба они наследуются от Ап1юа1. На заметку! В С/С++ сохранение экземпляров рад (собака) или Сас (кошка) в массивы типа Апвюа1(животное) категорически не одобряется, поскольку объекты, если они хранятся по значению, усекаются, и поэтому признаки "принадлежности к кошачьим" или "принадлежности к собачьим" животного окажутся отброшенными, а останется только то, что делает их животными. В С№ все не так, поскольку массив содержит ссылки на объекты в куче. Если проводить аналогию с массивами С/Счч, то массивы С№ подобны массивам С/С++, содержащим указатели на сзс и рад в виде указателей на объекты Апьиа1. Объявлять типы массивов можно и другим, более интересным способом: пятпд Яувгекп рпЬ11а с1ззя Апата1 ( ) рпЬ11с с1зяя рад: Апата1 ( ) рпЬ11с а1зяв Сзг: Апгтз1 ( ) рпЬ1хс с1зяя Епсгуракп ( ятзг1а чака Маза рад(] г)адя = пен сад[ 3 ]; сзг[] сатя = пен Саг( 2 ]: Ап1аа1(] аптта1я = Оадяг Апгаа1(] аагеАп1аа1з пася; Присваивание с)адя и сзгя переменной апата1я — это нечто такое, что определенно не удастся сделать в "родном" С/С++.

Массивы в С№ являются присваиваемыми до тех пор, пока их размерность совпадает, а типы элементов являются ссылочными н преобразуемыми друг в друга. Такая возможность присваивания массивов в С[.й обеспечивается тем фактом, что массивы ковариантны, а не инвариантны. Поскольку оба массива в предыдущем примере имеют размерность 1, а типы Рад и Сзс являются преобразуемыми в Ап1юз1, такое присванвание работает. Создатели С№ включили поддержку ковариантных массивов в СЬК прежде всего для того, чтобы обеспечить поддержку языка дача. Кстати, это средство языка, по сути.

является дефектным и позволяет вставить, например, экземпляр тзЬ1е в массив элементов Рад. Более подробную информацию можно найти в разделе "Ковариантность и контраварнантность" главы 11. 264 Глава 9 На заметку) Полная информация о типе массива включает его ранг (количество измерений) и тип содержимого. Возможности сортировки и поиска Если взглянуть на полный интерфейс Я уз Сев. Аггау, как он описан в документации МБО(ч, несложно заметить, что несколько методов позволяют сортировать элементы в массиве.

Эти методы применимы, если содержащийся тип реализует 1СогкрагаЬ1е— статшартный интерфейс сравнения элементов определенного типа>. Естественно, сортировать многомерные массивы нельзя, и предпринимая попытку это сделать, следует быть готовыми к перехвату исключения кап)скхсергаоп. Поэтому всегда представляйте. что может пойти не так при вызове методов массивов, которые могут выполнять операции, недопустимые в отдельных случаях.

С помощью статических методов 1пс(ех и ьазс1пс)ехст можно искать определенные значения внутри массива. Если метод подобного рода не может найти запрошенное значение, он возвращает -1. Эти методы не предполагают применение какого-то определенного алгоритма, за исюпочением того, что первый из них начинает поиск с начала, а второй — с конца массива. Если необходим ускоренный поиск, можно воспользоваться статическим методом ВьпагуЯеагсЬ. Однако прежде чем делать это, массив понадобится отсортировать, что, конечно же, потребует от элементов массива реализации интерфейса 1СоаарагаЬ1е. На заметку! Разница между вариантом, когда тип реализует 1сопрагаь1е/1СотрагаЬ1е<т> и когда предоставляется другой тип, реализующий 1сотрагег/1соврагег<т> для выполнения сравнения двух экземпляров, довольно тонкая, но важная.

Характеристики

Тип файла
DJVU-файл
Размер
8,22 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Нэш Трей - C# 2010
Accelerated_C_2010-4565
3_syntax_overview
3_generics_1.cs
as_1.cs
boxing.cs
conversions_1.cs
implicit_type_1.cs
is_1.cs
references_1.cs
references_2.cs
references_3.cs
values_1.cs
4_classes_structs
4_abstract_classes_1.cs
4_beforefieldinit_1.cs
4_box_1.cs
4_box_2.cs
4_box_3.cs
4_box_4.cs
4_box_5.cs
4_class_definition_1.cs
4_compareto_1.cs
4_containment_example_1.cs
4_containment_example_2.cs
4_containment_example_3.cs
4_ctor_struct_1.cs
4_ctor_struct_2.cs
4_ctor_struct_3.cs
4_destructor_1.cs
4_destructor_2.cs
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7038
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее