- •Введение Обзор .Net. Основные понятия
- •Программа на c#
- •Основы языка Пространство имён
- •Система типов
- •Класс и Структура. Первое приближение
- •Литералы. Представление значений
- •Арифметические литералы
- •Логические литералы
- •Символьные литералы
- •Символьные escape-последовательности
- •Строковые литералы
- •Операции и выражения
- •Приоритет операций
- •Приведение типов
- •Особенности выполнения арифметических операций
- •Особенности арифметики с плавающей точкой
- •Константное выражение
- •Переменные элементарных типов. Объявление и инициализация
- •Константы
- •Перечисления
- •Объявление переменных. Область видимости и время жизни
- •Управляющие операторы
- •Синтаксис объявления метода
- •Вызов метода
- •Перегрузка методов
- •Способы передачи параметров при вызове метода
- •Передача параметров. Ссылка и ссылка на ссылку как параметры
- •Сравнение значений ссылок
- •This в нестатическом методе
- •Свойства
- •Обработка исключений
- •Массив. Объявление
- •Инициализация массивов
- •Примеры инициализации массивов
- •Два типа массивов: Value Type and Reference Type
- •Встроенный сервис по обслуживанию простых массивов
- •Реализация сортировки в массиве стандартными методами
- •Подробнее о массивах массивов (jagged array)
- •Массивы как параметры
- •Спецификатор params
- •Main в классе. Точка входа
- •Создание объекта. Конструктор
- •Операция new
- •В управляемой памяти нет ничего, что бы создавалось без конструктора
- •Кто строит конструктор умолчания
- •This в контексте конструктора
- •Перегрузка операций
- •Синтаксис объявления операторной функции
- •Унарные операции. Пример объявления и вызова
- •Бинарные операции
- •Определение операций конъюнкция и дизъюнкции
- •И вот результат…
- •Пример. Свойства и индексаторы
- •Explicit и implicit. Преобразования явные и неявные
- •Наследование
- •Наследование и проблемы доступа
- •Явное обращение к конструктору базового класса
- •Кто строит базовый элемент
- •Переопределение членов базового класса
- •Наследование и new модификатор
- •Полное квалифицированное имя. Примеры использования
- •Прекращение наследования. Sealed спецификатор
- •Абстрактные функции и абстрактные классы
- •Ссылка на объект базового класса
- •Операции is и as
- •Виртуальные функции. Принцип полиморфизма
- •Интерфейсы
- •Делегаты
- •События
- •События и делегаты. Различия
- •Атрибуты, сборки, рефлексия Рефлексия (отражение) типов
- •Реализация отражения. Type, InvokeMember, BindingFlags
- •Атрибуты
- •Сборка. Класс Assembly
- •Класс сборки в действии
- •Разбор полётов
- •Класс System.Activator
- •Версия сборки
- •Файл конфигурации приложения
- •Общедоступная сборка
- •Игры со сборками из gac
- •Динамические сборки
- •Динамическая сборка: создание, сохранение, загрузка, выполнение
- •Ввод-вывод Базовые операции
- •Потоки: байтовые, символьные, двоичные
- •Предопределённые потоки ввода-вывода
- •Функция ToString()
- •Консольный ввод-вывод. Функции-члены класса Console
- •Консольный вывод. Форматирование
- •Функции вывода. Нестандартное (custom) форматирование значений.
- •Консольный ввод. Преобразование значений
- •Файловый ввод-вывод
- •Потоки Процесс, поток, домен
- •Домен приложения
- •Обзор пространства имён System.Threading
- •Многопоточность
- •Виды многопоточности
- •А кто в домене живёт…
- •Класс Thread. Общая характеристика
- •Именование потока
- •Игры с потоками
- •Характеристики точки входа дополнительного потока
- •Запуск вторичных потоков
- •Приостановка выполнения потока
- •Отстранение потока от выполнения
- •Завершение потоков
- •Метод Join()
- •Состояния потока (перечисление ThreadState)
- •Одновременное пребывание потока в различных состояниях
- •Фоновый поток
- •Приоритет потока
- •Передача данных во вторичный поток
- •Извлечение значений (данных) с помощью Callback методов
- •Организация взаимодействия потоков
- •1. Посредством общедоступных (public) данных
- •2. Посредством общедоступных (public) свойств
- •3. Посредством общедоступных очередей
- •Состязание потоков
- •Блокировки и тупики
- •Очереди. Основа интерфейса взаимодействия
- •Безопасность данных и критические секции кода
- •Пример организации многопоточного приложения
- •Очередь как объект синхронизации
- •Синхронизация работы потоков при работе с общими ресурсами
- •1. Организация критических секций
- •2. Специальные возможности мониторов
- •Рекомендации по недопущению блокировок потоков
- •Форма Класс Form
- •Форма: управление и события жизненного цикла
- •Форма: контейнер как элемент управления
- •Разница между элементами управления и компонентами.
- •Свойства элементов управления. Anchor и Dock
- •Extender providers. Провайдеры дополнительных свойств
- •Validating и Validated элементов управления
- •Управление посредством сообщений
- •Стандартный делегат
- •Делегат EventHandler
- •Класс Application
- •События класса Application
- •Примеры перехвата сообщений
- •Метод WndProc
- •Пример переопределения WndProc
- •Контекст приложения
- •Применение классов GraphicsPath и Region. Круглая форма
- •Собственные элементы управления
- •Литература
Функции вывода. Нестандартное (custom) форматирование значений.
В маркерах выражений вызова функций вывода могут также размещаться спецификаторы (custom format strings), реализующие возможности расширенного форматирования.
В приведенной ниже таблице представлены символы, используемые для создания настраиваемых строк числовых форматов.
Следует иметь в виду, что на выходные строки, создаваемые с помощью некоторых из этих знаков, влияют настройки компонента “Язык и региональные стандарты” панели управления объекта NumberFormatInfo, связанного с текущим потоком. Результаты будут различными на компьютерах с разными параметрами культуры.
Знак формата |
Имя |
Описание |
0 |
Знак-заместитель нуля |
Цифра, расположенная в соответствующей позиции форматируемого значения будет скопирована в выходную строку, если в этой позиции в строке формата присутствует “0”. Позиции крайних знаков «0» определяют знаки, всегда включаемые в выходную строку. Строка «00» приводит к округлению значения до ближайшего знака, предшествующего разделителю, если используется исключение из округления нуля. Например, в результате форматирования числа 34,5 с помощью строки «00» будет получена строка “35”. |
# |
Заместитель цифры |
Цифра, расположенная в соответствующей позиции форматируемого значения будет скопирована в выходную строку, если в этой позиции в строке формата присутствует знак “#”. В противном случае в эту позицию ничего не записывается. Обратите внимание, что ноль не будет отображен, если он не является значащей цифрой, даже если это единственный знак строки. Ноль отображается, только если он является значащей цифрой форматируемого значения. Строка формата “##” приводит к округлению значения до ближайшего знака, предшествующего разделителю, если используется исключение из округления нуля. Например, в результате форматирования числа 34,5 с помощью строки “##” будет получена строка «35». |
. |
Разделитель |
Первый знак “.” определяет расположение разделителя целой и дробной частей, дополнительные знаки “.” игнорируются. Отображаемый разделитель целой и дробной частей определяется свойством NumberDecimalSeparator объекта NumberFormatInfo. |
, |
Разделитель тысяч |
Знак “,” применяется в двух случаях. Во-первых, если знак “,” расположен в строке формата между знаками-заместителями (0 или #) и слева от разделителя целой и дробной частей, то в выходной строке между группами из трех цифр в целой части числа будет вставлен разделитель тысяч. Отображаемый разделитель целой и дробной частей определяется свойством NumberGroupSeparator текущего объекта NumberFormatInfo. Во-вторых, если строка формата содержит один или несколько знаков “,” сразу после разделителя целой и дробной частей, число будет разделено на 1000 столько раз, сколько раз знак “,” встречается в строке формата. Например, после форматирования строки “0,,” значение 100000000 будет преобразовано в “100”. Применение этого знака для масштабирования не включает в строку разделитель тысяч. Таким образом, чтобы разделить число на миллион и вставить разделители тысяч следует использовать строку формата “#,##0,,”. |
% |
Заместитель процентов |
При использовании этого знака число перед форматированием будет умножено на 100. В соответствующую позицию выходной строки будет вставлен знак “%”. Знак процента определяется текущим классом NumberFormatInfo. |
E0 E+0 E-0 e0 e+0 e-0 |
Научная нотация |
Если в строке формата присутствует один из знаков “E”, “E+”, “E-”, “e”, “e+” или “e-”, за которым следует по крайней мере один знак “0”, число представляется в научной нотации; между числом и экспонентой вставляется знак “E” или “e”. Минимальная длина экспоненты определяется количеством нулей, расположенных за знаком формата. Знаки “E+” и “e+” устанавливают обязательное отображение знака “плюс” или “минус” перед экспонентой. Знаки “E”, “e”, “E-” и “e-” устанавливают отображение знака только для отрицательных чисел. |
\ |
Escape-знак |
В языке C# и управляемых расширениях C++ знак, следующий в строке формата за обратной косой чертой, воспринимается как escape-последовательность. Этот знак используется с обычными последовательностями форматирования (например, \n — новая строка). Чтобы использовать обратную косую черту как знак, в некоторых языках ее необходимо удвоить. В противном случае она будет интерпретирована компилятором как escape-последовательность. Чтобы отобразить обратную косую черту, используйте строку “\\”. Обратите внимание, что escape-знак не поддерживается в Visual Basic, однако объект ControlChars обладает некоторой функциональностью. |
'ABC' "ABC" |
Строка букв |
Знаки, заключенные в одинарные или двойные кавычки, копируются в выходную строку без форматирования. |
; |
Разделитель секций |
Знак “;” служит для разделения секций положительных, отрицательных чисел и нулей в строке формата. |
Другие |
Все остальные знаки |
Все остальные знаки копируются в выходную строку в соответствующие позиции. |
Строки формата с фиксированной запятой (не содержащие подстрок “E0”, “E+0”, “E-0”, “e0”, “e+0” или “e-0”) ОКРУГЛЯЮТ значение с точностью, заданной количеством знаков-заместителей справа от разделителя целой и дробной частей.
Если в строке формата нет разделителя (точки), число округляется до ближайшего целого значения.
Если в целой части числа больше цифр, чем знаков-заместителей цифр, лишние знаки копируются в выходную строку перед первым знаком-заместителем цифры.
К строке может быть применено различное форматирование в зависимости от того, является ли значение положительным, отрицательным или нулевым. Для этого следует создать строку формата, состоящую из трех секций, разделенных точкой с запятой.
Одна секция. Строка формата используется для всех значений.
Две секции. Первая секция форматирует положительные и нулевые значения, вторая — отрицательные. Если число форматируется как отрицательное и становится нулем в результате округления в соответствии с форматированием, ноль форматируется в соответствии со строкой первой секции.
Три секции. Первая секция форматирует положительные значения, вторая — отрицательные, третья — нули. Вторая секция может быть пустой (две точки с запятой рядом), в этом случае первая секция будет использоваться для форматирования нулевых значений. Если число форматируется как ненулевое и становится нулем в результате округления в соответствии с форматированием, ноль форматируется в соответствии со строкой третьей секции.
При генерации выходной строки в этом типе форматирования не учитывается предыдущее форматирование. Например, при использовании разделителей секций отрицательные значения всегда отображаются без знака “минус”. Чтобы конечное форматированное значение содержало знак “минус”, его следует явным образом включить в настраиваемый указатель формата. В следующем примере демонстрируется применение разделителей секций для форматирования.
Следующий код демонстрирует использование разделителей секций при форматировании строки.
// Объявляются переменные с различными значения (положительное, отрицательное, нулевое)
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;
string MyString = MyPos.ToString(“$#,##0.00;($#,##0.00);Zero”);
// In the U.S. English culture, MyString has the value: $19.95.
MyString = MyNeg.ToString(“$#,##0.00;($#,##0.00);Zero”);
// In the U.S. English culture, MyString has the value: ($19.95).
MyString = MyZero.ToString(“$#,##0.00;($#,##0.00);Zero”);
// In the U.S. English culture, MyString has the value: Zero.
Следующая таблица иллюстрирует варианты представления выводимых значений в зависимости от используемых строк форматирования. Предполагается, что форматирование проводится в рамках ToString метода, а значения в столбце Формат соответствуют используемой строке форматирования.
В столбце Data type указывается тип форматируемого значения. В столбце Значение – значение, подлежащее форматированию. В столбце Вывод отображается результат форматирования строки для U.S. English параметров культуры.
Формат |
Data type |
Значение |
Вывод |
##### |
double |
123 |
123 |
00000 |
double |
123 |
00123 |
(###) ### - #### |
double |
1234567890 |
(123) 456 - 7800 |
#.## |
double |
1.2 |
1.2 |
0.00 |
double |
1.2 |
1.20 |
00.00 |
double |
1.2 |
01.20 |
#,# |
double |
1234567890 |
1,234,567,890 |
#,, |
double |
1234567890 |
12345 |
#,,, |
double |
1234567890 |
1 |
#,##0,, |
double |
1234567890 |
1,235 |
#0.##% |
double |
0.095 |
9.5% |
0.###E+0 |
double |
95000 |
9.5E+4 |
0.###E+000 |
double |
95000 |
9.5E+004 |
0.###E-000 |
double |
95000 |
9.5E004 |
[##-##-##] |
double |
123456 |
[12-34-56] |
##;(##) |
double |
1234 |
1234 |
##;(##) |
double |
-1234 |
(1234) |
И ещё один пример, демонструрующий custom number formatting.
Double myDouble = 1234567890;
String myString = myDouble.ToString( “(# ##) ### - ####” );
// The value of myString is “(123) 456 – 7890”.
int MyInt = 42;
MyString = MyInt.ToString( “My Number \n= #” );
// In the U.S. English culture, MyString has the value:
// «My Number
// = 42».