Основы объектно-ориентированного программирования на языке C# book | Page 74
5 Типи даних
Для числових типiв ( sbyte , short , int , long , byte , ushort , uint ,
ulong , float , double , decimal ) неявне перетворення з типу A до типу
B передбачено, якщо дiапазон B бiльший за дiапазон A. Якщо дi-
апазон B менший за дiапазон A, то передбачене явне перетворення
типу. Операцiю (B )X, де В є числовим типом та Х має числовий
тип, необов’язково, але можна застосовувати i в тому випадку, коли
передбачене неявне перетворення типiв, наприклад:
long a = (long)5;
В загальному випадку, при явному перетвореннi значення типу A
до типу B, який має менший дiапазон нiж A, можливе виникнення
помилки пiд час виконання програми або втрата iнформацiı̈.
Наприклад, у фрагментi, наведеному нижче, вiдбувається втрата
iнформацiı̈ при перетвореннi:
long a = 5000000000; // число поза межами дiапазону int
int x;
x = (int)a; // явне перетворення long в int, але
// х не може мiстити те число, що мiститься в a
Console.WriteLine(x); // невизначений результат
Якщо такий фрагмент помiстити у спецiальний блок checked , як
вказано нижче, то виконання недопустимого перетворення значень
числових типiв буде призводити до помилки пiд час виконання про-
грами (що дозволяє програмiсту знайти iнструкцiю, яка ı̈ı̈ викликає):
checked {
long a = 5000000000; // значення поза межами дiапазону int
int x;
x = (int)a; // при виконаннi програми в цьому мiсцi
// вiдбувається помилка
Console.WriteLine(x);
}
Також, передбаченi явнi перетворення з числових типiв до char та
навпаки:
int a = 65; // код символу A
char x = (char)a; // явне перетворення на значення типу char
Console.WriteLine(x); // виводить символ A
byte y = (byte)x; // явне перетворення char до byte
// в загальному випадку можлива помилка/втрата
// iнформацiї, якщо код x поза межами
// дiапазону byte (0..255), але в нашому
// випадку перетворення допустиме
Console.WriteLine(y); // виводить число 65
Без введення промiжних змiнних код можна записати так:
Console.WriteLine((char)65); // виводить символ A
Console.WriteLine((byte)(char)65); // виводить число 65
74