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

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

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

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

Исходное значение переменной ЯСаСТсОещо.Ча1 равно 100 Текущее значение переменной ЯСаглсОещо.Ча1 равно 8 ЯСаС1сОещо.Ча101н2(): 4 Как следует из приведенного выше результата, переменная типа ясас1с инициализируется до создания любого объекта ее класса. На применение методов типа ясасас накладывается ряд следующих ограничений. ° В методе типа БСаС1с должна отсутствовать ссылка С)гля, поскольку такой метод не выполняется относительно какого-либо объекта. 262 Часть (.

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

Он, в частности, не может оперировать переменной экземпляра своего класса, поскольку у него отсутствуют объекты, которыми он мог бы оперировать. Ниже приведен пример класса, в котором недопустим метод Ча1РьчРепош () типа Бсасьс. с1авв Бсас1скггог ( рцб11с 1пс Репош = 3( // обычная переменная зкземпляра рц)з11с вгас1с 1пг Ча1 = 1024; // статическая переменная /* Ошибка! Непосредственный доступ к нестатической переменной из статического метода недопустим. */ всаГ1с гпо Ча1бгчОепош() ( гесцгп Ча1/Репса; // не подлежит компиляции! В данном примере кода Репою является обычной переменной, которая недоступна из метода типа зсас1с. Но в то же время в этом методе можно воспользоваться переменной Ча1, поскольку она объявлена как згагьс.

Аналогичная ошибка возникает при попытке вызвать нестатический метод из статического метода того же самого класса, как в приведенном ниже примере. цв1по Бувсеш; с1авз Нпооьегзсас1скггог ( Нестатический метод. чогб НопзсасгсМеГЬ() ( Сопво1е.нггсеъьпе("Н методе НопзгасгснеГЬ().") ) /* Ошибка! Непосредственный вызов нестатического метода из статического метода недопустим.

*/ всасгс чоьд зсас1снеГЛ() ( Нопзсас1снеГН() 1 // не подлежит компиляции! В данном случае попытка вызвать нестатический метод (т.е. метод экземпляра) из статического метода приводит к ошибке во время компиляции. Следует особо подчеркнуть, что из метода типа згасьс нельзя вызывать методы экземпляра и получать доступ к переменным экземпляра его класса, как это обычно делается посредством объектов данного класса. И объясняется это тем, что Глава 8. Подробнее о методах н классах 263 без указания конкретного объекта переменная или метод экземпляра оказываются недоступными.

Например, приведенный ниже фрагмент кода считается совершенно верным. с1аяя МуС1аяя // Нестатический метод. чо1б НопягаггсМеСЬ() ( Сопяо1е.агъсе11пе("В методе НопягаС1сМеСЬ().") ) /* Нестатический метод может быть вызван из статического метода по ссылке на объект. */ рОЬ11С ягапго чс1Н яоаС1СМЕСЬ(МуС1аяя ОЬ) ( оЬ.нопЯСаггсмеСЬ()ь // все верно! ) В данном примере метод мопясас1смесь () вызывается из метода ясас1смесь () по ссылке на объект оЬ типа МуС1а я я. Поля типа я с а с хо не зависят от конкретного объекта, и поэтому они удобны для хранения информации, применимой ко всему классу.

Ниже приведен пример программы, демонстрирующей подобную ситуацию. В этой программе поле типа ясасъс служит для хранения количества существующих объектов. // Использовать поле типа вгаС1с длн подсчета экземпляров существующих объектов. оягпс Яуяоещ; с1аяя СонпС1пяС ( яоаС1с гпС соппС = 0; Инкрементировать подсчет, когда создаетсн объект. роЬ11с СоопС1пяС() ( соопс++) // Декрементировать подсчет, когда уничтожается объект.

-СоппС1пяС() ( соопс —: ) ровтгс ясапгс 1пС Оегсоппг() ( гесогп соппс; ) с1аяв Соопгоепю ( ягаС1с чоьб Маьп() СоппС1пяС ОЬ; Гог(1пс 1=0; 1 < 10; ь++) ( 264 Часть!. Язык С№ оЬ = пеи Соппо1пвг()9 сопзо1е.нгьсеььпе("текущий подсчет: " ь соппс1пвс.пессоипс())1 Выполнение этой программы приводит к следующему результату. Всякий раз, когда создается объект типа Соппг1пз С, инкрементируется поле соппб типа зсас1с. Но всякий раз, когда такой объект утилизируется, поле соппс декрементируется. Следовательно, поле соппС всегда содержит количество существующих в настоящий момент объектов.

И это становится возможным только благодаря использованию поля типа збабьс. Аналогичный подсчет нельзя организовать с помощью переменной экземпляра, поскольку он имеет отношение ко всему классу, а не только к конкретному экземпляру объекта этого класса. Ниже приведен еще один пример применения статических членов класса. Ранее в этой главе было показано, как объекты создаются с помощью фабрики класса. В том примере фабрика была нестатическим методом, а это означало, что фабричный метод можно было вызывать только по ссылке на объект, который нужно было предварительно создать. Но фабрику класса лучше реализовать как метод типа зсас№с, что даст возможность вызывать этот фабричный метод, не создавая ненужный объект.

Именно это улучшение и отражено в приведенном ниже измененном примере программы, реализующей фабрику класса. использовать статическую фабрику класса. пвьпд зуввеш; с1авв МуС1азв ( Тпса, Ь; // Создать фабрику длл класса МуС1авв. воапьс роЬ11с МуС1авз Гасоогу(ьпо 1, 1пг 0) ( Мустазв С = пеи Мус1азз(); г..а=1; с.ь = >; геоогп С; у/ возвратить объект ) рпЬ11с чоьб Зпоч () ( Сопво1е.нгтге11пе("а и Ь: " + а ь " " ь Ь); Текущий Текущий Текущий Текущий Текущий Текущий Текущий Текущий Текущий Текущий подсчет: 1 подсчет: 2 подсчет: 3 подсчет: 4 подсчет: 5 подсчет: б подсчет: 7 подсчет: 8 полсчет: 9 подсчет: 10 Глава 8. Подробнее о методах н вассах 265 с1аяя МахеОЬ)есгя ( ясасьс чотб Мали () ( 1пс а, б) Сформировать объекты, используя фабрику. бог(1=0, 9=10; 1 < 10; 1++, З вЂ” ) ( МуС1аяя оЬ = Мус1аяя.расяогу(1, 9); // создать объект оЪ. Яном (); ) Сопяо1е.игагеььпе(); В этом варианте программы фабричный метод рассолу () вызывается по имени его класса в следующей строке кода.

МуС1аяя оЬ = Мус1аяя.еасгогу(1, 3); // создать объект Теперь нет необходимости создавать объект класса МуС1 аз я, перед тем как пользоваться фабрикой этого класса. Статические конструкторы Конструктор можно также объявить как зсасдс. Статический конструктор, как правило, используется для инициализации компонентов, применяемых ко всему классу, а не к отдельному экземпляру объекта этого класса. Поэтому члены класса инициализируются статическим конструктором до создания каких-либо объектов этого класса. Ниже приведен простой пример применения статического конструктора. // Применить статический конструктор. пявпч Яуяяеи; с1аяя Сопя ( риЫтс ягаятс ьпг а1рда; рсЫ1с 1пп Ьепа; // Статический конструктор.

згатьс Сопя() ( а1рва = 99; Сопяо1е.нг1яевьпе("В статическом конструкторе."); ) Конструктор экземпляра. рпЬ11с Сопя() ( Ьега = 100; Сопяо1е.игьгеьвпе("В конструкторе экземпляра.")! ) ) 266 Часть!. Язык С/) с1аав Сопаоеио ( асасьс тоге) Маьп() ( Сопа оЬ = пен Сопя()) Сопао1е.иг1теъгпе("Сола.а1рна: " ь Сопв.а1рна) Сопво1е.нгьпесьпе("оЬ.Ьега: " + оЬ.Ьепа); ) При выполнении этого кода получается следующий результат. В статическом конструкторе.

В конструкторе экземпляра. Сопв.а1рьа: 99 оЬ.Ьепа: 100 Обратите внимание на то, что конструктор типа зсассс вызывается автоматически, когда класс загружается впервые, причем до конструктора экземпляра. Из этого можно сделать более общий вывод: статический конструктор должен выполняться ло любого конструктора экземпляра.

Более того, у статических конструкторов отсутствуют модификаторы доступа — они пользуются доступом по умолчанию, а следовательно, их нельзя вызывать из программы. Статические классы Класс можно объявлять как звавьс. Статический класс обладает двумя основными свойствами. Во-первых, объекты статического класса создавать нельзя.

И во-вторых„ статический класс должен содержать только статические члены. Статический класс создается по приведенной ниже форме объявления класса, видоизмененной с помощью ключевого слова згасьс. всас1с с1авв имя класса ( // В таком классе все члены должны быть объявлены как зсасьс. Ведь если класс становится статическим, то это совсем не означает, что статическими становятся и все его члены.

Статические классы применяются главным образом в двух случаях. Во-первых, статический класс требуется при создании метода раси)ирония. Методы расширения связаны в основном с языком 1.1(Щ и поэтому подробнее рассматриваются в главе 19. И во-вторых, статический класс служит для хранения совокупности связанных друг с другом статических методов. Именно это его применение и рассматривается ниже. В приведенном ниже примере программы класс Нпыег1срп типа асасьс служит для хранения ряда статических методов, оперирующих числовым значением. А поскольку все члены класса нптегссрп объявлены как зсаь1с, то этот класс также объявлен как з сас то, чтобы исключить получение экземпляров его объектов. Таким образом, класс Нпвегкскп выполняет организационную роль, предоставляя удобные средства для группирования логически связанных методов. // Продемонстрировать применение статического класса.

паапа Зузпеьо Глава 8. Подробнее овлегодах н классах 267 зсасас с1аза Ипшеггсрп ( // Возвратить обратное числовое значение. всакгс рпЬ1гс бопЬ1е Весгргоса1(бопЬ1е пош) ( гекогп 1/ниш," Возвратить дробную часть числового значения. всас1с рпЬ11с бопЬ1е ГгасРагс(с)опЬ1е ппш) ( гегнгп пош — (гпг) пош; ) // Возвратить логическое значение ггие, если числовое значение переменной пош окажется четным. зсаслс роЬ11с Ьоо1 1звчеп(бооЬ1е ппш) ( гегпгп (ппш Ъ 2) == 0 ? Ггпе : Га1зе; ) // Возвратить логическое значение Ггпе, если числовое // значение переменной пош окажется нечетным.

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

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

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

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