- •Введение в программирование на c# в .Net Что такое .Net и зачем она нужна?
- •Первая программа на c# и основные приемы работы в системе ms Visual Studio
- •Структура программы
- •Собственные пространства имен
- •Особенности языка c#
- •Полноценный логический тип данных
- •Оператор switch
- •Основные классы
- •Класс Console
- •Класс Convert
- •Строковый тип данных string (класс String)
- •Метод Split
- •Enumeration – перечислимый тип
- •Метод IndexOf()
- •Метод Format
- •Метод ToCharArray
- •Объектно-ориентированное программирование Эволюция от структур к классам Используем структуры
- •Структурный тип как параметр
- •Помещаем метод в структурный тип
- •Превращение в класс
- •Классы и объекты
- •Значимые и ссылочные переменные
- •Конструкторы класса
- •Статические элементы
- •Генерация случайных чисел
- •Массивы в языке c#
- •Многомерные массивы
- •Класс ArrayList
- •Инкапсуляция
- •Обработка ошибок
- •Свойства класса
- •Язык uml
- •Связи между объектами
- •Наследование (Inheritance)
- •Класс Object
- •Защищенные переменные
- •Вызов базового конструктора
- •Переопределение методов. Обращение к «затененным» элементам класса
- •Многоуровневое наследование
- •Полиморфизм
- •Метод ToString
- •Типичные ситуации проявления полиморфизма
- •Абстрактные классы и полиморфизм
- •Литература
- •Лекция 21. События Классы с событиями
- •Класс sender. Как объявляются события?
- •Делегаты и события
- •Как зажигаются события
- •Классы receiver. Как обрабатываются события
- •Классы с событиями, допустимые в .Net
- •Пример «Списки с событиями»
- •Две проблемы с обработчиками событий
- •Классы с большим числом событий
- •Проект «Город и его службы»
- •Вариант 1
- •Обработчик события:
- •Отметьте истинные высказывания:
- •Вариант 2
- •Вариант 3
- •Отметьте истинные высказывания:
- •Все аргументы события принадлежат:
Класс Convert
Мы уже знаем о существовании метода ToInt32, осуществляющего преобразование в целое число. Кроме того, в этом классе имеется ещё ряд методов преобразования: ToBoolean, ToByte, ToChar, ToDateTime, ToDecimal, ToDouble, ToSingle, ToString. Этот (неполный!) перечень методов позволяет сделать следующие выводы:
Система основных типов языка в основном унаследована от языка С++, однако, в ней появились и новшества.
Как уже говорилось, в C# имеется полноценный логический тип данных Boolean.
К числу основных типов в C# добавился тип DateTime, позволяющий оперировать календарными датами и временем.
Тип Decimal это разновидность вещественного типа данных используемого, когда важно избежать накопления погрешностей вычислений.
Два основных вещественных типа языка C++ (float и double) в C# «поменялись местами» - стандартным теперь является Double. Это означает, что вещественные константы, записываемые обычным образом, относятся к типу Double. Поэтому оператор a = 0.5 будет признан компилятором ошибочным (несовместимость типов в присваивании), если переменная a имеет тип float.
Преобразованием в тип float занимается метод ToSingle.
Каждый из методов преобразования является перегруженным. Это позволяет применять метод с одним и тем же именем для преобразования разнотипной исходной информации. Например:
Convert.ToInt32(3.2);
Convert.ToInt32(false);
Convert.ToInt32(“Hello”);
В связи с этим полезно будет выполнть следующее задание: написать программу, проверяющую результаты применения методов преобразования к различным типам данных. Выявить комбинации типов, приводящие к ошибкам и дать этому объяснение.
Строковый тип данных string (класс String)
Работу со строками символов в .NET очень удобно осуществлять с помощью типа данных String из пространства имен System. Переменные этого типа можно описывать также с помощью ключевого слова string.
Переменная строкового типа может получить свое значение несколькими способами:
Присваиванием строковой константы или строкового выражения:
String name;
name=”John”;
name=”Mr. ” + name; //для строк + действует как конкатенация
Путем ввода с клавиатуры
name=Console.Readline();
Сравнивать строки можно операциями == (равно) и != (не равно). При этом проверяется точное совпадение содержимого этих строк. Однако применять для сравнения операции <, >, >= и <= нельзя. Для таких сравнений существует специальный метод Compare в классе String.
В C# сохранилась возможность работать со строкой как с массивом символов.
В следующем фрагменте программы проиллюстрированы некоторые из перечисленных возможностей:
string s1,s2;
s1 = Console.ReadLine().ToLower();
s2 = ""; //строка может быть пустой
for (int i = 0; i < s1.Length; i++) s2 += s1[s1.Length-i-1];
Console.WriteLine(s2);
Здесь сначала описываются две строковые переменные s1 и s2. Далее с помощью метода ToLower вводимая с клавиатуры строка переводится в нижний регистр и результат присваивается переменной s1. Обратите внимание на цепочку вызовов методов Console.ReadLine().ToLower(). Сначала ReadLine возвращает строку, а затем ToLower переводит ее в нижний регистр.
Далее выполняется цикл, переворачивающий содержимое строки s1. Перевернутое содержимое оказывается в строке s2. Обратите внимание на то, что для определения длины строки используется Length. Вы не видите спика параметров в круглых скобках после Length. Это значит, что Length не является методом, а свойством класса. Позже мы обсудим свойства подробнее.
Обращение к символам строки с помощью индексации возможно только для чтения. Попытка изменить строку с помощью индексации приводит к ошибке компиляции:
s[0]=’!’; //Ошибка
Класс String предлагает обширный набор полезных методов. В следующей таблице указаны некоторые из них.
Таблица членов класса String
Член |
Описание |
Length |
Свойство, возвращающее длину текущей строки |
Compare() и CompareTo() |
Методы, сравнивающие два заданных объекта String и возвращающие целое число (0,1,-1), которое показывает их связь друг с другом в порядке сортировки |
Contains() |
Метод, применяемый для выяснения того, содержит ли текущий строковый объект данную строку |
Copy() |
Метод, создающий новый экземпляр String, имеющий то же значение, что и заданный экземпляр String |
CopyTo() |
Метод, копирующий заданное число знаков начиная с указанной позиции в этом экземпляре до указанной позиции в массиве знаков Юникода |
EndsWith() и StartsWith() |
Методы, определяющие, совпадает ли конец (начало) экземпляра String с указанной строкой |
Format() |
Метод, который заменяет каждый элемент формата в указанном объекте String текстовым эквивалентом значения соответствующего объекта |
IndexOf() |
Метод, возвращающий индекс первого вхождения String или одного или нескольких знаков в данной строке |
IndexOfAny() |
Метод, возвращающий индекс первого обнаруженного в данном экземпляре знака из указанного массива знаков Юникода |
Insert() |
Метод, используемый для получения копии текущей строки, содержащей добавляемые строковые данные |
Join() |
Метод, который вставляет заданный разделитель типа String между элементами заданного массива String, создавая одну сцепленную строку |
LastIndexOf() |
Возвращает индекс последнего вхождения указанного знака Юникода или String в пределах данного экземпляра |
LastIndexOfAny() |
Возвращает индекс последнего вхождения в данном экземпляре какого-либо одного или нескольких знаков, указанных в массиве знаков Юникод |
PadLeft() и PadRight() |
Выравнивает знаки в данном экземпляре по левому (правому) краю, добавляя справа (слева) пробелы или указанные знаки Юникода до указанной общей длины |
Remove() Replace() |
Методы, используемые для получения копии строки с соответствующими модификациями (при удалении или замене символов) |
Split() |
Возвращает строковый массив, содержащий подстроки данного экземпляра, разделенные элементами заданной строки или массива знаков Юникода |
Substring() |
Метод, возвращающий строку, которая представляет подстроку текущей отроки |
ToCharArray() |
Метод, возвращающий массив символов, из которых состоит текущая строка |
ToUpper() ToLower() |
Методы, создающие копию данной строки, представленную символами в верхнем или, соответственно, нижнем регистре |
Trim() |
Удаляет все начальные и конечные вхождения заданных наборов знаков из текущего объекта String |
TrimEnd() и TrimStart() |
Удаляет все конечные (начальные) вхождения набора знаков, заданного в виде массива, из текущего объекта String |
Рассмотрим подробнее использование некоторых методов класса String.
