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

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



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

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

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

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

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

В C# три способа передачи параметров по значению ( по умолчанию ) по ссылке (ref) по ссылке (out) Для каждого из трех способов важно понимать особенности при передаче : ссылочного типа типа - значения

При передаче типа - значения Создается его локальная копия Любые модификации внутри метода не влияют на исходное значение При передаче ссылочного типа Передается значение ссылки Любые модификации внутри метода влияют на исходное значение Само значение исходной ссылки изменить нельзя ( присвоить ссылку на другой объект )

При передаче типа - значения Передается ссылка на объект Модификации объекта внутри метода влияют на исходные значения При передаче ссылочного типа Передается ссылка на ссылку Можно присвоить ссылке ссылку на другой объект out аналогичен ref, однако не предполагает предварительной инициализации переменной * ref и out имеют одинаковую сигнатуру. Поэтому нельзя создать 2 метода, которые будут отличаться только наличием у одного ref, а у другого out параметром

По значению : Console.WriteLine(Hello, World!); По ссылке : Swap(ref T x, ref T y){T z; z = x; x = y; y = z;} Не забывайте указывать ref и out при передаче фактических параметров ! T x, y; Swap(x, y); // неправильно T x, y; Swap(ref x, ref y); // правильно

Передача параметров

Для объявления переменного числа параметров используется params params params param_type[] param_name params должен идти в конце списка формальных параметров С таким параметром можно работать, как с обычным массивом На место params можно передавать : массив параметров параметры через запятую ничего Примеры : public static void WriteLine(string format, params object[] arg) {} string.Concat(arrayVar); string.Concat(new int[] {5,4,3}); string.Concat(Hello, C#, World); string.Concat();

= значение Имя _ типа имя _ переменной = значение В определении метода должны идти последними Примеры : public Complex(double re, double im = 0.0){} public void Vector3D(double x = 0.0, double y = 0.0, double z = 0.0){ } Complex c = new Complex(5.7); Complex c = new Complex(5.7, 8.3); Vector3D(5); Vector3D(5, 6); Vector3D(5, 9, 12); Компилируется в один метод с максимальным числом параметров, а не в несколько со всеми возможными вариантами параметров Добавление нового параметра со значением по умолчанию в существующий метод приведет к необходимости перекомпилирования всех зависимых сборок, использующих этот метод

Синтаксис : Имя _ метода ( имя _ параметра : значение [, имя _ параметра : значение …]) Позволяет задавать только указанные по имени параметры Можно менять порядок следования параметров Можно совмещать позиционную передачу параметров и передачу параметров по имени Примеры : public Complex (int re, int im) {…} Complex c = new Complex (im : 5, re : 6); void Vector3D(int x, int y=0, int z =0); Vector3D(3, y:4, z:5); // Передача по положению и по имени Vector3D(3, z:5); // Передача по положению, по имени и значения по умолчанию

Способы передачи параметров Типы, допускающие неопределенное значение Работа со строками 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

Появился в C# 6 Применим к ссылочным и Nullabe типам string s = object1?.value1 Если object1 равен null, то результатом этого выражения будет s= null, иначе s = object1.value1 int? item = collection?[index]; Если collection равена null, то результатом этого выражения будет null, иначе (int?)collection[index] Использование Сильно сокращает запись public static string GetTrimedFio(Employee employee) { string trimedFio = employee?.Fio?.Trim(); if (employee != null && employee.Fio != null) trimedFio = employee.Fio.Trim(); else trimedFio = null; return trimedFio; }

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 на две строки ( да еще и с пробелами )

Появились в C# 6 (Visual Studio 2015) Используется для создания строк. Выглядит как шаблонная строка, которая содержит выражения. Интерполированное строковое выражение создает строку, заменяя содержащиеся выражения представлениями ToString() результатов выражений. Интерполированную строку проще понять Структура интерполированной строки $ { }... Примеры : string s = $"hello, {name} sb.Append($"Hello, {name}" ); Console.WriteLine($"{person.Name, 20} is {person.Age:D3} year {(person.Age == 1 ? "" : "s")} old.)

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

Позволяет осуществлять поиск, замену, проверку, разбор строки, используя регулярные выражения Пространство имен 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, ); // Удаление недопустимых символов

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