Главная » Просмотр файлов » 1629295407-c61bfe4caba98380ea3e7cdae6295416

1629295407-c61bfe4caba98380ea3e7cdae6295416 (846200), страница 34

Файл №846200 1629295407-c61bfe4caba98380ea3e7cdae6295416 (Шилдт Герберт - Полный справочник по C#) 34 страница1629295407-c61bfe4caba98380ea3e7cdae6295416 (846200) страница 342021-08-18СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

*/do {nextdigit = num % 10;n[numdigits] = nextdigit;numdigits++;num = num / 10;}while(num > 0);numdigits--;// Отображаем слова.for(; numdigits >= 0; numdigits--)Console.Write(digits[n[numdigits]] + " ");}}Console.WriteLine();Вот результаты выполнения этой программы:Число: 1908Число в словах: один девять нуль восемь176Часть I. Язык C#В этой программе string-массив digits хранит в порядке возрастания словесныеэквиваленты цифр от нуля до девяти. Чтобы заданное целочисленное значениепреобразовать в слова, сначала выделяется каждая цифра этого значения, начиная с крайнейправой, и полученные цифры запоминаются в обратном порядке в int-массиве с именем n.Затем этот массив опрашивается от конца к началу, и каждое целое значение массива nиспользуется в качестве индекса для доступа к элементам массива digits, чтобыотобразить на экране соответствующую строку.Постоянство строкСледующее утверждение, вероятно, вас удивит: содержимое string-объектовнеизменно.

Другими словами, последовательность символов, составляющих строку,изменить нельзя. Хотя это кажется серьезным недостатком, на самом деле это не так. Этоограничение позволяет C# эффективно использовать строки. Если вам понадобится строка,которая должна представлять собой “вариацию на тему” уже существующей строки,создайте новую строку, которая содержит желаемые изменения. Поскольку неиспользуемыестроковые объекты автоматически утилизируются системой сбора мусора, даже не нужнобеспокоиться о “брошенных” строках.При этом необходимо понимать, что ссылочные переменные типа string могутменять объекты, на которые они ссылаются. А содержимое созданного string-объектаизменить уже невозможно.Чтобы до конца понять, почему неизменяемые строки не являются препятствием дляпрограммиста, воспользуемся еще одним методом класса string: Substring(). Этотметод возвращает новую строку, которая содержит заданную часть вызывающей строки.Поскольку создается новый string-объект, содержащий подстроку, исходная строкаостается неизменной, и правило постоянства строк не нарушается.

Вот формат вызоваметодаSubstring(): string Substring(int start, int len)Здесь параметр start означает индекс начала, а параметр len задает длинуподстроки.Рассмотрим программу, которая демонстрирует метод Substring() и принциппостоянства строк.// Использование метода Substring().using System;class SubStr {public static void Main() {string orgstr = "C# упрощает работу со строками.";// Создание подстроки.string substr = orgstr.Substring(4, 14);Console.WriteLine("orgstr: " + orgstr);Console.WriteLine("substr: " + substr);}}А вот как выглядят результаты работы этой программы:orgstr: C# упрощает работу со строками.substr: прощает работуГлава 7.

Массивы и строки177Как видите, исходная строка orgstr не изменена, а строка substr содержитнужную подстроку.И хотя постоянство string-объектов обычно не является ограничением, неисключены ситуации, когда возможность модифицировать строки могла бы оказатьсявесьма кстати. Для таких случаев в C# предусмотрен класс StringBuilder, которыйопределен в пространстве имен System.Text. Этот класс создает объекты, которыеможно изменять. Однако в большинстве случаев все же используются string-объекты, ане объекты класса StringBuilder.Использование строк в switch-инструкцияхДля управления switch-инструкциями можно использовать string-объекты,причем это единственный тип, который там допускается, помимо типа int. Этавозможность в некоторых случаях облегчает обработку. Например, следующая программаотображает цифровой эквивалент слов “один”, “два” и “три”.// Демонстрация возможности строкового управления// инструкцией switch.using System;class StringSwitch {public static void Main() {string[] strs = { "один", "два", "три", "два", "один" };foreach(string s in strs) {switch(s) {case "один":Console.Write(1);break;case "два":Console.Write(2);break;case "три":Console.Write(3);break;}}}}Console.WriteLine();Вот результат выполнения этой программы:12321178Часть I.

Язык C#Полныйсправочник поГлава 8Подробнее о методах иклассахВэтой главе мы снова обращаемся к рассмотрению методов и классов. Начнем суправления доступом к членам класса. Затем обсудим возможность передачи методамобъектов и их возврата, после чего рассмотрим перегрузку методов, различныеформы метода Main(), рекурсию и использование ключевого слова static.Управление доступом к членам классаПоддерживая инкапсуляцию, класс обеспечивает два положительных момента. Вопервых, он связывает данные с кодом (мы используем это преимущество начиная с главы6).

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

Разрешая доступ к закрытым данным только посредством строгоопределенного набора методов, вы имеете возможность не допустить присвоение этимданным неподходящих значений, выполнив, например, проверку диапазона. Код, непринадлежащий классу, не может устанавливать закрытые члены напрямую. И именнопрограммист управляет тем, как и когда будут использоваться данные объекта. Такимобразом, при корректной реализации класс создает “черный ящик”, с которым можноработать, но внутреннее функционирование которого закрыто для вмешательства извне.Спецификаторы доступа C#Управление доступом к членам класса достигается за счет использования четырехспецификаторов доступа: public, private, protected и internal.

В этой главе мыограничимся рассмотрением спецификаторов public и private. Модификаторprotected применяется только при включении интерфейсов и описан в главе 9.Модификатор internal применяется в основном при использовании компоновочныхфайлов (assembly) и описан в главе 16.Спецификатор public разрешает доступ к соответствующему члену класса состороны другого кода программы, включая методы, определенные внутри других классов.Спецификатор private разрешает доступ к соответствующему члену класса толькодля методов, определенных внутри того же класса. Таким образом, методы других классовне могут получить доступ к private-члену не их класса.

Как разъяснялось в главе 6, приотсутствии спецификатора доступа член класса является закрытым (private) поумолчанию. Следовательно, при создании закрытых членов класса спецификатор privateнеобязателен.Спецификатор доступа должен стоять первым в списке спецификаторов типа любогочлена класса. Вот несколько примеров:public string errMsg;private double bal;private bool isError(byte status) { // ...180Часть I.

Язык C#Чтобы лучше понять разницу между спецификаторами public и private,рассмотрим следующую программу:// Сравнение доступа к открытым и закрытым членам класса.using System;class MyClass {private int alpha; // Явно задан спецификатор private.int beta; // Спецификатор private по умолчанию.public int gamma; // Явно задан спецификатор public.}/* Методы для получения доступа к членам alpha и beta.Другие члены класса беспрепятственно получают доступк private-члену того же класса. */public void setAlpha(int a) {alpha = a;}public int getAlpha() {return alpha;}public void setBeta(int a) {beta = a;}public int getBeta() {return beta;}class AccessDemo {public static void Main() {MyClass ob = new MyClass();/* Доступ к private-членам alpha и beta разрешентолько посредством соответствующих методов.

*/ob.setAlpha(-99);ob.setBeta(19);Console.WriteLine("Член ob.alpha равен " +ob.getAlpha());Console.WriteLine("Член ob.beta равен " +ob.getBeta());// К private-членам alpha или beta нельзя получить// доступ таким образом:// ob.alpha = 10;// Неверно! alpha — закрытый член!// ob.beta = 9;// Неверно! beta — закрытый член!// Можно получить прямой доступ// к члену gamma, поскольку он открытый член.ob.gamma = 99;}}Как видите, внутри класса MyClass член alpha явно определен как private-член,beta — private-член по умолчанию, a gamma определен как public-член. ПосколькуГлава 8. Подробнее о методах и классах181alpha и beta — закрытые члены, к ним нельзя получить доступ не из их “родного”класса.

Следовательно, внутри класса AccessDemo к этим членам нельзя обратитьсянапрямую. К каждому из них необходимо обращаться только через открытые (public-)методы, например setAlpha() или getAlpha(). Если удалить символ комментария вначале строки //ob.alpha = 10; // Неверно! alpha -- закрытый член!,то вы бы не смогли скомпилировать эту программу по причине нарушения доступа кзакрытому члену класса. Несмотря на то что доступ к члену alpha вне класса MyClass неразрешен, методы, определенные в классе MyClass (setAlpha() и getAlpha()), могутк нему обращаться. Это справедливо и для члена beta.Итак, к закрытым членам могут свободно обращаться другие члены того же класса,но не методы, определенные вне этого класса.Применение спецификаторов доступа public и privateНадлежащее использование спецификаторов доступа public и private — залогуспеха объектно-ориентированного программирования.

Хотя на этот счет не существуетжестких правил, все же программисты выработали общие принципы, которыми следуетруководствоваться при программировании классов.1. Члены, которые используются только внутри класса, следует определить какзакрытые.2. Данные экземпляров, которые должны находиться в пределах заданногодиапазона, следует определить как закрытые, а доступ к ним обеспечить черезоткрытые методы, выполняющие проверку вхождения в диапазон.3. Если изменение члена может вызвать эффект, распространяющийся за пределысамого члена (т.е.

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

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

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

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