
- •Оглавление
- •Об авторе
- •Посвящение
- •Благодарности
- •Ждем ваших отзывов!
- •Что такое .NET
- •Создание исходной программы
- •Тестовая поездка
- •Каркас программы
- •Комментарии
- •Введение в хитрости панели элементов
- •Повторное использование кода из панели элементов
- •Правила объявления переменных
- •Вариации на тему int
- •Объявление переменной с плавающей точкой
- •Ограничения переменных с плавающей точкой
- •Объявление переменных типа decimal
- •Сравнение десятичных и целых чисел, а также чисел с плавающей точкой
- •Логичен ли логический тип
- •Символьные типы
- •Что такое тип-значение
- •Неизменяемость строк
- •Основные операции над строками
- •Сравнение строк
- •Сравнение без учета регистра
- •Отличие строк в разных регистрах
- •Преобразование символов строки в символы верхнего или нижнего регистра
- •Поиск в строках
- •Как искать
- •Пуста ли строка
- •Удаление пробельных символов
- •Анализ числового ввода
- •Обработка последовательности чисел
- •Объединение массива строк в одну строку
- •Арифметика
- •Простейшие операторы
- •Порядок выполнения операторов
- •Оператор инкремента
- •Сравнение чисел с плавающей точкой
- •Составные логические операторы
- •Вычисление типа операции
- •Типы при присваивании
- •Перегрузка операторов
- •Ветвление с использованием if и switch
- •Инструкция if
- •Инструкция else
- •Как избежать else
- •Вложенные инструкции if
- •Конструкция switch
- •Циклы
- •Цикл без счетчика
- •Правила области видимости
- •Пример
- •Зачем нужны разные циклы
- •Зачем нужны массивы
- •Массив фиксированного размера
- •Массив переменного размера
- •Свойство Length
- •Инициализация массивов
- •Понятие <т>
- •Обобщенные коллекции
- •Инстанцирование пустого списка
- •Создание списка целых чисел
- •Преобразования списков в массивы и обратно
- •Подсчет количества элементов в списке
- •Поиск в списках
- •Инициализаторы массивов и коллекций
- •Выполнение специфичных для множеств задач
- •Создание множества
- •Добавление элемента в множество
- •Выполнение объединения
- •Пересечение множеств
- •Получение разности
- •Не используйте старые коллекции
- •Обход каталога файлов
- •Начало программы
- •Получение начальных входных данных
- •Создание списка файлов
- •Форматирование вывода
- •Вывод в шестнадцатеричном формате
- •Обход коллекций: итераторы
- •Доступ к коллекции: общая задача
- •Использование foreach
- •Формат индексатора
- •Блок итератора
- •Создание каркаса блока итератора
- •Итерирование дней в месяцах
- •Что же такое коллекция
- •Синтаксис итератора
- •Блоки итераторов произвольного вида и размера
- •Обобщенные классы безопасны
- •Обобщенные классы эффективны
- •Очередь с приоритетами
- •Распаковка пакета
- •Написание обобщенного кода
- •Использование простого необобщенного класса фабрики
- •Незавершенные дела
- •Ковариантность
- •Использование механизма исключений для сообщения об ошибках
- •Что происходит при генерации исключения
- •Исключительный пример
- •Что делает этот пример "исключительным"
- •Трассировка стека
- •Советы по написанию кода с хорошей обработкой ошибок
- •Анализ возможных исключений метода
- •Как выяснить, какие исключения генерируются теми или иными методами
- •Генерирующие исключения выражения
- •Работа с перечислениями
- •Создание перечислений с инициализаторами
- •Указание типа данных перечисления
- •Применение перечислений в конструкции switch
- •Процедурные поездки
- •Объектно-ориентированные поездки
- •Определение класса и объекта
- •Определение класса
- •Что такое объект
- •Различие между объектами
- •Работа со ссылками
- •Классы, содержащие классы
- •Определение константных членов-данных и членов-данных только для чтения
- •Передача аргументов методу
- •Передача методу нескольких аргументов
- •Соответствие определений аргументов их использованию
- •Перегрузка методов
- •Реализация аргументов по умолчанию
- •Возврат значения оператором return
- •Кортеж с двумя элементами
- •Создание кортежей более чем с двумя элементами
- •Глава 14 Поговорим об этом
- •Определение методов
- •Определение статического метода
- •Определение метода экземпляра
- •Полное имя метода
- •Ключевое слово this
- •Когда this используется явно
- •Что делать при отсутствии this
- •Использование локальных функций
- •Прочие уровни безопасности
- •Методы доступа
- •Пример управления доступом
- •Выводы
- •Статические свойства
- •Побочные действия свойств
- •Дайте компилятору написать свойства для вас
- •Методы и уровни доступа
- •Замена конструктора по умолчанию
- •Конструирование объектов
- •Непосредственная инициализация объекта
- •Конструирование с инициализаторами
- •Инициализация объекта без конструктора
- •Определение свойств с кодом
- •Определение конструкторов и деструкторов с кодом
- •Определение методов доступа к свойствам с кодом
- •Определение методов доступа к событиям с кодом
- •Наследование класса
- •Более сложный пример наследования
- •ЯВЛЯЕТСЯ или СОДЕРЖИТ
- •Доступ к BankAccount через содержание
- •Отношение СОДЕРЖИТ
- •Заменяемость классов
- •Неверное преобразование времени выполнения
- •Указание конкретного конструктора базового класса
- •Обновленный класс BankAccount
- •Перегрузка унаследованного метода
- •Простейший случай перегрузки метода
- •Различные классы, различные методы
- •Сокрытие метода базового класса
- •Вызов методов базового класса
- •Что неверно в стратегии использования объявленного типа
- •Использование is для полиморфного доступа к скрытому методу
- •Объявление метода виртуальным и перекрытие
- •Получение максимальной выгоды от полиморфизма
- •Разложение классов
- •Абстрактный класс: ничего, кроме идеи
- •Как использовать абстрактные классы
- •Создание абстрактных объектов невозможно
- •Опечатывание класса
- •Реализация интерфейса
- •Именование интерфейсов
- •Наследование и реализация интерфейса
- •Преимущества интерфейсов
- •Тип, возвращаемый методом
- •Что скрыто за интерфейсом
- •Гибкие зависимости через интерфейсы
- •Реализация отношения СОДЕРЖИТ с помощью интерфейсов
- •Определение делегата
- •Пример передачи кода
- •Делегирование задания
- •Очень простой первый пример
- •Более реальный пример
- •Создание приложения
- •Жизненный цикл делегата
- •Анонимные методы
- •Проектный шаблон Observer
- •Что такое событие. Публикация и подписка
- •Как издатель оповещает о своих событиях
- •Как подписаться на событие
- •Как опубликовать событие
- •Как наблюдатели "обрабатывают" событие
- •Сборки
- •Выполнимые файлы
- •Библиотеки классов
- •Создание проекта библиотеки классов
- •Создание автономной библиотеки классов
- •Создание классов для библиотеки
- •Использование тестового приложения
- •Дополнительные ключевые слова для управления доступом
- •protected: поделимся с подклассами
- •protected internal: более изощренная защита
- •Размещение классов в пространствах имен
- •Объявление пространств имен
- •Пространства имен и доступ
- •Использование полностью квалифицированных имен
- •Ссылочные типы
- •Выходные параметры
- •Альтернативные методы возврата значений
- •Работа с переменными out
- •Возврат значений по ссылке
- •Различия типов-значений
- •Когда следует использовать структуры
- •Добавление распространенных элементов структур
- •Управление отдельной записью
- •Добавление структур в массивы
- •Перекрытие методов
- •Определение того, что следует защищать
- •Документирование компонентов программы
- •Разложение компонентов на функции
- •Оценка рисков
- •Аутентификация с использованием входа в Windows
- •Безопасность развертывания
- •Уязвимости сценариев
- •Наилучшие методы защиты приложений Web Forms
- •Получение данных
- •Настройка образца схемы базы данных
- •Подключение к источнику данных
- •Работа с визуальными инструментами
- •Написание кода для работы с данными
- •Использование Entity Framework
- •Где водится рыба: файловые потоки
- •Потоки
- •Читатели и писатели
- •Пример использования потока
- •Как это работает
- •Наконец-то мы пишем!
- •Использование конструкции using
- •Загрузка файла из Интернета
- •Регистрация сетевой активности
- •Графика
- •Перья
- •Кисти
- •Текст
- •Классы рисования и каркас .NET
- •Приступая к работе
- •Настройка проекта
- •Обработка счета
- •Создание подключения к событию
- •Рисование доски
- •Запуск новой игры

Обработка последовательности чисел
Зачастую программы получают в качестве вводимых данных строку, состо ящую из нескольких чисел. Воспользовавш ись методом гвза ат mгтэав б р lвы сможете легко разбить строку на несколько подстрок, по одной для каждого числа, и работать с ними по отдельности.
Функция гтэа n u преобразует единую строку в массив строк меньшего размера с применением указанного символа-разделителя. Например, если вы скажете функции гтnа p u eчто следует использовать в качестве разделителя за пятую, строка t l Iг I o t превратится в три строки - t mtй t w tи t ot uч N,i ,iл
Е. si-usisi может быть любой символ, используемый для разделения эле ментов коллекций.) В приведенной далее демонстрационной программе ме тод гтэа ( б еприменяется для ввода последовательности чисел для суммиро вания:
FF |
B |
FF |
; |
F F |
|
|
|
|
|
|
|
|
|
ь |
|
|
|
г |
|
|
|
FF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, |
|
|
ье |
|
|
|
|
|
|
|
|
ы m |
|
|
|
|
|
|
л |
|
i |
|
|
|
|
|
п т r |
|
FF |
|
|
|
|
|
|
|
) |
|
|
. г |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
фрсирко |
Чyмлеомлсо |
б ть |
|
|
|
|
|
|
|
|
|||||
тт |
w |
вдгл оСп |
ь |
|
еС у в l |
ис |
hн и |
звиь |
l |
2 |
ь |
||||
тт |
ч ьзвe |
hову |
, |
п |
у |
|
елЕиь |
l |
уи |
ту |
вeву |
гл оиЬ |
иь |
||
е е 6 |
tлСу |
ч |
згвдсву |
|
, i, |
|
T" щ |
|
|
|
|
||||
пцнм , г |
жлшлжоми |
: |
, T |
T |
|
|
|
|
|||||||
иемлсе l - иоDосеи |
|
: |
лсзые |
) рзк леб6 |
шл-мит ь |
|
|||||||||
FF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ь |
|
|
|
|
|
|
|
г |
|
|
|
|
|
FF |
ь |
|
|
|
|
|
|
|
|
|
г |
|
|
|
|
|
ь |
, |
|
|
|
г |
|
|
|
|
|
|
|
|
|
|
FF |
|
|
|
|
|
|
. |
|
|
|
|
|
|
зяК |
аьВэлК пК ,#.nДК щ ) .у)к ъ ъ ь ).n к#ьdК#кКзоК |

4
2
2 2 2

Программа проходит по списку, рассматривая запятые, пробелы (или и то, и другое) как разделительные символы. Она пропускает "число" а и выводит общую сумму корректных чисел, равную 1 О. В реальных программах, однако, вряд ли можно просто так игнорировать некорректные числа, никак не сооб щая об этом пользователю. При появлении во входном потоке любой програм мы "мусора" обычно требуется тем или иным способом обратить на это вни мание пользователя.
Объединение массива строк в одну строку
Класс String имеет также метод Join ( ) . Если у вас есть массив строк, мож но использовать Join ( ) для конкатенации всех строк . Можно также указать, что между строками в массиве следует вставить определенные символы:
хCкт1 l Л 'хр 4,х = { = |
== = = |
= = |
= |
== =
Врезультате получится строка theBrothers, которая представляет собой
ае Chuck : Bob : Steve : Mi ke " (имена в ней разделены двоеточием). Можно было
", ", " \tее м еа е е использовать
(первый элемент представляет собой запятую с последующим пробелом, вто рой - символ табуляции, а третий - несколько пробелов подряд).
Уп_равление выводом npQrpar.,м.ы
Управление выводом программы - важный аспект работы со строками. Подумайте сами: вывод программы - это именно то, что видит пользователь. Не имеет значения, насколько элегантны внутренняя логика и реализация программы - это вряд ли впечатлит пользователя; куда важнее для него кор ректность и внешнее представление выводимых программой данных.
Класс String предоставляет программисту ряд методов для форматирова ния выводимой строки. В следующих разделах будут рассмотрены такие мето ды, как Trim ( ) , Pad ( ) , PadRight ( ) , PadLeft ( ) , SuЬstring ( ) и Concat ( ) .
Использование методов Trim ( ) и Pad ( )
Из раздела "Удаление пробельных символов" вы узнали, как пользоваться методом Trim ( ) и его более специализированными вариантами TrimFront ( ) и TrimEnd ( ) . В данном разделе обсуждается другой распространенный метод форматирования выходных данных. Можно использовать методы Pad, которые добавляют символы к любому из концов строки, чтобы расширить строку до некоторой заранее заданной длины. Например, можно добавить пробелы слева
86 |
ЧАСТЬ 1 Основы программирования на С# |

= |
= |
= |
|
= |
= |
|
= |
= |
|
nn |
= |
|
= |
= |
= |
|
= |
= n = |
m= |
= |
=
=
g(=(*= (=( ( |
( |
* (g ( =(n T |
=
=

определяет список имен lрмe(мрл.тпы. с разными выравнива нием и длиной (вы можете переписать программу так, чтобы эти имена счи тывались с клавиатуры или из файла). Функция юерт.з усн. ачала выводит эти имена на экран в том виде, в котором они получены программой. Затем вызы ваются методы mлрн. з уи. хенсрпсв. з у асуществен. но улучшающие внешний вид выводимых программой строк:
м G |
|
мK |
i |
м ,K |
Kд |
м |
|
м с |
KK |
|
|
м ,K |
д |
|
t |
д ,b l |
|||
, G |
|
K |
o |
|
|||
я ,K |
K |
K |
|
, с |
K |
|
|
ц ,K |
l |
|
м |
м ,c |
Процесс выравнивания начинается с создания копии переданного ему мас сива тено мcКод. начинается с цикла, вызывающего ол. н. з удля. каждого шб1
мента массива, чтобы удалить лишние пробельные символы с обоих концов строки. Затем выполняется второй цикл, в котором происходит поиск самого
оое ЧАСТЬ 1 Основы программирования на С#

длинного элемента массива. И наконец, в последнем цикле для элементов мас сива вызывается метод PadRight ( ) , удлиняющий строки и делающий их рав ными по длине.
Метод PadRight ( 1 О ) увеличивает строку так, чтобы ее длина составляла как минимум 1 О символов. Например, если длина исходной строки - 6 симво лов, то метод PadRight ( 1 О ) добавит к ней справа 4 пробела.
Наконец, код проходит по полученному списку строк, выводя их на экран. Вот и все.
Использование метода Concat ( )
Зачастую программисты сталкиваются с задачей разбиения строки или вставки некоторой подстроки в середину другой строки. Заменить один символ другим проще всего с помощью метода Replace ( ) :
х1:им . о "щим1,х )с6г сm:им1о W
.1,.тrщ), nв г, oив
Этот фрагмент исходного текста преобразует начальную строку в " Danger ! NoSmoking" . Замена всех вхождений одного символа (в данном слу чае - пробела) другим (восклицательным знаком) особенно полезна при гене рации списка элементов, разделенных запятыми для упрощения анализа. Од нако более распространенный и сложный случай предусматривает разбиение единой строки на подстроки, отдельную работу с каждой подстрокой с после дующим их объединением в единую модифицированную строку.
Приведенная далее демонстрационная программа RemoveWithSpace исполь зует метод Concat ( ) для удаления из строки пробельных символов (пробелов, символов табуляции и новой строки).
1:им6 |
|
гW |
, |
Д |
|
|
|
|
|
|
|
|
цц 1,гс |
, |
e3: |
,6тщ), |
|
|
. |
|
|
|
|
||
цц |
тщ),1,гс |
,e 3: |
,6тщ), |
|
|
|
|
|
||||
имщг, |
|
|
|
|
|
|
||||||
т |
:) |
)rщ |
,хс1хщ г |
|
|
|
|
|
|
|
||
т |
:) |
|
|
:)щ с:, |
"щ:имn |
х:им1 l К щх1 |
|
|
|
|
||
|
цц |
|
|
3D ,6тщ), |
O |
o , й |
вЗимгй o З егV |
|
|
|
|
|
|
)5щх l К |
|
|
|
|
|||||||
|
цц |
|
|
|
|
|
|
р |
|
|
|
|
|
цц |
|
|
. н |
3: |
: |
щИим х:им1 о W |
|
|
|
|
|
|
хEим1 |
|
|
|
|
|||||||
|
ссим |
r с, кeх: |
,г:им, |
n ос т у оB |
W |
|
|
|
|
|||
|
цц |
|
,скurneх: |
,nо |
|
х оW |
|
|
|
|
|
|
|
ссим |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
ГЛАВА |
3 |
Р |
абота со строками |
н |
|
|
|
|
|
|
|
|
|
|
С. |

// ПОИС!С |
СИМВОЛОВ |
Л
в =
; |
; |
; |
< |
|
llac"Tr. T |
g"n".")< g)i ("))" |
6)" |
)i.."=Tll="g<=."nt Trn"ll"))r |
||||||||||
6"ll=R())r. n)(pg". |
|
) |
(.ll(c"<.(=nill="g(o<g)".(Te"Rn")(=T."e.(. |
|||||||||||
T"ll"T."n")Rio(e<=T.i<.(T" lle |
i"b |
|
=" |
|
|
|
|
|||||||
|
(.ll(.6"ll>o="g t/$ |
|
= <nll=6"($q |
..i |
6")T"" Te"Rn")(=.i." " |
ll(s |
||||||||
=" (o<(.T"ll"T (o.i<<(Ti lleu |
=" re"n(o |
(.lli)" ".=o"<gTll="g.=n" |
||||||||||||
g"e6") 6".i |
(o(<e"n |
"<g)".()" ==n=g=nill")r T<" |
g(.(.T"ll rn |
"g"n |
||||||||||
t/$ |
" |
s $qi xT"oT)ioi"g()n".< 6")T" |
)i" |
n")"e" <(.T"lli (o(<e"n)" " |
||||||||||
.i<<(Ti T<g)"." "oT)ioi".""o)ic")(" |
=.iorTi"g c |
"T. )".")" |
ll" |
|||||||||||
.")g"T |
(o6")"ni))" |
".i<<(Ti |
|
|
|
|
|
|
|
|||||
x")Ti=(g")i (= (. )ie" ( T"n=o( |
6)"="llT |
"ll"T" .g)"." |
()s |
|||||||||||
n".< ." |
")" |
")iT)r |
|
T"oT)ioi"g.=."g"n". |
t/$." |
$iqxx")Tr Tro"T |
||||||||
b>ar. r$n; i xT"oT)ioi"g6=<g=a<g)".=i Tg")" |
T<a<g)".=6".ll" 6)"="lli |
|||||||||||||
ig".p=). |
(=f($<" |
i x"= |
"n( |
=" |
<g)"(.( ."oniTi=< )".="o)icill> |
|||||||||
)" |
"6)"="llin |
|
|
|
|
|
|
|
|
|
|
|
||
90 |
|
ь |
9 |
|
|
|
|
|
|
|
|
, |
|
|

Использование метода Split ( )
t-'4> |
-(--( |
l |
а |
lаl |
Ийl71.'4> |
t-'4>.(-'4>93--)-'4>.(9'4> |
t-)-(9(9)( |
|||||||
-(-'4>.'4>. |
|
йИаз |
) |
з |
l |
|
'4>.9(a'4> )3t'4>.:EЕ'4>.(991 |
|
3t'4>3'4>7 -(В(9)4 t'4> |
|||||
3-(..(99'4> |
|
Е(.(a) |
9( |
3(-1B |
|
ЛЙЙ( |
).91 |
б-'4>)- 9(-9'4> |
t'4>.u-(-:E ) |
-'4>J9'4> |
||||
t'4>.ua)-:E 3uЕ(3-.(99'4> |
7'4>.(( |
ЛЙЙ(a-).9u |
S Йu9aБ)S |
3 )3t'4>.:EЕ'4>.(9)(- |
uJ( |
|||||||||
Е9(a'4>-'4> Йu9aБ)) |
|
|
|
а '4>Г-a'4>. -(-'4>.( |
.1t'4>.94SЕ( |
'4> |
9('4>7г'4>.)-1( |
.( |
||||||
ствия: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
»»ш |
ы |
i |
|
|
|
|
|
|
|
|
|
|
|
|
»» |
|
|
ш |
|
|
|
ы i |
з |
|
Г |
|
|
|
|
|
|
|
|
|
|
|
Л |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
»» |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
»» |
|
ы |
|
. |
|
И ы |
з |
( |
Л |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
»» |
|
1 |
ь д , |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
» » |
|
|
|
|
|
|
|
Г |
|
|
ы |
з Л |
|
|
|
|
з |
|
ы |
|
|
|
ы |
Л |
|
|
|
|
|
ми |
|
1 ы |
|
вi |
|
t |
|
Г |
ы |
(Л |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
, |
|
|
|
|
|
|
|
|
|
|
|
|
а гтеш вороии лкя рааеиония внелнеш отрееи на снеиоотве |
велотрее ио, |
|||||||||||||
векзатотоя |
ктне.ия |
,пna e t ыо тлакяостси |
оисвекаси |
в еаыоотво оисве, |
||||||||||
кевграалокитокошолеоеекзет |
раалокитоки но векйыайтоя |
в велотрееи, |
оеала, |
|||||||||||
отоя гккоет |
ин тлаконияАaаеая |
кеоиеа вреота и соноо велвориона еeиееас |
||||||||||||
ври роакиаа.ииt |
|
|
|
|
|
|
|
|
|
|
|
|
ГЛАВА 3 Работа со строками |
91 |

= |
ьз |
p я |
r |
i = к |
eяк e )) ( к r));д |
гестеь исармевнменолиПг)na |
s ;c |
dF,цс( |
sс Fd#ц ькнсолиnосминиво |
цдемевнеьт, т веь рличетитнйоно.-ь исармевнйкделртааь чи nосминвоь кнсолоьйлодrев бенн ткнитдевт сноь ноолееь т очвиоиеныестеь исармевн )т ливвомкдроиеc овuьт" c тносоььь.а ноло ысателеввомnсиамеlнеыодр. оатMизкзкнсолиысактиатиенкзыесемеввоьnю=ак) ,s а амеенкделртааь талT
тк )) = iWы
екда ве рличивоавоеПменолПг)naаm Bлдз лиrлоаонаыиисармевниакыоднй чренnосминыормодоивате,дз рличивазnосминитетолит nаарсвек клоблик. лсомевомесиисармевни<моrво сичмеаиннлоыодванеднвеемолаnалиносе< лоносееыоличивет нибдТьоWaТиысамесSь т k адиканИетол оакдит слкыой вевфаиднвомтале к акыоднчотиваемMекна чвиломекнт лсобвоьоикна(о
Таблица 3.1 . Модификаторы, используемые функцией string . Format ( )
Модификатор |
Пример |
|
Результат |
Примечание |
|
r , ilpllptlu |
c . 1 eiouuc... . . 01u |
"... . . 0u |
enoirouigotstumginsnsu |
||
linpnstu |
|
|
|
rsupgssrrnonurlinrpgot, |
|
|
|
|
|
ptsussgpigrsriu |
|
|
c .1 e ciou,... |
. . 01u ' ".. . . . 0)u |
|
|
|
2u, ilsuslrnt, |
c . 1 20 ciou: > ...u |
.....u |
frotoruiouuslotsutnslou |
||
prlutnsoru |
|
|
|
|
|
dutnsoruiutos. c .1 c : >iouuc ... |
. . 0u |
. . ... 0d,...u dmilsspgusgolluogoupgst. |
|||
rrplpsngotprnu |
|
|
pguumgrnstu |
||
srrolu |
|
|
|
|
|
|
|
|
|
|
|
УО i1fc |
E2#".a 6( "am(..,( ". (#,c #( VD |

о |
и |
ф |
и |
а |
тор |
Пример |
М д |
|
|
к |
|
F - число с плавающей точкой
N - ЧИСЛО
х - шестнадцатеричное число
ыоойнийапйр й
{о : # . . . }
{ 0 |
: # или 0 % } |
{ 0 |
: F2 } для 123 |
. 4 567 |
{О : N } для
123456 . 78 9
{0 : Nl } для
1234 5 6 . 7 8 9
{О : NO } для
123456 . 78 9
{ О : Х } для 123
{ 0 |
: 000 |
. 00 } для 12 |
. 3 |
{ 0 |
: ### |
. ## } для 12 |
. 3 |
{0 : ##0 . 0# ) для О
{0 : #00 . #% } для
. 1234 |
|
{ О : #00 |
. #% } для |
. 0234 |
|
Рез л ь |
|
а |
т |
||
у |
т |
|
|
||
123 . |
45 |
|
|
|
|
123, 4 5 |
6 . 7 9 |
||||
123, 45 |
6 |
. 8 |
|||
123 , |
457 |
|
|
||
Ох7В |
|
|
|
|
|
012 . |
30 |
|
|
|
|
12 . 3 |
|
|
|
|
|
П р и меча н ие
Число после F указывает количество цифр после десятичной точки
Добавляет запятые и округляет число до бли жайших сотых
Указывает количество цифр после десятичной точки
Указывает количество цифр после десятичной точки
Шестнадцатеричное чис ло 7В равно десятичному числу 123. Применяется только для целых чисел
Вносит О там, где нет ре альных цифр
Вносит пробелы; полезен при выравнивании по де сятичной точке
о с о й |
Комбинация О и # застав |
|
|
|
ляет вносить пробелы на |
|
|
местах # и обеспечивает |
|
|
наличие как минимум |
|
|
одной цифры, даже если |
12 |
. 3% |
число равно О |
% заставляет выводить |
||
|
|
число как проценты (ум |
|
|
ножая на 1 00 и добавляя |
02 |
. 3% |
символ %) |
|
Г |
АВА |
3 |
Работа со строками |
93 |
Л |
|

|
jВЕТОВДИСМИtО o-eСОoН!ОЕ ТИАПОПЕТoBВЕТЕТСОBe!В |
АИАЕТВЗoBСЗВoВ |
|||||
|
ЕИН.ti,ВС!ЕТИ |
ПВЗВЕЕТo ОoЕС/СВЕТПВС!Be ПВСВЗВЕЕBe aПa oЕС/В |
|||||
СОВЕТ |
ЕaВ ПОАПВtОСЗСЕТЕОТЕХАЕТСООИa В ,ОПB/СНЕТВ!В ССtBЗВЕЕТЕТ/ЕТОo a |
||||||
ЗВЕТОВ1И-ЕТВСЕ Т ДИСМИЕТТЕХtО.tio- ;,СОoe!ОЕ Т!Е!ОВaЕТПОПB/a!iBeАН |
АЕТСОКИ |
||||||
|
|||||||
|
ОB ЕС ООЕАОПЕЕТ/ БЕТОЗВЕТОВВЗО!ЕО ИАПОПЕoО!СЕТЕЕТВ!В |
АПВcatИКИ |
|||||
|
ОСЕТОСЕТtОСЗСЕТJ ООЕТОСЕВПСИЗВЕНeЕТАН! tBЕОcИИ 1И-ЕТВСЕ Т \СПВВ: |
||||||
|
ПСa ЕВОЕТrОВИЗОАЕТИ! !ВАЕТИeЕТО ЕСЕТОTОССЕЕТBВВЕТaАПОПЕoО!СЕТЕАН |
||||||
|
ИЗВЕЕОTЕТОЕТЗВЕТОВx |
|
|
|
|||
bЕТtgЕО CСhОO K |
ЗЕСП! |
CСaeЕ rС ЕТЗЗЗRЕТoЕТ1ОЖ:1S Е ТСC ЗЗreЕ ЗЕТЕТ!CОПЕТСa! |
aЕТtD |
||||
hЗ CС1tЕt rС1Ж:1eЕТОЕОЕТR OСПCЗfОЕТ С ЕТОO<!aЕТrПЗaСЕТЕТСЕТОЕТЕ• |
tCttrC |
ЕСЕ! |
ea О |
||||
htЕR CСhОOО ЕТЗЕСП ! |
a ht •ЕТЕaKОПaЗa1Ж:1oЕТОt ЕТЗrПОath t ЕТЕТe ЕТ hЗ1Ж:1tt htCС ЕТЕТЕПЗb |
||||||
fОСЕТЕТeЕТrПСDПЗCCe |
TtСНtС И-ЕТВСДИ!С -ИtМТЕХrСЗaС1Ж:1ТЕХЕТ-n-aateЕТЕТЕОЕТtЕС1Ж:1RЕТС |
ЕТKЕТ1Ж:1ЕТСr1Ж:1ЗaЗЕТ-n-t•ЕСЕТЕТС•i ЕТСО CСhОOО ЕТЗЕСПOСПCЗ ЕЗr ЕТСЕСП\ • ЕehtЕ ОЕТrС1Ж:1Rb ЗСaЗЕТrПО a! aСht aath tЕТЕТССaЕ ТЕТО1Ж:1СЕПЗЕЕТСЕТЗgЕТПЗЕТ
|
t |
u |
t |
Ч |
|
|
|
|
\ |
|
|
|
|
t |
u |
|
|
|
|
|
|
\ |
|
|
|
|
|
|
t |
|
|
0Е Т |
|
1 \ |
\Е Т |
|
1 |
\ |
|
|
|
|
|
||
|
|
0 |
\ |
|
|
|
|
t |
|
|
0 Е Т |
|
ЕТm |
|
|
ЕТ |
|
t |
Е Т o |
|
Е Т |
ЕТ\ |
|
|
|
1 П0 |
|
|
Е\ Т \ |
94 |
ЧАСТЬ 1 Основы программирования на С# |
|

ГЛАВА 3 Работа со строками |
95 |

|
|
|
1 00 о .обам теnох кормота |
||
л м, мо.орору |
ткткту ффП улаВ, маеиyтио м м , мо.ктрои киpоле .отюnо |
б,иж |
|||
sо реьж1еи реpе .ме |
оэp, |
ктема ои .екч иотnои иотлкто иотжлоо. nа |
кspа |
||
маСuкти иои юе ро .о-ола иоp spоре nктижл ткткту фгдa буy.еи |
м, ме.еnа киpола |
||||
ф гaдф a |
|
|
|
|
|
еsоnчиnач sола тио#лоnкиpулоч ,ьЭ ПaПв..в t spе.nаВnатеnа .тч |
|||||
sеpеeмаиа мкеe sоиеь оатжь,e о1 обол spо ммо.е |
nелоppелиn,e тил |
||||
кет у.nало |
об lиор pакклаВ, маеикч комкер м .pугои гтамеyа ореnл |
||||
ьо k |
м |
амеby |
иктоклтхти иетжn,е оклтхтеnиl |
г |
|
96 |
ЧАСТЬ 1 Основы программирования на С# |

StringBuilder : эффективная работа со строками
|
t,:9),((),:#('l# |
,,1V1((,n |
|
9),((),:, |
1V1- |
(',з,:()' |
,,:(),:),(,'ln |
,,:.#),( |
9),(,:1V1),(- ,', |
,'_1V1n |
||||||||||||
(),s, |
|
,,:,),(#. |
|
'l |
М,' |
|
в |
_ ', |
,: ,s.# |
1 1,:,,:()1V1, |
, ('1:»_',# |
ci),(,:. |
М,',,п |
9),((),:,'• |
,з,s,,s1:»_1V1 |
|||||||
9,:-,'((,:.k\ |
|
'l-,#(,:),(-9,: |
(# |
,,:.# |
п),(', |
1:»_),(,: |
,,:, |
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
, |
, |
|
, |
, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
(' |
9',,:, |
,#,# |
(# |
,,:,з',,,:#),( |
|
, яs |
p( |
9,:-,'#),( |
(,:,,s.,, |
9),((),:,,s • |
9,:9),(',,#((,s.,, |
|||||||||||
'l- |
ci),(1V1n 1:»_'9),(#. |
|
s,()'l |
ci),(,:, ,:9),('#),(9,: (#'l-,#((,: |
.В_ уж(),sМ'l#,:,#()' |
1V1'lk\ ,,:),(,:(),#к |
||||||||||||||||
,', |
,'.#),(9,:п |
'l-,#Й,:.,,),( |
9),((),:,'l |
(',()'l,#()й |
т |
siПиа |
'l,1V1 |
|
ы@ |
amRr@В (' |
9'h |
|||||||||||
,,:, |
,#,# |
,,:9),( |
,s,'.,,),( |
),(', |
.# |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
#-,s,-),('),( ,'.,,:. |
|
,:,#()' |
'l'l |
(', |
9),((),:,,:. |
,()#,9),(',,,:#),( |
9,:,з,:. |
,(),sМ,s.,, |
9),((),:,,s |
||||||||||
t()#,,,:,,:.'l, |
|
|
1:»_),(,: |
(',,: |
9,:#,1V1(1V1),(- |
д |
9),((),:, |
, ,:,(,s ,з,:,-_,s.,, |
|
9),((),:,,s |
y, |
9,:-h |
||||||||||
,'#),(# |
|
(,:,,s.,, |
9),((),:,,s |
,()'l |
,,:,,:a'l |
,(,:.#9),(,' |
,,:(,'),(#(' |
1V1. |
|
|
|
|
|
|||||||||
|
Й |
|
|
|
|
|
|
|
|
|
ч |
|
|
|
|
|
|
|
|
|
|
|
l1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
),(,:,з, |
'l-,з#.'),(- |
|
),(',,:М,: |
,з,:,-_,:М,: |
|
,,:,'l1:»_#9),(,' |
,,:,'lc1V1,' |
1V1. |
|
9),((),:,п ,,:9,,:,-r |
|||||||||
-,s.),(#9- |
,,'99,:, |
тiПи а |
ииаП@ |
#-',з,s,-),(# |
),(,:,- |
,,:,з','l),(- |
|
, |
('1:»_',# |
,'_#М,: |
||||||||||||
'l9n,:,(,:М,: |
|
),(#,9),(' |
9),((),:,,s |
|
|
|
|
|
|
|
|
|
|
|
|
|
ТЕХНИЧЕСКИЕ ПОДРОБНОСТИ
ТЕХИОСТИДХТЕХИСДБТЕХ |
ПБ ИК Т |
ЧКБЕТ И |
ИЕТЕХОТЕХНООСТИДЕБРТЕХД ЕБП |
ЕДРЕДКБИКБЕТЕХ |
|
Р Р
РР
РР
ЕД ТЕХЧПДЕДДОЧБКРОСТИТЕ |
ДЕДДДОСТИЧДЕТЕХНБИТЕХНКТЕХНБ И Б |
|
ИЕТЕХОТЕХОСЕБТИДЕХНОДЧДИЕД ДОСТИЧЕДЕТЕХБ Б |
ХТЕХНПБИД РТЕХОСТИ |
КДЕДРТЕХН ИЕТЕХОДДТ
Р |
абота со строками |
жеt |
|
|

Можно создать StringBui lder с требуемой вам емкостью, что снизит на кладные расходы на частое увеличение емкости для строки:
StringBuilder builder = new StringBuilder (256) ; // 256 символов .
Для добавления текста к концу текущего содержимого используется метод Append ( ) . По завершении работы со строкой метод тostring ( ) предоставит окончательный результат работы. Вот как выглядит StringBuilder-вepcия только что приведенного кода с циклом:
StringBuilder sb = |
// |
Вьщеление |
памяти |
||
new |
StringBuilder (20000) ; |
||||
for (int |
i = О; |
i < 1000; i++) |
|
|
|
sb. Append (listOfNames [ i ] ) ; |
// |
Тот же список имен |
|||
иодавсж деинлож = |
ис танподавс и пtж// |
Получение |
результата |
Класс S t ringBuilder имеет ряд других полезных методов, включая
Insert ( ) , Remove ( ) и Replace ( ) . Но в нем не хватает многих методов string, например Substring ( ) , СоруТо ( ) и IndexOf ( ) .
Предположим, например, что вы хотите перевести в верхний регистр только первый символ строки. При помощи StringBuilder сделать это существенно проще, чем описано в разделе "Преобразование символов строки в символы верхнего или нижнего регистра".
StringBuilder sb = new StringBuilder ( " j ones" ) ; sb [O] = char . ToUpper (sb [O] ) ;
string fixedString = sb . ToString ( ) ;
Здесь строка " j ones " помещается в объект StringBuilder, выполняется обращение к первому символу строки StringBuilder как к sb [ О ] , для его пе ревода в верхний регистр используется вызов метода char . ToUpper ( ) , после чего символ в верхнем регистре вновь присваивается sb [ О J • И наконец строка "Jones" получается из StringBuilder при помощи вызова метода ToString ( ) .
Представленный ранее пример BuildASentence может быть улучшен по средством применения в нем StringBuilder.
В части 2, "Объектно-ориентированное программирование на С#", рассмат ривается функциональная возможность С# - "ъeлH( 4)nс2 4ъE2{о В приве денном в ней примере к классу String добавляется несколько удобных мето дов, а также описывается, как преобразовывать между собой такие типы, как String, массивы char и массивы byte. Все эти операции могут регулярно тре боваться при повседневной работе.
98 |
ЧАСТЬ 1 eеоеыn, ние rиртт сиеырос о, ор, С# |