- •1. C# и платформа .Net 7
- •2. Создание приложений .Net с использованием c# 38
- •3. Основы c# 71
- •4. Массивы, кортежи и строки 118
- •5. Классы и объекты 157
- •6. Перегрузка функций-членов класса 195
- •7. Наследование и полиморфизм 214
- •8. Обработка исключений 231
- •9. Интерфейсы, структуры и перечисления 255
- •10. Делегаты, события и лямбда-выражения 270
- •11. Обобщения 296
- •12. Коллекции, перечислители и итераторы 323
- •13. Время жизни объектов 370
- •1.C# и платформа .Net
- •1.1Становление c#
- •Язык c и api-интерфейс Windows
- •1.2Создание c#
- •Развитие c#
- •1.3Версии c#
- •1.4Связь c# со средой .Net Framework
- •Что нового в .Net Framework 4
- •1.5Общеязыковая исполняющая среда clr
- •1.6Общая система типов cts
- •1.7Общеязыковая спецификация cls
- •1.8Сборки
- •Приватные сборки
- •Разделяемые сборки
- •Однофайловые и многофайловые сборки
- •1.9Промежуточный язык cil
- •Утилита ildasm.Exe
- •1.10Классы и пространства имен Классы .Net Framework
- •Пространства имен
- •Роль корневого пространства Microsoft
- •1.11Общеязыковая инфраструктура cli
- •2.Создание приложений .Net с использованием c#
- •2.2Компилятор csc.Exe
- •Добавление ссылок на внешние сборки
- •Компиляция нескольких файлов исходного кода
- •Работа с ответными файлами в c#
- •2.3Типы приложений .Net
- •Создание приложений asp.Net
- •Возможности asp.Net
- •Элементы управления веб-сервера
- •Создание Windows-форм
- •Службы Windows
- •2.4Работа с Visual Studio 2010
- •2.5Создание проекта в VisualStudio 2010
- •2.6Изучение проекта и заполнение его кодом
- •2.7Компоновка проекта
- •2.8Отладка кода
- •2.9Рефакторинг кода
- •2.10Расширение кода
- •2.11Утилита Class Designer
- •2.12Интегрируемая система документации .Net Framework
- •3.Основы c#
- •3.1Основы ооп
- •3.2Простая программа на c#
- •3.3Комментарии
- •3.4Переменные
- •3.5Область видимости переменных, константы
- •3.6Типы данных
- •3.7Литералы
- •3.8Преобразования типов
- •3.9Арифметические операторы
- •3.10Операторы отношения и логические операторы
- •If (var1 & var2) Console.WriteLine("Данный текст не выведется");
- •3.11Оператор присваивания
- •3.12Поразрядные операторы
- •3.13Тернарный оператор
- •3.14Условные операторы
- •If (условие)
- •3.15Циклы for и while
- •3.16Циклы do while и foreach
- •3.17Операторы перехода
- •4.Массивы, кортежи и строки
- •4.1Массивы
- •4.2Многомерные массивы
- •4.3Ступенчатые (зубчатые) массивы
- •4.4Класс Array
- •4.5Создание динамического массива
- •4.6Массивы в качестве параметров
- •4.7Кортежи
- •4.8Строки
- •Построение строк
- •Постоянство строк
- •Работа со строками
- •Методы класса String
- •Методы работы со строками
- •Немного о сравнении строк в c#
- •4.9Класс StringBuilder
- •Методы класса StringBuilder
- •4.10Форматирующие строки
- •Спецификаторы формата для чисел
- •Спецификаторы формата для дат
- •4.11Регулярные выражения в c#
- •4.11.1Введение в регулярные выражения
- •Метасимволы, используемые в регулярных выражениях c#
- •4.11.2Использование регулярных выражений в c#
- •Структура перечисления RegexOptions
- •Метасимволы замены в регулярных выражениях c#
- •5.Классы и объекты
- •5.1Классы
- •Общая форма определения класса
- •Данные-члены
- •5.2Класс Object
- •5.2.1Методы System.Object
- •5.2.2Класс object как универсальный тип данных
- •5.3Создание объектов
- •5.3.1Переменные ссылочного типа и присваивание
- •5.3.2Инициализаторы объектов
- •5.4Методы
- •Объявление методов
- •Возврат из метода и возврат значения
- •Использование параметров
- •5.5Конструкторы
- •5.6Сборка мусора и деструкторы
- •Деструкторы
- •5.7Ключевое слово this
- •5.8Доступ к членам класса
- •Модификаторы доступа
- •Организация закрытого и открытого доступа
- •5.9Модификаторы параметров
- •Модификаторы параметров
- •5.9.1Модификатор ref
- •5.9.2Модификатор out
- •5.9.3Модификатор params
- •5.10Необязательные и именованные аргументы
- •5.10.1Необязательные аргументы
- •5.10.2Именованные аргументы
- •5.11Рекурсия
- •5.12Ключевое слово static
- •5.12.1Статические конструкторы
- •5.12.2Статические классы
- •5.13Индексаторы
- •5.13.1Одномерные индексаторы
- •5.13.2Многомерные индексаторы
- •5.14Свойства
- •Автоматически реализуемые свойства
- •5.15Модификаторы доступа в аксессорах
- •6.Перегрузка функций-членов класса
- •6.1Перегрузка методов
- •6.2Перегрузка конструкторов
- •6.3Перегрузка индексаторов
- •6.4Основы перегрузки операторов
- •6.4.1Перегрузка бинарных операторов
- •6.4.2Перегрузка унарных операторов
- •6.4.3Выполнение операций со встроенными в c# типами данных
- •6.5Перегрузка операторов отношения и операторов true - false
- •6.5.1Перегрузка операторов отношения
- •6.5.2Перегрузка операторов true и false
- •6.6Перегрузка логических операторов
- •6.6.1Перегрузка укороченных логических операторов
- •6.7Операторы преобразования
- •7.Наследование и полиморфизм
- •7.1Основы наследования
- •7.2Защищенный доступ и исключение наследования
- •7.2.1Организация защищенного доступа
- •7.2.2Ключевое слово sealed
- •7.2.3Диаграммы классов Visual Studio
- •7.3Конструкторы и наследование
- •7.4Наследование и сокрытие имен
- •Применение ключевого слова base для доступа к скрытому имени
- •7.5Ссылки на базовый класс и объекты производных классов
- •7.6Виртуальные методы, свойства и индексаторы
- •7.7Абстрактные классы
- •8.Обработка исключений
- •8.1Основы обработки исключений
- •8.1.1Роль обработки исключений в .Net
- •8.1.2Составляющие процесса обработки исключений в .Net
- •8.2Перехват исключений
- •8.3Класс Exception
- •8.4Конфигурирование состояния исключения
- •8.4.1Свойство TargetSite
- •8.4.2Свойство StackTrace
- •8.4.3Свойство HelpLink
- •8.4.4Свойство Data
- •8.5Исключения уровня системы и приложения
- •8.5.1Исключения уровня системы (System.SystemException)
- •8.5.2Исключения уровня приложения (System.ApplicationException)
- •8.5.3Создание специальных исключений
- •8.6Обработка многочисленных исключений
- •8.6.1Применение нескольких операторов catch
- •1 2 0 10 12 Индекс выходит за пределы
- •8.6.2Перехват всех исключений
- •8.6.3Вложение блоков try
- •8.7Операторы throw и finally
- •8.7.1Оператор throw
- •8.7.2Повторное генерирование исключений
- •8.7.3Использование блока finally
- •8.8Исключения, связанные с поврежденным состоянием (Corrupted State Exceptions)
- •8.9Ключевые слова checked и unchecked
- •9.Интерфейсы, структуры и перечисления
- •9.1Интерфейсы
- •9.2Интерфейсные ссылки
- •9.2.1Ключевое слово as
- •9.2.2Ключевое слово is
- •9.3Интерфейсные свойства и индексаторы
- •9.3.1Интерфейсные свойства
- •9.3.2Интерфейсные индексаторы
- •9.4Наследование интерфейсов
- •9.5Явная реализация интерфейса
- •9.6Структуры
- •Назначение структур
- •9.7Перечисления
- •10.Делегаты, события и лямбда-выражения
- •10.1Делегаты
- •10.1.1Определение типа делегата в c#
- •10.1.2Базовые классы System.MulticastDelegate и System.Delegate
- •10.2Групповой вызов и адресация делегируемых методов
- •10.2.1Групповое преобразование делегируемых методов
- •10.2.2Применение методов экземпляра в качестве делегатов
- •10.2.3Групповая адресация
- •10.3Ковариантность и контравариантность делегатов
- •10.5Анонимные методы
- •10.6Лямбда-выражения
- •10.6.1Одиночные лямбда-выражения
- •10.6.2Блочные лямбда-выражения
- •10.7События
- •10.8Аксессоры событий
- •10.9Обработка событий в среде .Net Framework
- •Void обработчик(object отправитель, EventArgs е)
- •11.Обобщения
- •11.1Обзор обобщений
- •Рекомендации по именованию
- •11.2Обобщенные классы
- •11.3Ограниченные типы
- •Связь между параметрами типа с помощью ограничений
- •11.4Ограниченные классы
- •11.5Ограниченные интерфейсы и конструкторы Применение ограничения на интерфейс
- •Применение ограничения new() на конструктор
- •11.6Ограничения ссылочного типа и типа значения
- •11.7Иерархии обобщенных классов
- •11.8Средства обобщений Значения по умолчанию
- •Статические члены
- •11.9Обобщенные методы
- •11.10Обобщенные структуры
- •11.11Обобщенные делегаты
- •11.12Обобщенные интерфейсы
- •Сравнение экземпляров параметра типа
- •11.13Модификация обобщенных методов
- •11.13.1Переопределение виртуальных методов в обобщенном классе
- •11.13.2Перегрузка методов с несколькими параметрами типа
- •11.14Ковариантность и контравариантность в обобщениях
- •11.14.1Применение ковариантности в обобщенном интерфейсе
- •11.14.2Применение контравариантности в обобщенном интерфейсе
- •12.Коллекции, перечислители и итераторы
- •12.1Краткий обзор коллекций
- •12.2Необобщенные коллекции
- •12.2.1Интерфейсы необобщенных коллекций
- •12.2.2Структура DictionaryEntry
- •12.2.3Классы необобщенных коллекций
- •12.3Обобщенные коллекции
- •12.3.1Интерфейсы обобщенных коллекций
- •12.3.3Классы обобщенных коллекций
- •12.4Класс ArrayList
- •12.5Класс Hashtable
- •12.10.1Тип ключа
- •12.13Битовые коллекции
- •12.13.1Класс BitArray
- •12.13.2Структура BitVector32
- •12.14Специальные и наблюдаемые коллекции
- •12.14.1Специальные коллекции
- •12.14.2Наблюдаемые коллекции
- •12.15Параллельные коллекции
- •12.16Реализация интерфейса iComparable
- •12.17Реализация интерфейса iComparer
- •12.18Перечислители
- •12.18.1Применение обычного перечислителя
- •12.18.2Применение перечислителя типа iDictionaryEnumerator
- •12.19Реализация интерфейсов iEnumerable и iEnumerator
- •12.20Итераторы
- •13.Время жизни объектов
- •13.1Базовые сведения о времени жизни объектов
- •Установка объектных ссылок в null
- •13.2Роль корневых элементов приложения
- •Поколения объектов
- •13.3Параллельная и фоновая сборка мусора Параллельная сборка мусора в версиях .Net 1.0 - .Net 3.5
- •Фоновая сборка мусора в версии .Net 4.0
- •13.5Финализируемые объекты
- •Переопределение System.Object.Finalize()
- •Описание процесса финализации
- •13.6Высвобождаемые объекты
- •Повторное использование ключевого слова using в c#
- •13.7Финализируемые и высвобождаемые типы
- •Формализованный шаблон очистки
- •13.8Отложенная инициализация объектов
- •Полезные ссылки
Методы класса String
В следующей таблице перечислены некоторые наиболее интересные методы этого класса, сгруппированные по назначению:
Методы работы со строками
Метод |
Структура и перегруженные версии |
Назначение |
Сравнение строк |
||
Compare() |
public static int Compare(string strA, string strB) public static int Compare(string strA, string strB, bool ignoreCase) public static int Compare(string strA, string strB, StringComparison comparisonType) public static int Compare(string strA, string strB, bool ignoreCase, CultureInfo culture) |
Статический метод, сравнивает строку strA со строкой strB. Возвращает положительное значение, если строка strA больше строки strB; отрицательное значение, если строка strA меньше строки strB; и нуль, если строки strA и strB равны. Сравнение выполняется с учетом регистра и культурной среды. Если параметр ignoreCase принимает логическое значение true, то при сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае эти различия учитываются. Параметр comparisonType определяет конкретный способ сравнения строк. Класс CultureInfo определен в пространстве имен System.Globalization. |
public static int Compare(string strA, int indexA, string strB, int indexB, int length) public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase) public static int Compare(string strA, int indexA, string strB, int indexB, int length, StringComparison comparisonType) public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase, CultureInfo culture) |
Сравнивает части строк strA и strB. Сравнение начинается со строковых элементов strA[indexA] и strB[indexB] и включает количество символов, определяемых параметром length. Метод возвращает положительное значение, если часть строки strA больше части строки strB; отрицательное значение, если часть строки strA меньше части строки strB; и нуль, если сравниваемые части строк strA и strB равны. Сравнение выполняется с учетом регистра и культурной среды |
|
CompareOrdinal() |
public static int CompareOrdinal(string strA, string strB) public static int CompareOrdinal(string strA, int indexA, string strB, int indexB, int count) |
Делает то же, что и метод Compare(), но без учета локальных установок |
CompareTo() |
public int CompareTo(object value) |
Сравнивает вызывающую строку со строковым представлением объекта value. Возвращает положительное значение, если вызывающая строка больше строки value; отрицательное значение, если вызывающая строка меньше строки value; и нуль, если сравниваемые строки равны |
public int CompareTo(string strB) |
Сравнивает вызывающую строку со строкой strB |
|
Equals() |
public override bool Equals(object obj) |
Возвращает логическое значение true, если вызывающая строка содержит ту же последовательность символов, что и строковое представление объекта obj. Выполняется порядковое сравнение с учетом регистра, но без учета культурной среды |
public bool Equals(string value) public bool Equals(string value, StringComparison comparisonType) |
Возвращает логическое значение true, если вызывающая строка содержит ту же последовательность символов, что и строка value. Выполняется порядковое сравнение с учетом регистра, но без учета культурной среды. Параметр comparisonType определяет конкретный способ сравнения строк |
|
|
public static bool Equals(string a, string b) public static bool Equals(string a, string b, StringComparison comparisonType) |
Возвращает логическое значение true, если строка a содержит ту же последовательность символов, что и строка b. Выполняется порядковое сравнение с учетом регистра, но без учета культурной среды. Параметр comparisonType определяет конкретный способ сравнения строк |
Конкатенация (соединение) строк |
||
Concat() |
public static string Concat(string str0, string str1); public static string Concat(params string[] values); |
Комбинирует отдельные экземпляры строк в одну строку (конкатенация) |
Поиск в строке |
||
Contains() |
public bool Contains(string value) |
Метод, который позволяет определить, содержится ли в строке определенная подстрока (value) |
StartsWith() |
public bool StartsWith(string value) public bool StartsWith(string value, StringComparison comparisonType) |
Возвращает логическое значение true, если вызывающая строка начинается с подстроки value. В противном случае возвращается логическое значение false. Параметр comparisonType определяет конкретный способ выполнения поиска |
EndsWith() |
public bool EndsWith(string value) public bool EndsWith(string value, StringComparison comparisonType) |
Возвращает логическое значение true, если вызывающая строка оканчивается подстрокой value. В противном случае возвращает логическое значение false. Параметр comparisonType определяет конкретный способ поиска |
IndexOf() |
public int IndexOf(char value) public int IndexOf(string value) |
Находит первое вхождение заданной подстроки или символа в строке. Если искомый символ или подстрока не обнаружены, то возвращается значение -1 |
public int IndexOf(char value, int startIndex) public int IndexOf(string value, int startIndex) public int IndexOf(char value, int startIndex, int count) public int IndexOf(string value, int startIndex, int count) |
Возвращает индекс первого вхождения символа или подстроки value в вызывающей строке. Поиск начинается с элемента, указываемого по индексу startIndex, и охватывает число элементов, определяемых параметром count (если указан). Метод возвращает значение -1, если искомый символ или подстрока не обнаружен |
|
LastIndexOf() |
Перегруженные версии аналогичны методу IndexOf() |
То же, что IndexOf, но находит последнее вхождение символа или подстроки, а не первое |
IndexOfAny() |
public int IndexOfAny(char[] anyOf) public int IndexOfAny(char[] anyOf, int startIndex, int count) public int IndexOfAny(char[] anyOf, int startIndex) |
Возвращает индекс первого вхождения любого символа из массива anyOf, обнаруженного в вызывающей строке. Поиск начинается с элемента, указываемого по индексу startIndex, и охватывает число элементов, определяемых параметром count (если они указаны). Метод возвращает значение -1, если не обнаружено совпадение ни с одним из символов из массива anyOf. Поиск осуществляется порядковым способом |
LastIndexOfAny |
Перегруженные версии аналогичны методу IndexOfAny() |
Возвращает индекс последнего вхождения любого символа из массива anyOf, обнаруженного в вызывающей строке |
Разделение и соединение строк |
||
Split |
public string[] Split(params char[] separator) public string[] Split(params char[] separator, int count) |
Метод, возвращающий массив string с присутствующими в данном экземпляре подстроками внутри, которые отделяются друг от друга элементами из указанного массива char или string. В первой форме метода Split() вызывающая строка разделяется на составные части. В итоге возвращается массив, содержащий подстроки, полученные из вызывающей строки. Символы, ограничивающие эти подстроки, передаются в массиве separator. Если массив separator пуст или ссылается на пустую строку, то в качестве разделителя подстрок используется пробел. А во второй форме данного метода возвращается количество подстрок, определяемых параметром count. |
|
public string[] Split(params char[] separator, StringSplitOptions options) public string[] Split(string[] separator, StringSplitOptions options) public string[] Split(params char[] separator, int count, StringSplitOptions options) public string[] Split(string[] separator, int count, StringSplitOptions options) |
В двух первых формах метода Split() вызывающая строка разделяется на части и возвращается массив, содержащий подстроки, полученные из вызывающей строки. Символы, разделяющие эти подстроки, передаются в массиве separator. Если массив separator пуст, то в качестве разделителя используется пробел. А в третьей и четвертой формах данного метода возвращается количество строк, ограничиваемое параметром count. Но во всех формах параметр options обозначает конкретный способ обработки пустых строк, которые образуются в том случае, если два разделителя оказываются рядом. В перечислении StringSplitOptions определяются только два значения: None и RemoveEmptyEntries. Если параметр options принимает значение None, то пустые строки включаются в конечный результат разделения исходной строки. А если параметр options принимает значение RemoveEmptyEntries, то пустые строки исключаются из конечного результата разделения исходной строки. |
Join() |
public static string Join(string separator, string[] value) public static string Join(string separator, string[] value, int startIndex, int count) |
Строит новую строку, комбинируя содержимое массива строк. В первой форме метода Join() возвращается строка, состоящая из сцепляемых подстрок, передаваемых в массиве value. Во второй форме также возвращается строка, состоящая из подстрок, передаваемых в массиве value, но они сцепляются в определенном количестве count, начиная с элемента массива value[startIndex]. В обеих формах каждая последующая строка отделяется от предыдущей разделительной строкой, определяемой параметром separator. |
Заполнение и обрезка строк |
||
Trim() |
public string Trim() public string Trim(params char[] trimChars) |
Метод, который позволяет удалять все вхождения определенного набора символов с начала и конца текущей строки. В первой форме метода Trim() из вызывающей строки удаляются начальные и конечные пробелы. А во второй форме этого метода удаляются начальные и конечные вхождения в вызывающей строке символов из массива trimChars. В обеих формах возвращается получающаяся в итоге строка. |
|
|
|
|
|
|
PadLeft() |
public string PadLeft(int totalWidth) public string PadLeft(int totalWidth, char paddingChar) |
Позволяет дополнить строку символами слева. В первой форме метода PadLeft() вводятся пробелы с левой стороны вызывающей строки, чтобы ее общая длина стала равной значению параметра totalWidth. А во второй форме данного метода символы, обозначаемые параметром paddingChar, вводятся с левой стороны вызывающей строки, чтобы ее общая длина стала равной значению параметра totalWidth. В обеих формах возвращается получающаяся в итоге строка. Если значение параметра totalWidth меньше длины вызывающей строки, то возвращается копия неизмененной вызывающей строки. |
|
||
PadRight() |
Аналогично PadLeft() |
Позволяет дополнить строку символами справа. |
Вставка, удаление и замена строк |
||
Insert() |
public string Insert(int startIndex, string value) |
Используется для вставки одной строки в другую, где value обозначает строку, вставляемую в вызывающую строку по индексу startIndex. Метод возвращает получившуюся в итоге строку. |
Remove() |
public string Remove(int startIndex) public string Remove(int startIndex, int count) |
Используется для удаления части строки. В первой форме метода Remove() удаление выполняется, начиная с места, указываемого по индексу startIndex, и продолжается до конца строки. А во второй форме данного метода из строки удаляется количество символов, определяемое параметром count, начиная с места, указываемого по индексу startIndex. |
Replace() |
public string Replace(char oldChar, char newChar) public string Replace(string oldValue, string newValue) |
Используется для замены части строки. В первой форме метода Replace() все вхождения символа oldChar в вызывающей строке заменяются символом newChar. А во второй форме данного метода все вхождения строки oldValue в вызывающей строке заменяются строкой newValue. |
Смена регистра |
||
ToUpper() |
public string ToUpper() |
Делает заглавными все буквы в вызывающей строке. |
ToLower() |
public string ToLower() |
Делает строчными все буквы в вызывающей строке. |
Получение подстроки из строки |
||
Substring() |
public string Substring(int startIndex) public string Substring(int startIndex, int length) |
В первой форме метода Substring() подстрока извлекается, начиная с места, обозначаемого параметром startIndex, и до конца вызывающей строки. А во второй форме данного метода извлекается подстрока, состоящая из количества символов, определяемых параметром length, начиная с места, обозначаемого параметром startIndex. |
Следующая программа использует несколько из вышеуказанных методов:
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Сравним первые две строки
string s1 = "это строка";
string s2 = "это текст, а это строка";
if (String.CompareOrdinal(s1, s2) != 0)
Console.WriteLine("Строки s1 и s2 не равны");
if (String.Compare(s1, 0, s2, 13, 10, true) == 0)
Console.WriteLine("При этом в них есть одинаковый текст");
// Конкатенация строк
Console.WriteLine(String.Concat("\n" + "Один, два ",
"три, четыре"));
// Поиск в строке
// Первое вхождение подстроки
if (s2.IndexOf("это") != -1)
Console.WriteLine("Слово \"это\" найдено в строке, оно "+
"находится на: {0} позиции", s2.IndexOf("это"));
// Последнее вхождение подстроки
if (s2.LastIndexOf("это") != -1)
Console.WriteLine("Последнее вхождение слова \"это\"
находится на {0} позиции", s2.LastIndexOf("это"));
// Поиск из массива символов
char[] myCh = {'Ы','х','т'};
if (s2.IndexOfAny(myCh) != -1)
Console.WriteLine("Один из символов из массива ch "+
"найден в текущей строке на позиции {0}",
s2.IndexOfAny(myCh));
// Определяем начинается ли строка с заданной подстроки
if (s2.StartsWith("это текст") == true)
Console.WriteLine("Подстрока найдена!");
// Определяем содержится ли в строке подстрока
// на примере определения ОС пользователя
string myOS = Environment.OSVersion.ToString();
if (myOS.Contains("NT 5.1"))
Console.WriteLine("Ваша операционная система
Windows XP");
Console.ReadLine();
}
}
}
|
