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

При присваивании одного типа данных переменной другого типа автоматическое преобразование типа происходит, если
два типа данных совместимы;
конечный тип (слева) больше исходного типа (справа).
При выполнении двух этих условий происходит расширяющее преобразование.
Смысл прост: например,
количества битов, выделенных для int, всегда достаточно для хранения всех значений byte,
поскольку оба эти типа целочисленные, к ним может быть применено автоматическое преобразование.
С точки зрения возможности выполнения расширяющих преобразований все числовые типы, включая целочисленные данные и
данные с плавающей точкой, являются совместимыми.
11

Пример - выполняемое преобразование допустимо, т.к. преобразование данных типа long в double является расширяющим и выполняется автоматически.
long L;
double D;
L = 100123285L;
D = L;
Хотя существует автоматическое преобразование типа переменной из long в double,
обратное автоматическое преобразование осуществить нельзя, поскольку оно не будет расширяющим.
12

Следовательно, такая последовательность операторов приводит к недопустимому преобразованию:
long L;
double D;
D = 100123285.0;
L = D;
Не существует автоматического преобразования
между типами decimal и float или double;
переменных числового типа в переменные типа char или bool.
переменные типов char и bool также несовместимы друг с другом.
13

Выполнение операции приведения типа между несовместимыми типами данных
Приведение типа - это инструкция компилятору для преобразования одного типа данных в другой.
Операция приведения типа имеет синтаксис:
(type) expression
Пример - преобразование выражения x/y, входящего в состав некоторого оператора, к типу int:
double x, y;
…(int) (x/y)…
14

Пример использования операции приведения типа.
double x, y;
byte b;
int i;
char ch;
x = 10.0;
y = 3.0;
i = (int) (x/y);
// Выражение, имеющее тип double, приводится к типу int
Console.WriteLine("Целая часть выражения x/y равна: " + i);
i = 100;
b = (byte) i;
Console.WriteLine("Значение переменной b равно: " + b);
i = 257;
b = (byte) i;
Console.WriteLine("Значение переменной b равно: " + b);
b = 88; // Значение ASCII-кода для символа X (англ).
ch = (char) b;
Console.WriteLine("ch: " + ch);
15

Результат выполнения программы : Целая часть выражения x/y равна: 3 Значение переменной b равно: 100 Значение переменной b равно: 1
ch: X
Комментарии
приведение результата вычисления выражения (x / y) к типу int приводит к отбрасыванию дробной части и потере информации,
когда переменной b присваивается значение 100, информация не теряется - это значение находится в диапазоне допустимых значений, определенных для типа byte.
при попытке присвоить переменной b значение 257 происходит потеря информации, потому что число 257 превышает максимально допустимое значение, определенное для типа byte,
при присваивании значения типа byte переменной типа char информация не теряется, поскольку используется приведение типа.
16

Преобразование типов в выражениях
В пределах выражения есть возможность совмещения различных типов данных при условии, что они являются совместимыми.
Например, можно совмещать в выражении данные типа short и long, поскольку оба эти типа являются числовыми.
Если в выражении совмещаются различные типы данных, они преобразуются в один и тот же тип на основе
алгоритма пошагового преобразования
(то есть в соответствии с приоритетностью выполнения операций).
Преобразования выполняются по принятым в C# правилам автоматического преобразования типов в выражениях.
17

Действует алгоритм:
Если один операнд имеет тип
decimal, то второй операнд автоматически преобразуется к типу decimal (за исключением случаев, когда он имеет тип float или double; в этом случае произойдет ошибка).
double, второй операнд автоматически преобразуется к типу double.
float, второй операнд автоматически преобразуется к типу float.
ulong, второй операнд автоматически преобразуется к типу ulong (за исключением случаев, когда он имеет тип sbyte, short, int или long; в этих случаях произойдет ошибка).
long, второй операнд автоматически преобразуется к типу long.
18

uint, а второй операнд - тип sbyte, short или int, то оба операнда автоматически преобразуются к типу long.
uint, второй операнд автоматически преобразуется к типу uint.
Если ни одно из вышеуказанных правил не применялось, оба операнда преобразуются к типу int.
Внимание!
Не все типы данных могут совмещаться в выражениях
невозможно автоматическое преобразование данных типа float или double в тип decimal
невозможно совмещение данных типа ulong с
любым другим типом знаковых целочисленных
данных).
Совмещение этих типов требует использования операции явного приведения типа.19

Смысл последнего правила –
все значения, имеющие тип char, sbyte, byte, ushort и short, в выражении преобразуются к типу int для выполнения вычислений.
Такая процедура называется автоматическим преобразованием к целочисленному типу.
Это также означает, что результат всех математических операций будет иметь тип, которому для хранения значения выделено не меньше битов, чем типу int.
20