Главная » Просмотр файлов » Г. Шилдт - Полный справочник по C#

Г. Шилдт - Полный справочник по C# (1160789), страница 26

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

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

Во-первых, оно объявляет переменную сименем house классового типа Building. Но эта переменная не определяет объект, аможет лишь ссылаться на него. Во-вторых, рассматриваемое объявление создает реальную физическую копию объекта и присваивает переменной house ссылку на этотобъект. И все это — "дело рук" оператора new. Таким образом, после выполненияприведенной выше строки кода переменная house будет ссылаться на объект типаBuilding.Оператор new динамически (т.е. во время выполнения программы) выделяет памятьдля объекта и возвращает ссылку на него. Эта ссылка (сохраненная в конкретной переменной) служит адресом объекта в памяти, выделенной для него оператором new.

Такимобразом, в С# для всех объектов классов должна динамически выделяться память.Предыдущую инструкцию, объединяющую в себе два действия, можно переписатьв виде двух инструкций.Building house;// Объявление ссылки на объект.house = new Building(// Выделение памяти для объекта// типа Building.В первой строке объявляется переменная house как ссылка на объект типаBuilding. Поэтому house — это переменная, которая может ссылаться на объект, ноне сам объект. В этот момент (после выполнения первой инструкции) переменнаяhouse содержит значение n u l l , которое означает, что она не ссылается ни на какойобъект.

После выполнения второй инструкции будет создан новый объект классаB u i l d i n g , а ссылка на него будет присвоена переменной house. Вот теперь ссылкаhouse связана с объектом.Тот факт, что к объектам классов доступ осуществляется посредством ссылок, объясняет, почему классы называются ссылочными типами. Ключевое различие между ти-132Часть I. Язык С#пами значений и ссылочными типами состоит в значении, которое содержит переменная каждого типа.

Переменная типа значения сама содержит значение. Например,после выполнения следующих инструкцийi n t x;Iх = 10;переменная х содержит значение 10, поскольку х — это переменная типа i n t , т.е. пе;менная типа значения. Но при выполнении инструкцииГBuildingh o u s e = new B u i l d i n g ( ) ;сама переменная house будет содержать не объект, а ссылку на этот объект.Переменные ссылочного типа и присвоениеим значенийВ операции присвоения ссылочные переменные действуют не так, как переменныетипа значений (например, типа i n t ) . Присваивая одной переменной (типа значения)значение другой, мы имеем довольно простую ситуацию.

Переменная слева (от оператора присваивания) получает копию значения переменной справа. При выполнениианалогичной (казалось бы) операции присваивания между двумя переменными ссылочного типа ситуация усложняется, поскольку мы изменяем объект, на который ссылается ссылочная переменная, что может привести к неожиданным результатам. Например, рассмотрим следующий фрагмент программы:Building housel = new B u i l d i n g ( ) ;Building house2 = housel;IНа первый взгляд может показаться, что housel и house2 ссылаются на различные объекты, но это не так. Обе переменные, housel и house2, ссылаются на один итот же объект.

Присвоение значения переменной housel переменной house2 просто заставляет переменную house2 ссылаться на тот же объект, на который ссылаетсяи переменная housel. В результате на этот объект можно воздействовать, используялибо имя housel, либо имя house2. Например, присвоив1 h o u s e l . a r e a = 2600;мы добьемся того, что обе инструкцииConsole.WriteLine(housel.area);Console.WriteLine(house2.area);•отобразят одно и то же значение — 2600.Несмотря на то что обе переменные, housel и house2, ссылаются на один и тотже объект, они никак не связаны между собой. Например, очередное присвоение переменной house2 просто заменяет объект, на который она ссылается.

После выполнения последовательности инструкцийBuilding housel = new Building();Building house2 = housel;Building house3 = new Building();Building house2 = house3; // Теперь переменные house2 и// house3 ссылаются на один и// тот же объект.переменная house2 будет ссылаться на тот же объект, на который ссылается переменная house3. Объект, на который ссылается переменная housel, не меняется.Глава 6.

Введение в классы, объекты и методы133МетодыКак упоминалось выше, переменные экземпляров и методы — две основные составляющие классов. Пока наш класс Building содержит только данные. Хотя такиеклассы (без методов) вполне допустимы, большинство классов имеют методы. Методы — это процедуры (подпрограммы), которые манипулируют данными, определенными в классе, и во многих случаях обеспечивают доступ к этим данным.

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

Но помните, что имя Main () зарезервировано для метода, с которого начинаетсявыполнение программы. Кроме того, в качестве имен методов нельзя использоватьключевые слова С#.Имена методов в тексте этой книги сопровождаются парой круглых скобок. Например, если метод имеет имя g e t v a l , то в тексте будет написано g e t v a l (). Это помогает отличать имена переменных от имен методов.Формат записи метода такой:доступ тип_возврата имя(список_параметров){// тело метода}Здесь элемент доступ означает модификатор доступа, который определяет, какиечасти программы могут получить доступ к методу. Как упоминалось выше, модификатор доступа необязателен, и, если он не указан, подразумевается, что метод закрыт( p r i v a t e ) в рамках класса, где он определен. Пока мы будем объявлять все методыкак public-члены, чтобы их могли вызывать все остальные составные части программного кода, даже те, которые определены вне класса.С помощью элемента тип_возврата указывается тип значения, возвращаемогометодом.

Это может быть любой допустимый тип, включая типы классов, создаваемыепрограммистом. Если метод не возвращает никакого значения, необходимо указатьтип void. Имя метода, как нетрудно догадаться, задается элементом имя. В качествеимени метода можно использовать любой допустимый идентификатор, отличный оттех, которые уже использованы для других элементов программы в пределах текущейобласти видимости. Элемент список_параметров представляет собой последовательность пар (состоящих из типа данных и идентификатора), разделенных запятыми. Параметры — это переменные, которые получают значения аргументов, передаваемыхметоду при вызове. Если метод не имеет параметров, список_параметров остаетсяпустым.Добавление методов в класс B u i l d i n gКак вам уже известно, методы класса, как правило, манипулируют данными, определенными в классе, и обеспечивают доступ к этим данным.

Зная это, вспомним, чтометод М а т () в предыдущей программе вычислял площадь, приходящуюся на одногочеловека, путем деления общей площади здания на количество жильцов.Несмотря на формальную корректность, эти вычисления выполнены не самымудачным образом. Ведь с вычислением площади, приходящейся на одного человека,вполне может справиться сам класс Building, поскольку эта величина зависит толькоот значений переменных a r e a и occupants, которые инкапсулированы в классеBuilding. Как говорится, сам Бог велел классу B u i l d i n g выполнить это арифметиче-134Часть I. Язык С#ское действие.

Более того, если оно таки будет "закреплено" за этим классом, тодругой программе, которая его использует, не придется делать это действие"вручную". Здесь налицо не просто удобство для "других" программ, а предотвращение неоправданного дублирования кода. Наконец, внося в класс B u i l d i n g метод, который вычисляет площадь, приходящуюся на одного человека, вы улучшаете его объектно-ориентированную структуру, инкапсулируя внутри рассматриваемого класса величины, связанные непосредственно со зданием.Чтобы добавить в класс B u i l d i n g метод, необходимо определить его внутри объявления класса.

Например, следующая версия класса Building содержит метод сименем a r e a P e r P e r s o n O , который отображает значение площади конкретного здания, приходящейся на одного человека.// Добавление метода в класс B u i l d i n g .using System;class Building {public int floors;// количество этажейpublic int area;// общая площадь зданияpublic int occupants; // количество жильцов// Отображаем значение площади, приходящейся// на одного человека,public void areaPerPerson() {Console.WriteLine(" " + area / occupants +" приходится на одного человека");// Используем метод areaPerPerson().class BuildingDemo {public static void Main() {Building house = new Building();, Building office = new Building();// Присваиваем значения полям в объекте house,house.occupants = 4;house.area = 2500;house.floors = 2;// Присваиваем значения полям в объекте office,office.occupants = 25;office.area = 4200;office.floors - 3;Console.WriteLine("Дом имеет:\n " +house.floors + " этажа\п " +house.occupants + " жилыда\п " +house.area +" квадратных футов общей площади, из них");house.areaPerPerson();Console.WriteLine();Console.WriteLine("Офис имеет:\nГлава 6.

Введение в классы, объекты и методы" +135office.floors + " этажа\п " +office.occupants + " работников\п " +office.area +11квадратных футов общей площади, из них");office.areaPerPerson();Эта программа генерирует результаты, которые совпадают с предыдущими:Дом имеет:2 этажа4 жильца2500 квадратных футов общей площади, из них625 приходится на одного человекаОфис имеет:3 этажа25 работников4200 квадратных футов общей площади, из них168 приходится на одного человекаТеперь рассмотрим ключевые элементы этой программы, начиная с самого методаareaPerPerson ( ) . Первая строка этого метода выглядит так:I p u b l i c void a r e a P e r P e r s o n ( ) {В этой строке объявляется метод с именем a r e a P e r P e r s o n (), который не имеетпараметров. Этот метод определен с использованием спецификатора доступа p u b l i c ,поэтому его могут использовать все остальные части программы.

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

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

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

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