Главная » Просмотр файлов » Г. Шилдт - С#4.0 Полное руководство

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 41

Файл №1160795 Г. Шилдт - С#4.0 Полное руководство (Г. Шилдт - С#4.0 Полное руководство) 41 страницаГ. Шилдт - С#4.0 Полное руководство (1160795) страница 412019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

В качестве примера рассмотрим следующую программу. // Пример передачи объектов методам по ссылке. пв1пс Б)вгип( с1авв МуС1авв гпс а1рна, Ьеоаг рнЬ11с МуС1азв(1пс г, гпс 3) ( а1рна = гг Ьега = Зг ) Глава 8. Подробнее о методах н классах 219 // Возвратить значение Ссие, если параметр оЬ // имеет те же значения, что и вызываюший объект. риЬ11с Ьоо1 Баюедв(МуС1аяв оЫ ( 15((оь.а1рьа == а1рьа) а (оь.ьеса == ьеса)) себисп Ссие; е1яе сеоисп са1вег ) // Сделать копию объекта оЬ. риЫтс иота Сору(муС1аяя оы ( а1рЬа = оЬ.а1рна Ьеса = оЬ.Ьеса; ) риЬ11с ното БЬон() ( Сопяо1е.нс1Сесспе("а1рЬа: (О), Ьеоа: (1)", а1рба, Ьеса); ) с1аяв РаяяОЬ ( ясас1с но1б Ма1п() ( МуС1авя оЫ = пен МуС1аяя(4, 5) МуС1авв оЬ2 = лен МуС1аяв(б, 7) Сопяо1е .Хстге ("оЫ : " ) Г оЫ .

БЬон (); Сопяо1е.нслге("оЬ2: "); оЬ2 .БЬон (); 11(оЫ .Баюехв(оЬ2)) Сопяо1е.нстоевдпе("оЬ1 и оЪ2 имеют одинаковые значения.") е1ве сопяо1е.исссег дне("оы и оЬ2 имеют разные значения.")г Сопяо1е.Хстгевдпе(); // А теперь сделать объект оЫ копией объекта оЬ2.

оЫ .Сору(оба); Сопво1е.нс1Се("оЬ1 после копирования: "); ОЫ . Бном () г лб(оЫ .Базеля(оЬ2)) Сопяо1е.нслгеьтпе("оЫ и оЬ2 имеют одинаковые значения.") е1яе Сопяо1е.нслвестпе("оЬ1 и оЬ2 имеют разные значения."); Выполнение этой программы дает следующий результат. оЫ: а1рба: 4, Ьеба: 5 оЬ2: а1рба: б, Ьеоа: 7 220 Часть!. Язык С() оЬ1 и оЬ2 имеют равные значения. оЬ1 после копирования: а1рьа: б, Ьеоа: 7 оЬ1 и оЬ2 имеют одинаковые значения. Каждый из методов ЯаюеАв () и Сору () в приведенной выше программе получает ссылку на объект типа ЫуС1аа в в качестве аргумента. Метод ЯаюеАа ( ) сравнивает значения переменных экземпляра а1рЬа и Ьеса в вызывающем объекте со значениями аналогичных переменных в объекте, передаваемом посредством параметра оЬ.

Данный метод возвращает логическое значение с где только в том случае, если оба объекта имеют одинаковые значения этих переменных экземпляра. А метод сору () присваивает значения переменных а1рЬа и Ьеса из объекта, передаваемого по ссылке посредством параметра оЬ, переменным а1рна и Ьеса из вызывающего объекта.

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

В некоторых случаях последствия передачи объекта по ссылке будут отличаться от тех результатов, к которым приводит передача значения обычного типа. Для выяснения причин этих отличий рассмотрим два способа передачи аргументов методу. Первым способом является вызов по значению. В этом случае значение аргумента копируется в формальный параметр метода.

Следовательно, изменения, вносимые в параметр метода, не оказывают никакого влияния на аргумент, используемый для вызова. А вторым способом передачи аргумента является вызов по ссылке. В данном случае параметру метода передается ссылка на аргумент, а не значение аргумента. В методе эта ссылка используется для доступа к конкретному аргументу, указываемому при вызове. Это означает, что изменения, вносимые в параметр, будут оказывать влияние на аргумент, используемый для вызова метода. По умолчанию в С)) используется вызов по значению, а это означает, что копия аргумента создается и затем передается принимающему параметру.

Следовательно, при передаче значения обычного типа, например 1пг или г)опЬ1е, все, что происходит с параметром, принимающим аргумент, не оказывает никакого влияния за пределами метода. В качестве примера рассмотрим следующую программу. Передача аргументов обычных типов по значению. овгпЧ Яувоеюг с1авв Тевс ( /* этот метод не оказывает никакого влияния на аргументы, используемые для его вызова. */ роЬ11с нога Кооьапэе(гпт 1, 1пв 1) ( 1=ге) 3 = 3' ) ) с1авв Са11вууа1ое ( Глава 8. Подробнее о методах и классах 222.

зоагтс чотб Маьп() ( Тезг оЪ = пеи Тазг() 1по а = 15, Ь = 201 Сопво1е.нгаоеъдпе("а и Ь до вызова: ав""тЬ)) оЬ.Моснапче(а, Ь); Сопао1е.нгьоеъдпе("а и Ь после вызова: а<-"геЬ); Вот какой результат дает выполнение этой программы. а и Ь до вызова: 15 20 а и Ь после вызова: 15 20 Как видите, операции, выполняемые в методе ИоСЬапое ( ), не оказывают никакого влияния на значения аргументов а и Ь, используемых для вызова данного метода. Это опять же объясняется тем, что параметрам 1 и 0 переданы копии значений аргументов а и Ь, а сами аргументы а и Ь совершенно не зависят от параметров 1 и 0Ь В частности, присваивание параметру 1 нового значения не будет оказывать никакого влияния на аргумент а.

Дело несколько усложняется при передаче методу ссылки на объект. В этом случае сама ссылка по-прежнему передается по значению. Следовательно, создается копия ссылки, а изменения, вносимые в параметр, не оказывают никакого влияния на аргумент. (Так, если организовать ссылку параметра на новый объект, то это изменение не повлечет за собой никаких последствий для объекта, на который ссылается аргумент.) Но главное отличие вызова по ссылке заключается в том, что изменения, происходящие с объектом, на который ссылается параметр, окажут влияние на тот объект, на который ссылается аргумент.

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

Таким образом, объект в методе будет оказывать влияние на объект, используемый в качестве аргумента. Для примера рассмотрим следующую программу. // Передача объектов по ссылке. озьпс Яувгезг с1авв Тевг ( роЬ11с 1пс а, Ьг роЬ11с Тевг(ьпо 1, 1по 0) а Ь ) 222 Часть 1. Язык С» /* Передать объект. Теперь переменные оЬ.а и оЬ.Ь из объекта, используемого в вызове метода, будут изменены. *! рнь11с уо10 Сьапэе(теяг оь) ( оЬ.а = оЬ.а + оЬ.Ь; оЬ.Ь = -оЬ.Ь) ) ) с1аяя Са11вукеГ ( ягас1с уо10 Ма1п() ( Теяг оЬ = пен Теяг(15, 20) ) Сопяо1е.игьпеъьпе("оЬ.а и оЬ.Ь до вызова: оЬ.а ь " " + оЬ.Ь); оЬ.СЬапэе(оь)Г Сопяо1е.нгьге11пе("оЬ.а и оЬ.Ь после вызова: оЬ а ь " " ь оь Ь)г Выполнение этой программы дает следующий результат.

оЬ.а и оЬ.Ъ до вызова: 15 20 оЬ.а и оЬ.Ь после вызова: 35 -20 Как видите, действия в методе Сьапое() оказали в данном случае влияние на объект, использовавшийся в качестве аргумента. Итак, подведем краткий итог. Когда объект передается методу по ссылке, сама ссылка передается по значению, а следовательно, создается копия этой ссылки. Но эта копия будет по-прежнему ссылаться на тот же самый объект, что и соответствующий аргумент.

Это означает, что объекты передаются методам неявным образом по ссьглке. Использование модификаторов параметров ген и ои~ Как пояснялось выше, аргументы простых типов, например Тпс или сьаг, передаются методу по значению. Это означает, что изменения, вносимые в параметр, принимающий значение, не будут оказывать никакого влияния на аргумент, используемый для вызова. Но такое поведение можно изменить, используя ключевые слова ге 5 и онь для передачи значений обычных типов по ссылке. Это позволяет изменить в самом методе аргумент, указываемый при его вызове. Прежде чем переходить к особенностям использования ключевых слов гет и опс, полезно уяснить причины, по которым значение простого типа иногда требуется передавать по ссылке. В общем, для этого существуют две причины: разрешить методу изменить содержимое его аргументов или же возвратить несколько значений.

Рассмотрим каждую из этих причин более подробно. Нередко требуется, чтобы метод оперировал теми аргументами, которые ему передаются. Характерным тому примером служит метод Виар (), осуществляющий перестановку значений своих аргументов. Но поскольку аргументы простых типов пере- Глава 8. Подробнее о методах и классах 223 даются по значению, то, используя выбираемый в С() по умолчанию механизм вызова по значению для передачи аргумента параметру, невозможно написать метод, меняющий местами значения двух его аргументов, например типа 1ос. Зто затруднение разрешает модификатор ге Т. Как вам должно быть уже известно, значение возвращается из метода вызывающей части программы с помощью оператора гесого.

Но метод может одновременно возвратить лишь одно значение. А что, если из метода требуется возвратить два или более фрагментов информации, например, целую и дробную части числового значения с плавающей точкой? Такой метод можно написать, используя модификатор оиг. Использование модификатора параметра хек Модификатор параметра ге 1 принудительно организует вызов по ссылке, а не по значению. Зтот модификатор указывается как при объявлении, так и при вызове метода.

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

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

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

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее