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

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

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

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

Библиотека C#}// Создаем детальную копию вызывающего объекта.public object Clone() {Test temp = new Test(o.a, b);return temp;}class CloneDemo {public static void Main() {Test ob1 = new Test(10, 20);ob1.show("ob1");Console.WriteLine("Создаем объект оb2 как клон объекта ob1.");Test ob2 = (Test) ob1. Clone();ob2.show("ob2");Console.WriteLine("Заменяем член ob1.o.a числом 99, "+ "а член ob1.b числом 88.");}}ob1.o.a = 99;ob1.b = 88;ob1.show("ob1");ob2.show("ob2");Результаты выполнения этой программы таковы:Значения объекта ob1 : o.a: 10, b: 20Создаем объект оb2 как клон объекта ob1.Значения объекта оb2 : o.a: 10, b: 20Заменяем член ob1.o.a числом 99, а член ob1.b числом 88.Значения объекта ob1 : o.a: 99, b: 88Значения объекта оb2 : o.a: 10, b 20Судя по приведенным результатам, объект оb2 является копией объекта ob1, но ob1и оb2 — отдельные объекты.

Изменение одного никак не отражается на другом. Этодостигается за счет того, что для копии создается новый объект X, которому присваиваетсято же значение, которое имеет объект X в оригинале.Для реализации поверхностного копирования достаточно организовать внутри методаClone() вызов метода MemberwiseClone(), определенного в классе Object.Попробуйте, например, изменить определение метода Clone() из предыдущейпрограммы таким:// Создаем поверхностную копию вызывающего объекта.public object Clone() {Test temp = (Test) MemberwiseClone();return temp;}После внесения указанных изменений результаты выполнения той же программыбудут другими:Значения объекта ob1 : o.a: 10, b: 20Создаем объект оb2 как клон объекта ob1.Значения объекта оb2 : o.a: 10, b: 20Заменяем член ob1.o.a числом 99, а член ob1.b числом 88.Глава 19.

Пространство имен System539Значения объекта ob1 : o.a: 99, b: 88Значения объекта оb2 : o.a: 99, b: 20Обратите внимание на то, что член о в объекте ob1 и член о в объекте оb2ссылаются на один и тот же объект X. Теперь изменение одного объекта отражается надругом. Но int-поля b в каждом объекте по-прежнему независимы, поскольку имеютнессылочный тип и доступ к ним осуществляется не через ссылки.Интерфейсы IFormatProvider и IFormattableИнтерфейс IFormatProvider определяет один метод GetFormat(), которыйвозвращает объект, управляющий форматированием данных строки, удобной длявосприятия человеком.

Общий формат метода GetFormat() таков:object GetFormat(Type fmt)Здесь параметр fmt задает формат объекта. Форматирование описано в главе 20.Интерфейс IFormattable поддерживает форматирование выводимого результата вудобной для восприятия человеком форме. В интерфейсе IFormattable определенследующий метод:string ToString(string fmt, IFormatProvider fmtpvdr)Здесь параметр fmt задает инструкции форматирования, а параметр fmtpvdr —источник (поставщик) формата.

Подробно форматирование описано в главе 20.540Часть II. Библиотека C#Полныйсправочник поГлава 20Строки и форматированиеЭта глава посвящена классу string. Как известно каждому программисту, безобработки строк не обходится практически ни одна программа. Поэтому в классеstring определено множество методов, свойств и полей, которые предлагаютпрограммисту богатую палитру инструментов, позволяющих создавать строки иманипулировать ими. С темой обработки строк тесно связана тема форматирования данныхс целью приведения их к форме, удобной для восприятия человеком. Используявозможности соответствующей подсистемы, можно нужным образом форматироватьчисловые типы языка C#, дату и время, а также перечисления.Строки в C#Обзор средств обработки строк в C# был представлен в главе 7, и повторения“пройденного” здесь не предполагается.

Но прежде чем перейти к рассмотрению классаstring, имеет смысл поговорить об особенностях реализации строк в языке C#.Во всех языках программирования строка (string) представляет собойпоследовательность символов, но точная реализация такой последовательности меняетсяпри переходе от одного языка к другому. В языке C++ строки реализованы в виде массивовсимволов, но в C# все обстоит иначе. Строки в C# — это объекты встроенного типа данныхstring. Поэтому string является ссылочным типом данных. Более того, string — этоC#-имя стандартного строкового типа .NET-среды System.String.

Таким образом, C#строка имеет доступ ко всем методам, свойствам, полям и операторам, определенным вклассе String.В созданной строке последовательность составляющих ее символов изменить нельзя.Благодаря этому ограничению строки в C# (по сравнению с другими языками) реализованыболее эффективно. И хотя это ограничение может показаться серьезным недостатком, насамом деле оно таковым не является. Если вам понадобится строка, которая представляетсобой вариацию “на тему” другой, уже существующей строки, просто создайте новуюстроку, которая будет содержать желаемые изменения, а затем удалите исходный вариант,если он вам больше не нужен.

Поскольку неиспользуемые строковые объектыавтоматически удаляются подсистемой сбора мусора, можно не беспокоиться обисключенных “из обращения” строках. Однако вы должны четко понимать, что ссылочныепеременные типа string, конечно же, могут менять объекты, на которые они ссылаются.А вот последовательность символов конкретного string-объекта после его созданияизменить уже нельзя.Чтобы создать строку, которую можно изменять, в C# предусмотрен классStringBuilder, определенный в пространстве имен System.Text. И все же вбольшинстве случаев лучше использовать тип string, а не класс StringBuilder.Класс StringКласс String определен в пространстве имен System. Он реализует интерфейсыIComparable, ICloneable, IConvertible и IEnumerable.String — этоsealed-класс, т.е. из него нельзя создать производный класс.

Класс String содержит C#средства обработки строк. Он лежит в основе встроенного C#-типа string и являетсячастью среды .NET Framework. Следующие разделы посвящены детальному рассмотрениюкласса String.542Часть II. Библиотека C#Конструкторы класса StringВ классе String определено несколько конструкторов, которые позволяютсоздавать строки различными способами. Чтобы создать строку из символьного массива,используйте один из следующих конструкторов:public String(char[] chrs)public String(char[] chrs, int start, int count)Первый формат предназначен для построения строки, которая будет состоять изсимволов, содержащихся в массиве chrs. Строка, создаваемая с помощью второгоформата, будет состоять из count символов, взятых из массива chrs, начиная с символа,индекс которого задан параметром start.Существует также возможность создать строку, содержащую заданный символ,повторенный нужное количество раз.

Для этого используйте этот конструктор:public String(char ch, int count)Здесь параметр ch задает символ, который будет повторен count раз. Используяодин из следующих конструкторов, можно создать строку, заданную указателем насимвольный массив:unsafe public String(char* chrs)unsafe public String(char* chrs, int start, int count)Конструктор первого формата предназначен для построения строки, содержащейсимволы, на которые указывает параметр chrs.

При этом предполагается, что параметрchrs указывает на массив с завершающим нулем (символом конца строки). Строка,создаваемая с помощью конструктора второго формата, будет состоять из count символов,взятых из массива, адресуемого указателем chrs, начиная с символа, индекс которогозадан параметром start.Используя один из следующих конструкторов, можно создать строку, заданнуюуказателем на массив байтов:unsafe public String(sbyte* chrs)unsafe public String(sbyte* chrs, int start, int count)unsafe public String(sbyte* chrs, int start, int count,Encoding en)Конструктор первого формата предназначен для построения строки, содержащейбайты, на которые указывает параметр chrs.

При этом предполагается, что параметр chrsуказывает на массив с завершающим нулем (символом конца строки). Строка, создаваемая спомощью конструктора второго формата, будет состоять из count байтов, взятых измассива, адресуемого указателем chrs, начиная с байта, индекс которого задан параметромstart. Третий формат конструктора позволяет указать тип кодирования байтов.

Поумолчанию используется тип ASCIIEncoding. Класс Encoding определен впространстве имен System.Text.Строковый литерал создает строковый объект автоматически. Поэтому строковыйобъект часто инициализируется присваиванием ему строкового литерала. Вот пример:string str = "новая строка";Поле, индексатор и свойство класса StringВ классе string определено только одно поле:public static readonly string EmptyПоле Empty определяет пустую строку, т.е. строку, которая не содержит символов.Не следует путать ее с нулевой (пустой) ссылкой типа String, которая просто ссылаетсяна несуществующий объект.Глава 20.

Строки и форматирование543В классе String определен единственный индексатор, предназначенный только длячтения:public char this[int idx] { get; }Этот индексатор позволяет получить символ по заданному индексу. Подобномассивам, индексация в строках начинается с нуля. Поскольку объекты String неподлежат изменению, в том, что класс String поддерживает индексатор,предназначенный только для чтения, есть здравый смысл.В классе String определено единственное свойство, предназначенное только длячтения:public int Length { get; }Свойство Length возвращает количество символов, содержащихся в строке.Операторы класса StringВ классе String реализована перегрузка двух операторов: “==” и “!=”.

Чтобыузнать, равны ли две строки, используйте оператор “==”. Если оператор “==” применяетсяк объектным ссылкам, то он определяет, ссылаются ли они обе на один и тот же объект. Ноесли оператор “==” применяется к двум ссылкам типа String, то сравниваетсясодержимое самих строк. То же справедливо и для оператора “!=”: при сравнении Stringобъектов сравнивается содержимое строк. Но что касается других операторов отношений(например, “<” или “>=”), то они сравнивают ссылки точно так же, как объекты любыхдругих типов.

Чтобы узнать, например, больше (меньше) ли одна строка другой,используйте метод Compare(), определенный в классе String.Методы класса StringВ классе String определено множество различных методов. При этом многие изних имеют два или больше перегруженных форматов. Поэтому вместо бессмысленного ихперечисления, рассмотрим лишь наиболее употребимые методы и продемонстрируем ихиспользование на конкретных примерах.Сравнение строкИз всех операций обработки строк, возможно, чаще всего используется операциясравнения одной строки с другой.

Поэтому в классе String предусмотрен широкий выборметодов сравнения, которые перечислены в табл. 20.1. Самый универсальный из них —метод Compare(). Он может сравнивать две строки целиком или по частям, причем сучетом (или без) прописного или строчного варианта букв (т.е. регистра клавиатуры). Вобщем случае при сравнении строк, т.е. при определении того, больше ли одна строкадругой, меньше или они равны, используется лексикографический порядок.

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

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

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

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