
- •Массивы
- •Массивы в .NET — наследуются от класса Array из библиотеки классов.
- •Все следующие варианты неверны:
- •Можно проинициализировать элементы массива сразу при объявлении (заменяет new).
- •Синтаксис обобщенного объявления N-мерного массива :
- •Пример: присвоить одно и то же значение сразу нескольким переменным:
- •В результате:
- •Преобразование типа в операциях присваивания
- •При присваивании одного типа данных переменной другого типа автоматическое преобразование типа происходит, если
- •Пример - выполняемое преобразование допустимо, т.к. преобразование данных типа long в double является
- •Следовательно, такая последовательность операторов приводит к недопустимому преобразованию:
- •Выполнение операции приведения типа между несовместимыми типами данных
- •Пример использования операции приведения типа.
- •Результат выполнения программы : Целая часть выражения x/y равна: 3 Значение переменной b
- •Преобразование типов в выражениях
- •Действует алгоритм:
- •uint, а второй операнд - тип sbyte, short или int, то оба операнда
- •Смысл последнего правила –
- •Автоматическое преобразование типов применяется к значениям (операндам) только тогда, когда выражение вычисляется:
- •byte b;
- •Аналогично с данными типа char: необходимо выполнить приведение типа результата вычисления выражения обратно
- •Приведение типов применяется не только для преобразования типов при присваивании.
- •Имеет место также преобразование типов в выражениях с унарными операторами (например, унарный минус).
- •Синтаксис спецификаторов формата обычно выглядит так:
- •Позиция спецификатора формата в форматирующей строке указывает место, где на экране будут выведены
- •Можно задать минимальную ширину поля:

Автоматическое преобразование типов применяется к значениям (операндам) только тогда, когда выражение вычисляется:
если внутри выражения значение переменной
типа byte преобразуется к типу int,
то за пределами выражения переменная сохраняет
тип byte.
Автоматическое преобразование типа может привести к неожиданному результату.
Пример - проводится арифметическая операция с двумя значениями типа byte:
вначале операнды byte преобразуются к типу int,
затем вычисляется выражение, результат
которого тоже будет иметь тип int.
Результат операции над двумя значениями byte будет иметь тип int.
21

byte b;
int i;
b = 10;
i = b * b;
// В данном случае не требуется явное приведение типа.
b = 10;
b = (byte) (b * b);
//Тип результата нужно привести к типу переменной b.
Приведения типов не требуется, когда результат вычисления выражения b * b присваивается переменной i - переменная b автоматически преобразуется к типу int при вычислении выражения.
Но чтобы присвоить результат вычисления выражения b * b переменной b, необходимо выполнить операцию приведения типа обратно в тип byte!
22

Аналогично с данными типа char: необходимо выполнить приведение типа результата вычисления выражения обратно к типу char –
в выражении переменные ch1 и ch2 преобразуются в тип int:
char ch1 = 'a', ch2 = 'b';
ch1 = (char) (ch1 + ch2);
Без приведения типа результат сложения значений переменных
ch1 и ch2 имеет тип int и не может быть присвоен переменной типа char.
23

Приведение типов применяется не только для преобразования типов при присваивании.
Пример: для получения дробной части значения выражения результат приводится к типу double,
Без операции приведения он имел бы тип int и дробная часть была бы утеряна.
int i;
for(i = 0; i < 5; i++)
{
Console.WriteLine("Целочисленный результат вычисления “
+i+"/3: " + i / 3);
Console.WriteLine("Результат вычисления, выводимый" +
"с дробной частью: {0:#.##}",(double) i / 3);
}
24

Имеет место также преобразование типов в выражениях с унарными операторами (например, унарный минус).
Для унарных операций операнды, у которых диапазон допустимых значений меньше, чем у int
(такие, как byte, sbyte, short и ushort), преобразуются к типу int.
Операнд типа char также преобразуется к типу int.
Если операнду типа uint присваивается отрицательное значение, он преобразуется к типу long.
Форматирование вывода
Для форматирования числовых данных используется перегруженный метод WriteLine(),
одним из параметров которого - информация о формате.
Синтаксис этого метода:
WriteLine("форматирующая строка", arg0, arg1, ... , argN);
!! аргументы разделены запятыми, а не знаками плюс.
Форматирующая строка состоит из
стандартных выводимых без изменения символов и
спецификаторов формата.
25

Синтаксис спецификаторов формата обычно выглядит так:
{argnum, width: fmt}
argnum указывает номер аргумента
(начиная с 0), который должен быть выведен на экран в данном месте строки.
width определяет минимальную ширину поля, предоставляемого данному аргументу.
fmt специфицирует используемый формат вывода.
Если выводимое число меньше заданной ширины поля, то неиспользованные части поля заполняются пробелами.
Если для вывода числа потребуется большее количество позиций, они будут выделены автоматически.
26

Позиция спецификатора формата в форматирующей строке указывает место, где на экране будут выведены соответствующие данные.
Элементы width и fmt являются не обязательными.
В простейшей форме спецификатор формата указывает выводимый аргумент.
спецификатор {0} указывает на аргумент arg0,
спецификатор {1} указывает на аргумент arg1 и так далее.
Пример:
Console.WriteLine("В феврале {0} или {1} дней",28, 29);
выведет на экран следующую строку:
В феврале 28 или 29 дней
27

Можно задать минимальную ширину поля:
Console.WriteLine("В феврале {0,10} или {1,5} дней", 28, 29);
В основном форматируют значения
с плавающей точкой и значения типа decimal.
Простейший способ спецификации формата - написание шаблона, который будет использован методом WriteLine() при форматировании.
Шаблон создается так:
в спецификаторе формата указывается номер аргумента,
затем после двоеточия при помощи символа # указываются позиции выводимых цифр.
после выполнения оператора
Console.WriteLine("10/3 = {0:#.##}", 10.0/3.0);
программа выведет результат деления 10.0 на 3.0,
10/3 = 3.33
Если программой выводится число, у которого целая часть более одного знака, метод WriteLine() будет выводить более одной цифры слева от запятой (во избежание потери данных).
28