
- •Оглавление
- •Метод Main
- •Ввод и вывод
- •Компиляция и выполнение
- •Общая структура программы на c#
- •Main() и аргументы командной строки
- •Общие сведения
- •Аргументы командной строки
- •Отображение аргументов командной строки
- •Доступ к аргументам командной строки с помощью оператора "foreach"
- •Значения, возвращаемые методом Main()
- •Пример результатов выполнения
- •Общие сведения о типах данных
- •Приведение
- •Результат
- •Упаковка-преобразование и распаковка-преобразование3
- •Производительность
- •Упаковка-преобразование4
- •Описание5
- •Результат
- •Распаковка-преобразование6
- •Описание7
- •Результат
- •Преобразование массива байтов в значение типа "int"8
- •Пример9
- •Преобразование строки в значение типа "int"
- •Преобразование шестнадцатеричных строк10
- •Массивы
- •Общие сведения о массивах
- •Массивы как объекты
- •Результат
- •Одномерные массив
- •Массивы типов значений и ссылочных типов.
- •Многомерные массивы
- •Инициализация массива
- •Массивы массивов
- •Результат
- •Использование оператора foreach с массивами
- •Передача массивов в качестве параметров
- •Передача одномерных массивов в качестве параметров
- •Пример 1 Описание
- •Результат 1
- •Передача многомерных массивов в качестве параметров
- •Пример 2 Описание
- •Передача массивов при помощи параметров ref и out
- •Пример 1
- •Пример 2
- •Неявно типизированные массивы11
- •Неявно типизированные массивы в инициализаторах объектов12
- •Использование строк
- •Работа со строками Escape-знаки
- •Точные строки: символ @
- •Доступ к отдельным знакам
- •Смена регистра
- •Сравнения
- •Разделение строки на подстроки
- •Строки с нулевыми значениями и пустые строки
- •Использование класса StringBuilder13
- •Анализ строк с помощью метода разделения
- •Навигация по содержимому строки с помощью строковых методов
- •Анализ строк с помощью регулярных выражений14
- •Объединение нескольких строк
- •Изменение содержимого строки
- •Определение наличия числового значения в строке
- •Надежное программирование
- •Безопасность
- •Базовые типы кодировки
- •Типы форматирования
- •Общие сведения о форматировании
- •Описатели формата
- •Анализ и описатели формата
- •Метод ToString и описатели формата
- •Поставщики формата15
- •Составное форматирование
- •Форматирование базовых типов
- •Форматирование для различных языков и региональных параметров16
- •Составное форматирование
- •Строка составного формата
- •Синтаксис элементов форматирования
- •Выравнивание
- •Компонент строки формата
- •Оформление фигурных скобок17
- •Порядок обработки18
- •Примеры кода
- •Строки числовых форматов
- •Строки стандартных числовых форматов
- •Примечания Настройки панели управления
- •Свойства NumberFormatInfo
- •Целочисленные типы и типы с плавающей запятой
- •Бесконечности действительных чисел с плавающей запятой и NaN
- •Строки настраиваемых числовых форматов19
- •Примечания Бесконечности действительных чисел с плавающей запятой и NaN
- •Настройки панели управления
- •Строки формата с фиксированной запятой и округлением
- •Разделители секций и условное форматирование20
- •Два примера настраиваемых форматов
- •Регулярные выражения в .Net Framework
- •Регулярные выражения как язык
- •Escape-знаки
- •Выполнение действия со строками с помощью основных строковых операций
- •Разбор строк
- •Разбор числовых строк
- •Операторы и выражения
- •Операторы
- •Выражения
- •Литералы и простые имена
- •Выражения вызова
- •Операторы
- •Анонимные функции
- •Эволюция делегатов в c#
- •Лямбда-выражения22
- •Выражения-лямбды
- •Лямбды операторов
- •Лямбды со стандартными операторами запросов
- •Вывод типа в лямбда-выражениях
- •Область действия переменной в лямбда-выражениях
- •Использование лямбда-выражений вне linq
- •Анонимные методы
- •Заметки
- •Перегружаемые операторы
- •Операторы преобразования23
- •Общие сведения об операторах преобразования
- •Использование операторов преобразования
- •Пример 1 Описание
- •Результат 1
- •Пример 2 Описание
- •Результат 2
- •Реализация определенных пользователем преобразований между структурами
- •Надежное программирование
- •Перегрузка операторов для реализации класса комплексных чисел
- •Переопределение Equals
- •Объекты, классы и структуры
- •Интерфейсы
- •Универсальные типы
- •Статические типы
- •Объекты
- •Экземпляры структуры и экземпляры класса
- •Идентификация объекта и идентификация значения26
- •Объявление классов
- •Создание объектов
- •Наследование классов
- •Описание
- •Результат
- •Общие сведения о классах
- •Структуры
- •Общие сведения о структурах
- •Использование структур
- •Пример 1 Описание
- •Результат
- •Пример 2 Описание
- •Результат
- •Наследование
- •Абстрактные и запечатанные классы и члены классов
- •Абстрактные классы и члены классов
- •Запечатанные классы и члены классов
- •Определение абстрактных свойств
- •Полиморфизм
- •Общие сведения о полиморфизме
- •Управление версиями с помощью ключевых слов "Override" и "New"
- •Переопределение и выбор метода29
- •Использование ключевых слов "Override" и "New"
- •Переопределение метода ToString
- •Порядок переопределения метода OnString в классе или структуре
- •Интерфейсы
- •Общие сведения об интерфейсах
- •Явная реализация интерфейса33
- •Явная реализация членов интерфейса
- •Надежное программирование
- •Явная реализация членов интерфейса с наследованием
- •Надежное программирование
- •Параметры методов
- •Возвращаемые значения
- •Передача параметров
- •Передача параметров типа значения
- •Пример. Передача типов значений с помощью значения.
- •Пример. Передача типов значений с помощью ссылки.
- •Пример. Замена типов значений.
- •Передача параметров ссылочного типа
- •Пример. Передача ссылочных типов по значению
- •Результат
- •Рассмотрение кода
- •Пример. Передача ссылочных типов по ссылке
- •Результат
- •Рассмотрение кода
- •Пример. Перестановка двух строк
- •Результат
- •Рассмотрение кода
- •Конструкторы
- •Использование конструкторов
- •Конструкторы экземпляров
- •Пример 1
- •Результат
- •Пример 2
- •Результат
- •Пример 3
- •Результат
- •Закрытые конструкторы35
- •Результат
- •Статические конструкторы36
- •Результат
- •Создание конструктора копии
- •Деструкторы
- •Заметки
- •Использование деструкторов для освобождения ресурсов.
- •Высвобождение ресурсов явным образом
- •Результат
- •Инициализаторы объектов и коллекций
- •Инициализаторы объектов и анонимные типы37
- •Инициализаторы объектов и типы, допускающие значение null
- •Инициализаторы коллекций
- •Инициализация объектов без вызова конструктора
- •Компиляция кода38
- •Инициализация словаря с помощью инициализатора коллекции39
- •Компиляция кода
- •Константы
- •Вложенные типы
- •Модификаторы доступа
- •Доступность класса и структуры
- •Доступность члена класса и структуры
- •Другие типы
- •Разделяемые классы и методы40
- •Разделяемый класс
- •Ограничения
- •Пример 1 Описание
- •Результат
- •Пример 2 Описание
- •Разделяемые методы
- •Статические классы и члены статических классов
- •Статические классы
- •Когда следует использовать статические классы
- •Статические члены
- •Входные данные
- •Пример результатов выполнения.
- •Определение различия между передачей структуры и ссылки класса в метод
- •Анонимные типы41
- •Заметки
- •Возвращение поднаборов свойств элементов в запросе
- •Компиляция кода
- •Методы расширения
- •Неявно типизированные локальные переменные
- •Var и анонимные типы
- •Заметки
- •Свойства
- •Результат
- •Общие сведения о свойствах
- •Использование свойств
- •Метод доступа get
- •Метод доступа set
- •Заметки
- •Пример 1 Описание
- •Результат 1 Employee number: 101 Employee name: Claude Vige
- •Пример 2 Описание
- •Результат 2
- •Рассмотрение кода
- •Пример 3 Описание
- •Введенные данные
- •Результат 3
- •Свойства интерфейса
- •Пример результатов выполнения
- •Асимметричные методы доступа
- •Ограничения модификаторов доступа в методах доступа
- •Модификаторы доступа в переопределяющих методах доступа
- •Реализация интерфейсов
- •Домен доступности к методу доступа
- •Результат
- •Примечания
- •Объявление и использование свойств чтения и записи
- •Надежное программирование
- •Автоматически реализуемые свойства
- •Реализация облегченного класса с автоматически реализуемыми свойствами
- •Индексаторы
- •Общие сведения об индексаторах
- •Использование индексаторов
- •Заметки
- •Пример 1 Описание
- •Индексирование с использованием других значений
- •Пример 2 Описание
- •Результат
- •Надежное программирование
- •Индексаторы в интерфейсах
- •Результат
- •Сравнение свойств и индексаторов
- •Делегаты
- •Общие сведения о делегатах
- •Использование делегатов
- •Делегаты с именованными методами и делегаты с анонимными методами
- •Заметки
- •Пример 1
- •Результат
- •Пример 2
- •Результат
- •Использование делегатов вместо интерфейсов
- •Ковариация и контрвариация в делегатах
- •Пример 1 (ковариация) Описание
- •Пример 2 (контрвариация) Описание
- •Объединение делегатов (многоадресные делегаты)
- •Объявление, создание экземпляра и использование делегата
- •Надежное программирование
- •События
- •Общие сведения о событиях
- •Подписка и отмена подписки на события
- •Подписка на события в среде ide Visual Studio
- •Подписка на события программными средствами
- •Подписка на события при помощи анонимного метода
- •Отмена подписки
- •Отмена подписки на событие
- •Публикация событий, соответствующих рекомендациям .Net Framework
- •Порядок публикации событий, основанных на шаблоне EventHandler
- •Создание событий базового класса в производных классах
- •Вызов и прием событий
- •Реализация событий интерфейса
- •Реализация событий интерфейса в классе
- •Пример44
- •Использование словаря для хранения экземпляров событий
- •Универсальные шаблоны
- •Общие сведения об универсальных шаблонах
- •Введение в универсальные шаблоны
- •Преимущества универсальных шаблонов
- •Параметры универсального типа
- •Рекомендации по именованию параметра типа
- •Пространства имен
- •Общие сведения о пространствах имен
- •Использование пространств имен
- •Доступ к пространствам имен
- •Псевдонимы пространств имен
- •Использование пространств имен для управления областью действия
- •Полные имена
- •Использование квалификатора псевдонима пространства имен
- •Типы, допускающие значения null
- •Общие сведения о типах, допускающих значения null
- •Использование типов, допускающих значение null
- •Примеры допускающих значение null типов
- •Члены допускающих значение null типов
- •Явные преобразования
- •Неявные преобразования
- •Операторы
- •Оператор ??
- •Идентификация типа, допускающего значение null
- •Небезопасный код и указатели
- •Общие сведения о небезопасном коде
- •Буферы фиксированного размера
- •Заметки
- •Типы указателей45
- •Преобразования указателей
- •Неявные преобразования указателей
- •Явные преобразования указателей
- •Результат
- •Выражения указателей Получение значения переменной указателя
- •Получение адреса переменной
- •Доступ к члену с использованием указателя
- •Доступ к элементу массива с использованием указателя
- •Управление указателями Увеличение и уменьшение указателей
- •Арифметические операции над указателями
- •Сравнение указателей
- •Использование указателей для копирования массива байтов
- •Комментарии xml-документации
- •Рекомендуемые теги для комментариев документации
- •Использование xml-документации
- •Компиляция кода
- •Надежное программирование
- •Домены приложений
- •Общие сведения о доменах приложений
- •Выполнение кода в другом домене приложения
- •Сборки и глобальный кэш сборок
- •Общие сведения о сборках
- •Атрибуты
- •Общие сведения об атрибутах
- •Использование атрибутов
- •Общие атрибуты
- •Заметки
- •Использование нескольких идентификаторов
- •Атрибут Obsolete
- •Глобальные атрибуты
- •Исключения и обработка исключений
- •Общие сведения об исключениях
- •Использование исключений
- •Обработка исключений
- •Блоки catch
- •Блоки finally
- •Создание и генерация исключений
- •Чего следует избегать при генерации исключений
- •Определение классов исключений
- •Исключения, создаваемые компилятором
- •Обработка исключений с помощью блока try-catch
- •Примечания
- •Выполнение кода очистки с использованием блока finally
- •Взаимодействие
- •Использование вызова неуправляемого кода для воспроизведения звукового файла
- •Компиляция кода Чтобы скомпилировать этот код, выполните следующие действия47
- •Создание потоков
- •Общие сведения
- •Использование потоков
- •Синхронизация потоков
- •Ключевое слово lock
- •Мониторы
- •События синхронизации и дескрипторы ожидания
- •Мьютексные объекты
- •Создание и завершение потоков
- •Синхронизация потока-производителя и потока-потребителя
- •Использование пула потоков
- •Отражение
- •Общие сведения об отражении
- •Библиотеки c#
- •Создание и использование библиотек dll на языке c#
- •Выполнение
- •Результат
- •Компиляция кода
- •Безопасность
- •Рекомендации по безопасности, касающиеся языка c# в отдельности
- •Использование неуправляемых функций dll
- •Применение экспортированных функций dll
- •Подробный обзор вызова неуправляемого кода
- •Идентификация функций в библиотеках dll
- •Создание класса, содержащего функции dll
- •Создание прототипов в управляемом коде
- •Основы описания
- •Настройка описания
- •Задание точки входа
- •Вызов функции dll
- •Передача структур
- •Объявление и передача структур
- •Объявление и передача классов
- •Файловый и потоковый ввод-вывод
- •Основы файлового ввода-вывода
- •Классы, используемые в файловом вводе и выводе
- •Классы, используемые для чтения и записи в поток
- •Общие классы потокового ввода и вывода
- •Ввод-вывод и безопасность
- •Создание списка каталогов
- •Надежное программирование
- •Считывание из нового файла данных и запись в этот файл
- •Надежное программирование
- •Копирование каталогов
- •Открытие файла журнала и добавление в него данных
- •Запись текста в файл
- •Считывание текста из файла
- •Надежное программирование
- •Считывание символов из строки
- •Результат
- •Запись символов в строку
- •Надежное программирование
- •Добавление или удаление записей списка управления доступом
- •Чтобы добавить или удалить элемент списка управления доступом из файла
- •Чтобы добавить или удалить элемент acl из каталога
- •Компиляция кода
- •Сжатие файлов
- •Создание потоков
- •Создание класса Writer
- •Коллекции и структуры данных
- •Определение коллекций
- •Выбор класса коллекции
- •Знакомство с решениями, проектами и элементами
- •Контейнеры: проекты и решения
- •Элементы: файлы, ссылки, подключения к данным
- •Решения как контейнеры
- •Решения
- •Преимущества
- •Файлы определения
- •Проекты как контейнеры
- •Шаблоны проектов
- •Файлы проекта
- •Элементы проектов
- •Использование интегрированной среды разработки Visual c#
- •Введение в интегрированную среду разработки
- •Средства Visual c#
- •Доступ к средствам в интегрированной среде разработки
- •Окна редактора и конструктора форм Windows
- •Обозреватель решений и конструктор проектов
- •Окна компилятора, отладчика и списка ошибок
- •Настройка интегрированной среды разработки
- •Создание проекта
- •Создание нового проекта
- •Состав проекта Свойства
- •Ресурсы
- •Другие файлы исходного кода
- •Изменение свойств проекта
- •Создание пользовательского интерфейса
- •Добавление элементов управления
- •Задание свойств
- •Обработка событий
- •Редактирование кода
- •Списки завершения
- •Краткие сведения
- •Список членов
- •Сведения о параметрах
- •Добавление директив using
- •Оптимизация кода
- •Фрагменты кода
- •Подчеркивание волнистой линией
- •Средства обеспечения удобочитаемости кода Форматирование кода
- •Структура
- •Выделение цветом
- •Навигация и поиск
- •Представление классов
- •Навигация ctrl-tab
- •Панели переходов
- •Поиск в файлах
- •Обозреватель объектов
- •Стеки навигации
- •Построение и отладка
- •Параметры построения
- •Ошибки построения
- •Сравнение отладочной и выпускной конфигураций
- •Отладка
- •Моделирование и анализ кода
- •Конструктор классов
- •Обозреватель объектов
- •Метаданные как источник
- •Анализ управляемого кода
- •Добавление и редактирование ресурсов
- •Добавление ресурсов в проекты
- •Редактирование ресурсов
- •Компиляция ресурсов в сборки
- •Доступ к ресурсам во время выполнения
- •Получение справки
- •Локальная справка и справка в Интернете
- •Поиск по f1
- •Указатель
- •Содержание
- •Инструкции
- •Динамическая справка
- •Примеры
- •Оптимизация
- •Многопроектная оптимизация
- •Диалоговое окно "Предварительный просмотр изменений"
- •Допускающая наличие ошибок оптимизация
- •Извлечение метода
- •Оптимизация кода с помощью операции "извлечение метода"
- •Чтобы воспользоваться операцией "извлечение метода"
- •Переименовать
- •Операции переименования
- •Переименование идентификаторов
- •Чтобы переименовать идентификатор
- •Превращение локальной переменной в параметр
- •Заметки
- •Превращение локальной переменной в параметр
- •Чтобы выполнить превращение локальной переменной в параметр
- •Разметка кода цветом
- •Лексемы
- •Контекстные ключевые слова
- •Разметка цветом для обозначения парности фигурных скобок
- •Разметка цветом и жирным шрифтом
- •Разметка цветом и выделение цветным фоном
Escape-знаки
Большинство основных операторов языка регулярных выражений — это одиночные знаки без escape-знака. Escape-знак "\" (одиночная обратная косая черта) указывает модулю обработки регулярных выражений, что следующий за ним знак не является оператором. Например, звездочка (*) интерпретируется модулем обработки как квантор повторения, а звездочка, перед которой стоит знак обратной косой черты (\*), — как знак Юникода 002A.
Escape-знаки, перечисленные в следующей таблице, распознаются как в регулярных выражениях, так и в шаблонах замены.
Escape-знак |
Описание |
Обычные знаки |
Все знаки, кроме ".", "$", "^", "{", "[", "(", "|", ")", "*", "+", "?" и "\" соответствуют сами себе. |
\a |
Соответствует знаку колокольчика (будильника) \u0007. |
\b |
Соответствует символу BACKSPACE \u0008, если находится в классе знаков []. В других случаях см. примечание после этой таблицы. |
\t |
Соответствует знаку табуляции \u0009. |
\r |
Соответствует знаку возврата каретки \u000D. |
\v |
Соответствует знаку вертикальной табуляции \u000B. |
\f |
Соответствует знаку перевода страницы \u000C. |
\n |
Соответствует знаку новой строки \u000A. |
\e |
Соответствует escape-знаку \u001B. |
\040 |
Соответствует знаку ASCII как восьмеричному числу (до трех разрядов). Числа, начинающиеся не с нуля, представляют собой обратные ссылки, если они состоят из одной цифры или соответствуют номеру собираемой группы. Например, знак \040 соответствует пробелу. |
\x20 |
Matches an ASCII character using hexadecimal representation (exactly two digits). |
||
\cC |
Matches an ASCII control character; for example, \cC is control-C. |
||
\u0020 |
Matches a Unicode character using hexadecimal representation (exactly four digits).
|
||
\ |
When followed by a character that is not recognized as an escaped character, matches that character. For example, \* is the same as \x2A. |
||
Note: |
|||
The escaped character \b is a special case. In a regular expression, \b denotes a word boundary (between \w and \W characters) except within a [] character class, where \b refers to the backspace character. In a replacement pattern, \b always denotes a backspace. |
\x20 |
Соответствует знаку ASCII в шестнадцатеричном представлении (строго две цифры). |
||
\cC |
Соответствует управляющему знаку ASCII. Например, \cC — CTRL+C. |
||
\u0020 |
Соответствует знаку Юникода в шестнадцатеричном представлении (строго четыре цифры).
|
||
\ |
Со следующим знаком, который не распознается как escape-знак, соответствует этому знаку. Например, \* совпадает с \x2A. |
||
Примечание. |
|||
Escape-знак \b — исключение. В регулярных выражениях \b обозначает границу слова (между знаками \w и \W), за исключением случая внутри класса знаков [], где \b указывает на знак BACKSPACE. В шаблоне подстановки \b всегда означает BACKSPACE. |
How to: Perform String Manipulations by Using Basic String Operations
The following example uses some of the methods discussed in the Basic String Operations topics to construct a class that performs string manipulations in a manner that might be found in a real-world application. The MailToData class stores the name and address of an individual in separate properties and provides a way to combine the City, State, and Zip fields into a single string for display to the user. Furthermore, the class allows the user to enter the city, state, and ZIP Code information as a single string; the application automatically parses the single string and enters the proper information into the corresponding property.
For simplicity, this example uses a console application with a command-line interface.
Example
using System;
class MainClass { static void Main(string[] args) { MailToData MyData = new MailToData();
Console.Write("Enter Your Name:"); MyData.Name = Console.ReadLine(); Console.Write("Enter Your Address:"); MyData.Address = Console.ReadLine(); Console.Write( "Enter Your City, State, and ZIP Code separated by spaces:"); MyData.CityStateZip = Console.ReadLine(); Console.WriteLine("Name: {0}", MyData.Name); Console.WriteLine("Address: {0}", MyData.Address); Console.WriteLine("City: {0}", MyData.City); Console.WriteLine("State: {0}", MyData.State); Console.WriteLine("Zip: {0}", MyData.Zip);
Console.WriteLine("The following address will be used:");
Console.WriteLine(MyData.Address); Console.WriteLine(MyData.CityStateZip); } } |