Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы программирования на языке C#. Учебное пособие
.pdf
63
PadLeft()
Выравнивает символы строки по правой границе,
заполняя свободное место слева пробелами или
указанными символами
PadRight()
Выравнивает символы строки по левой границе,
заполняя свободное место справа пробелами или
указанными символами
Remove()
Удаляет указанное количество символов
Split()
Возвращает массив из фрагментов строки,
разделенных в исходной строке указанными
символами
StartWith()
Сообщает, начинается ли строка с указанных
символов
SubString()
Извлекает фрагмент строки
ToCharArray()
Копирует символы из строки в массив символов
ToLower()
Возвращает копию строки, преобразованную в
нижний регистр
ToUpper()
Возвращает копию строки, преобразованную в
верхний регистр
Trim()
Удаляет все вхождения указанных символов в
начале и конце строки
TrimEnd()
Ведет себя как Trim(), но только в отношении конца
строки
TrimStart()
Ведет себя как Trin(), но только в отношении начала
строки
Пример программы:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
string s1 = "abcd";
string s2 = "ABCD";
string s3 = @"Neoton Associaties,Inc. provides custom .NET
development";
int result;
61

64
// сравнить две строки с учетом регистра символов
result = string.Compare(s1, s2);
Console.WriteLine("сравнение s1: {0}, s2: {1}, результат:
{2}\n", s1,s2,result);
//использовать перегруженную операцию
string s4 = s1 + s2;
Console.WriteLine("s4 объединение строк s1+s2:{0}", s4);
//метод для копирования строк
string s5 = string.Copy(s4);
Console.WriteLine("s5 копируется из s4: {0}", s5);
}
}
}
7.2. Строки типа StringBuilder
Возможности, предоставляемые классом string, широки,
однако требование неизменности его объектов может оказаться
неудобным. В этом случае для работы со строками применяется
класс StringBuilder, определенный в пространстве имен System.Text
и позволяющий изменять значение своих экземпляров.
При создании экземпляра обязательно использовать
операцию new и конструктор, например:
StringBuilder а = new StringBuilder( );
StringBuilder b = new StringBuilder( "qwerty" );
StringBuilder с = new StringBuilder( 100 );
StringBuilder d = new StringBuilder("qwerty",100); StringBuilder e =
new StringBuilder("qwerty", 1, 3,100 );
В конструкторе класса указываются два вида параметров:
инициализирующая строка или подстрока и объем памяти,
отводимой под экземпляр (емкость буфера).
Один или оба параметра могут отсутствовать, в этом случае
используются их значения по умолчанию. Если применяется
конструктор без параметров (оператор 1), создается пустая строка
размера, заданного по умолчанию (16 байт). Другие виды
конструкторов задают объем памяти, выделяемой строке, и/или ее
начальное значение. Например, в операторе 5 объект
инициализируется подстрокой длиной 3 символа, начиная с
62

первого (подстрока "wer"). Основные элементы класса StringBuilder
Название
Вид
Описание
Append
метод
Добавление в конец строки. Разные
варианты метода позволяют
добавлять в строку величины
любых встроенных типов, массивы
символов, строки и подстроки типа
string
AppendFormat
метод
Добавление форматированной
строки в конец строки
Capacity
свойство
Получение или установка емкости
буфера. Если устанавливаемое
значение меньше текущей длины
строки или больше максимального,
генерируется исключение
ArgumentOutOfRangeException
Insert
метод
Вставка подстроки в заданную
позицию
Length
свойство
Длина строки (количество
символов)
MaxCapacity
свойство
Максимальный размер буфера
Remove
метод
Удаление подстроки из заданной
позиции
Replace
метод
Замена всех вхождений заданной
подстроки или символа новой
подстрокой или символом
ToString
метод
Преобразование в строку типа
string
приведены в таблице 7.2.
Таблица 7.2.
Основные элементы класса System.Text.StringBuilder
Вопросы для самоконтроля
1. Какой встроенный тип данных используется для работы со
строками в C#?
2. Перечислите способы объявления строковых переменных в C#.
3. Какие операции над строками предусматривает язык C#?
4. В чем различие между строками типа String и StringBuilder?
63

66
Упражнения
1. Подсчитайте количество букв «в» в строке.
2. Поменяйте местами крайний левый и крайний правый
символы в строке.
3. Замените порядок следования символов в строке на обратный.
4. Замените в строке все буквы «б» на «п».
64

8. СТРУКТУРЫ И ПЕРЕЧИСЛЕНИЯ
8.1. Структуры
Структура – это частный случай класса. Можно сказать, что
этот тип данных является предшественником классов. Вместе с
тем, есть и различия между классами и структурами. Это касается
объектов – экземпляров структур, память для которых выделяется в
стеке, что увеличивает эффективность работы приложения. Кроме
того структуры не поддерживают механизм наследования.
Синтаксис объявления структуры аналогичен синтаксису
объявления класса:
[атрибуты][модификаторы]struct
имя_структуры[:список_интерфейсов]
{тело_структуры}
Структура может иметь статические и не статические поля и
методы, может иметь несколько конструкторов, в том числе
статические и закрытые конструкторы. Для структур можно
создавать собственные константы, используя поля с атрибутом
readonly и статический конструктор. Структуры похожи на классы
по своему описанию и ведут себя сходным образом, хотя и имеют
существенные различия в семантике присваивания.
Пример работы с рациональными числами, представленными
структурой:
public void TwoSemantics()
{
Rational r1 = new Rational(1,3), r2 = new Rational(3,5);
Rational r3, r4;
r3 = r1+r2; r4 = r3;
if(r3 >1) r3 = r1+r3 + Rational.One;
else r3 = r2+r3 - Rational.One;
r3.PrintRational("r3"); r4.PrintRational("r4");
}
В этом примере используются константы, работает
статический конструктор, закрытый конструктор, перегруженные
операции сравнения, арифметические выражения над
65

68
рациональными числами. В результате вычислений r3 получит
значение 8/15, r4- 14/15.
8.2. Встроенные структуры
Все значимые типы языка C# реализованы с помощью
структур. Это, так называемые, встроенные структуры. Рассмотрим
в качестве примера структуры Point, PointF, Size, SizeF и Rectangle,
находящиеся в пространстве имен System.Drawing и активно
используемые при работе с графическими объектами. Первые
четыре структуры имеют два открытых поля X и Y (Height и Width),
задающие для точек – структур Point и PointF – координаты,
целочисленные или в форме с плавающей точкой. Для размеров –
структур Size и SizeF – они задают высоту и ширину,
целочисленными значениями или в форме с плавающей точкой.
Структуры Point и Size позволяют задать прямоугольную область –
структуру Rectangle. Конструктору прямоугольника можно
передать в качестве аргументов две структуры – точку, задающую
координаты левого верхнего угла прямоугольника, и размер –
высоту и ширину прямоугольника.
Между четырьмя структурами определены взаимные
преобразования: точки можно преобразовать в размеры и наоборот,
сложение и вычитание определено над точками и размерами, но не
над точками, плавающий тип которых разными способами можно
привести к целому. Ряд операций над этими структурами
продемонстрирован в следующем примере:
public void TestPointAndSize()
{
Point pt1 = new Point(3,5), pt2 = new Point(7,10), pt3;
PointF pt4 = new PointF(4.55f,6.75f);
Size sz1 = new Size(10,20), sz2;
SizeF sz3 = new SizeF(10.3f, 20.7f);
pt3 = Point.Round(pt4);
sz2 = new Size(pt1);
Console.WriteLine ("pt1: " + pt1);
Console.WriteLine ("sz2 =new Size(pt1): " + sz2);
Console.WriteLine ("pt4: " + pt4);
Console.WriteLine ("pt3 =Point.Round(pt4): " + pt3);
pt1.Offset(5,7);
66

Console.WriteLine ("pt1.Offset(5,7): " + pt1);
Console.WriteLine ("pt2: " + pt2);
pt2 = pt2+ sz2;
Console.WriteLine ("pt2= pt2+ sz2: " + pt2);
}//TestPointAndSize
8.3. Перечисления
Перечисления – пользовательский тип данных,
представляющий собой именованный набор констант.
Перечисление задает конечное множество возможных значений,
которые могут получать объекты класса перечисление. Поскольку
у перечислений нет собственных методов, то синтаксис объявления
этого класса упрощается – остается обычный заголовок и тело
класса, содержащее список возможных значений:
[атрибуты][модификаторы]enum
имя_перечисления[:базовый класс]
список_возможных_значений}
Обычно перечисления используют в тех случаях, когда
нужно передавать соответствующее значение методу, который
будет проходить по всем значениям с помощью switch и выдавать
соответствующий результат.
Пример:
sing System;
using System.Collections.Generic;
using System.Text;
amespace EnumerationExample
{
class Program
{
public enum DaysOfWeek
{
Monday = 0,
Tuesday = 1,
Wednesday = 2,
Thursday = 3,
67

70
Friday = 4,
Saturday = 5,
Sunday = 6
}
static void Main(string[] args)
{
WriteText(DaysOfWeek.Sunday);
Console.ReadLine();
}
static void WriteText(DaysOfWeek days)
{
switch (days)
{
case DaysOfWeek.Monday:
Console.WriteLine("Понедельник - день тяжелый!");
break;
case DaysOfWeek.Tuesday:
Console.WriteLine("Вторник - это значит что
понедельник уже прошел!");
break;
case DaysOfWeek.Wednesday:
Console.WriteLine("Среда! Средина недели!");
break;n
case DaysOfWeek.Thursday:
Console.WriteLine("Четверг! До выходных уже рукой
подать!");
break;
case DaysOfWeek.Friday:
Console.WriteLine("Это волшебное слово -
Пятница!!!");
break;
case DaysOfWeek.Saturday:
Console.WriteLine("Суббота... сколько в этом слове
радости");
break;
case DaysOfWeek.Sunday:
Console.WriteLine("Да, завтра понедельник :)");
68

break;
}
}
}
}
Вопросы для самоконтроля
1. В чем существенные отличия структуры и класса?
2. Приведите формальный синтаксис структуры.
3. В каких случаях целесообразно отдать предпочтение структуре
перед классом?
4. Что представляют собой перечисления?
5. Как можно использовать перечисления при написании
программ на языке C#?
Упражнения
1. Напишите программу, в которой объявляется и используется
структура, определяющая комплексные числа и операции над
ними.
2. Напишите программу, использующую перечисление,
представленное именами дней недели.
69

72
Список рекомендуемой литературы
Основная литература
1. Павловская Т. А. C#. Программирование на языке высокого
уровня : учебник / Т. А. Павловская. – Спб. : Питер, 2009.
2. Культин Н. Microsoft Visual C# в задачах и примерах / Н.
Культин. – СПб. : БХВ-Петербург, 2009.
3. Агуров П. В. Разработка компонентов в MS Visual studio
2005/2008 / П. В. Агуров. – CПб. : БХВ-Петербург, 2008.
Дополнительная литература
4. Лабор В. В. Создание приложений для Windows / В. В. Лабор,
С. Шарп. – Минск : Хорвест, 2003.
5. Ускова А. Ф. Программирование на языке Паскаль : задачник /
А. Ф. Ускова. – СПб. : Питер, 2003.
6. Троелсен Э. C# и платформа.NET / Э. Троелсен. – Спб. :
Питер, 2004.
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
