Типы, допускающие неопределенное значение Работа со строками Обработка исключений Лекция 9.

Презентация:



Advertisements
Похожие презентации
Способы передачи параметров Типы, допускающие неопределенное значение Работа со строками Лекция 3.
Advertisements

Работа со строками Работа с файлами Лекция 7. Работа со строками Работа с файлами.
Строки в C#. Основные концепции Для представления строкой информации в.NET существует класс System.String. У него есть псевдоним string, для которого.
Коллекции классов Лекция 12. С помощью коллекций вместо создания структур данных программист использует готовые структуры данных, не заботясь об их реализации.
JavaScript Регулярные выражения Введение Создание регулярных выражений Флаги (способы поиска по шаблону) Метасимволы Специальные символы Квантификаторы.
Строки в С#. Отдельные символы, чаще всего, его называют типом Char. Строки постоянной длины, часто они представляются массивом символов Char[]. Строки.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Исключительные ситуации. Схема обработки исключений Try { //охраняемый блок trow (new MyException();) } catch(MyExeption e) { … } catch(Exeption e){ …
КоллекцииИтераторы Типы, допускающие неопределенное значение Обработка исключений Лекция 5.
Часть 1. Основы ООП Исключения.. Структурный подход Неисправимые ошибки – вывести информацию и умереть. Исправимые ошибки – уведомить вызывающую.
Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Строки, символы и регулярные выражения Лекция 6. Символы. Тип сhar это 16-разрядный тип данных без знака. Для представления символов в С# используется.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
Распределение памяти. Динамическое выделение памяти.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
1 ©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
СТРОКИ Работа со строками. Последовательность выполнения операторов int age = 45; String s = "Не is " + age + " years old."; age не String, а переменная.
Транксрипт:

Типы, допускающие неопределенное значение Работа со строками Обработка исключений Лекция 9

Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений

Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений

Типы с неопределенным значением – расширение типов - значений (ValueType) неопределенным значением null Структура Nullable struct Nullable where T : struct, new() Свойства HasValue bool HasValue { get; } – определено ли значение или объект - null Value T Value {get; } - значение Синтаксис объявления Nullable Nullable value_type? value_type?- сокращенный вариант Примеры : ? int? nj = 5, nj = null; Nullable f = null; ? DateTime? ndt = GetNullableDate(), ndt2 = null;

Неопределенные значения в базах данных * Трехзначная логика bool? Возможность неопределенного возвращаемого значения Расширение типов - значений неопределенным значением

Существует неявное преобразование из value_type в value_type? Обратное преобразование - только явное : int? nj; int j = (int)nj; Свойства HasValue – показывающее определено ли значение и Value - значение int i; int? ni = 5; if (ni.HasValue) i = ni.Value; Значение по умолчанию - null Можно получать доступ ко всем членам объекта типа DateTime? d = new DateTime(); d.Value.AddDays(4);

Можно выполнять обычные операции ( переопределены ) int? + int? => int? Если одно из значений не определено (null), то и результат не определен Если оба определены, то результат – сумма этих значений Можно сравнивать с null if (ni == null) ni = 5;

object1 ?? object2 Если object1 равен null, то результатом этого выражения будет object2, иначе object1 Использование Присваивание значения по умолчанию, если не определен Применимо к ссылочным и Nullabe типам Примеры : int? a; int i = a ?? 5; Если a == null, то i = 5, иначе i = a.Value

Nullable Types

Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений

String – ссылочный тип Функционирует как тип - значение Строка неизменяема Сравнение строк = == ==, != Сравнение содержимого ( посимвольно с учетом регистра ), а не ссылок на объект Конкатенация строк + или использование статического метода Concat() string s = s1 + еще одна строчка + s2; String s += добавленная строчка – создает новый экземпляр типа string Свойства: Свойство Length – возвращает длину строки ( только чтение ) Индексатор [ [[ [ ] – возвращает указанный символ в строке ( только на чтение ) char c = myString[5]; Статическое поле E EE Empty – представляет пустую строку string s = string.Empty;

Compare() Статический метод Compare() – сравнение строк, возможно с учетом культуры и регистра string result = string.Compare(string1, string2, new CultureInfo("en-US"), CompareOptions.IgnoreCase); IndexOf()LastIndexOf() Методы IndexOf(), LastIndexOf() – возвращают позицию символа или подстроки Contains() Метод Contains() – возвращает true, если строка содержит подстроку Format() Статический метод Format() – создание форматированной строки string result = String.Format( Температура {0:d}:\n в {1,11}: {2} градусов ", date, time, temp); Insert() Метод Insert() – возвращает новую строку, в которой указанная подстрока вставлена в указанную позицию string result = s.Insert(2, вставляемая подстрока ); Remove(), Replace() Методы Remove(), Replace() – возвращают новые строки, в которых удалена или замена подстрока Split() Метод Split() – разбивает строку на несколько строк по определенному символу Trim() Метод Trim() – удаляет все вхождения определенного набора символов сначала и с конца строки ToUpper(), ToLower() Методы ToUpper(), ToLower() – преобразование строки в верхний, нижний регистры ( возвращают новые строки ) Join() Метод Join() – объединяет коллекцию в строку использую разделитель между элементами int[] values = {5, 4189, 11434,.366 }; Console.WriteLine(string.Join(;", values)); IsNullOrEmpty()IsNullOrWhiteSpace() Статические методы IsNullOrEmpty(), IsNullOrWhiteSpace() – проверяют строку на пустоту ВНИМАНИЕ !!! Методы возвращают новый экземпляр string и не меняют текущую строку

Класс предназначен для работы с часто изменяющимися строковыми данными Представляет изменяемую строку символов Расположен пространстве имен System.Text Методы : Append() Append() – добавляет строковое представление типа ( подстроку ) в конец ( перегружен для различных типов данных ) AppendFormat() AppendFormat() – добавляет форматированную строку AppendLine() AppendLine() – добавляет строку и символ перевода строки Insert() Insert() – вставляет строковое представление типа ( подстроку ) в указанное место ( перегружен для различных типов данных ) Replace() Replace() – заменяет символы или подстроки на новые Clear() Clear() – очищает содержимое ToString() ToString() – возвращает содержащуюся строку В отличии от string меняет сам объект, а не возвращает новый при изменении данных

Применяется для форматирования вывода строки Console.Write(), Console.WriteLine(), string.Format(), stringBuilder.AppendFormat() Первый параметр – строка - шаблон Метки - заполнители {0}, {1}, {2} … Вместо меток подставляются параметры метода, следующие за строкой Следующие параметры нумеруются с 0 Метки - заполнители {0}, {1}, {2} могут идти в произвольном порядке и повторятся сколько угодно раз При недостаточности параметров будет вызвано исключение Console.Write(x = {0}, y = {2}, z = {1}, x ={0}, dx, dz, dy); Форматирование числовых данных C, c – денежный формат D, d – числовой формат ( с минимальный кол - вом цифр ) E, e – экспоненциальный формат числа F, f – формат числа с фиксированной точкой X, x – шестнадцатеричный формат P, p – представление в процентах G, g – общий формат string s = string.Format("{0:C}", value);

\ Управляющие символы начинаются с \ \n– перевод строки ( для Windows) \t– символ табуляция \r– возврат каретки \a– звуковой сигнал \\– символ \ \*– символ * \– символ string s = Дословные строки Отключение управляющих символов Сохраняет пробелы, символы перевода строк и т. д. string s string s на две строки ( да еще и с пробелами )

Работа со строками

Позволяет осуществлять поиск, замену, проверку, разбор строки, используя регулярные выражения Пространство имен System.Text.RegularExpressions Позволяет работать как с статическими методами, так и создать экземпляр класса для проведения множества однотипных операций, используя один и тот же паттерн Методы ( все методы экземпляра имеют и соответствующий статический вариант ): IsMatch() IsMatch() – проверяет строку на соответствие регулярному выражению ( статический метод и метод экземпляра ) Match() Match() – возвращает первое вхождение регулярного выражения в строку ( статический метод и метод экземпляра ) Matchs() Matchs() – возвращает коллекцию всех вхождений регулярного выражения в строку ( статический метод и метод экземпляра ) Replace() Replace() – заменяет все вхождения регулярного выражения на новую подстроку Split() Split() – разделяет строку на подстроки по позициям совпадения с регулярным выражениям ( найденная строка выкидывается ). Статический метод и метод экземпляра Примеры : Regex r = new bool ok = r.IsMatch(" "); bool validTel = string s = Regex.Replace(inputString, ); // Удаление недопустимых символов

Работа с регулярными выражениями

Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений

Возвращаемое значение Не всегда возможно ( конструкторы ) Не сразу проявляется Непонятно, что конкретно произошло Усложняет код Глобальная переменная Не проходит в многопоточной среде Вызов определенной функции или завершение программы Не проходит, если библиотеки независимы Обработка исключений

Ошибке ставится в соответствие некоторый объект – исключение (exception) System.Exception Объект - исключение должен иметь тип, который является потомком System.Exception При возникновении ошибочной ситуации генерируется ( выбрасывается ) исключение if(j 3) throw throw new IndexOutOfRangeException(); Прерывается обычный ход выполнения операторов Если нет обработчика исключения, то приложение будет аварийно завешено.

Блок обработки исключений имеет следующий вид :try { // Код, требующий корректного восстановления или очистки ресурсов } [catch [catch [(exception_type1 [name_1])] { // Код восстановления, после возникновения исключения exception_type1 } … catch … catch(exception_typeN [name_N]) { // Код восстановления, после возникновения исключения exception_typeN ] } ] [finally { // Код очисти ресурсов, после операций в блоке try // Этот код выполняется всегда, вне зависимости от наличия исключения ] } ] Блок try – обязательный Блоки catch и finally могут отсутствовать, однако хотя бы один из них должен присутствовать

После генерации исключения рассматриваются блоки в порядке возрастания удаленности Сначала смотрится статическая вложенность – вложенность блоков кода ( внутри метода ) Затем смотрится динамическая вложенность – порядок вызовов в стеке В них просматриваются все обработчики (catch) сверху вниз. Если тип сгенерированного исключения – потомок типа, указанного в блоке catch, блок catch выбирается для обработки этого исключения Если найден блок catch, соответствующий исключению, то до выполнения кода в блоке catch выполняются все внутренние блоки finally ( если имеются ). После обработки исключения выполнение в каком - то блоке catch, все остальные блоки catch игнорируются. Блок finally выполняется всегда при выходе из блока обработки исключения, независимо от того возникло ли исключение или нет, обработано ли оно или нет. Блок finally выполнится всегда. Если исключение возникло и обработано, то выполнение продолжается с кода, следующего за обработавшим исключение try-catch-finally блоком ( сначала выполнив блок finally) Если при возникновении исключения не находится подходящий блок catch, т. е. исключение остается не обработанным, то выполнение программы аварийно завершается.

Способы восстановления после исключения try { // Читаем файл } catch (FileNotFoundException e) { throw e; } catch (FileLoadException) { throw; } catch (IOException e) { throw new MyException (" Что - то не так при работе с файлом ", e); } catch (Exception) { // Все ок. Не генерируем новое исключения } Еще раз сгенерировать то же исключение для передачи информации о нем коду, расположенному выше в стеке ; Сгенерировать исключение другого типа для передачи дополнительной информации коду, расположенному выше в стеке ; Позволить программному потоку выйти из блока catch естественным образом

Базовый класс для всех исключений Message Поле Message – описание возникшего исключения Source Поле Source – ссылка на объект, сгенерировавший исключение, или на сборку, в которой возникло исключение StackTrace Поле StackTrace – стек вызовов InnerExeption Поле InnerExeption – предыдущее исключение ( при дальнейшей передачи исключения )

Исключения

Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений