Основы объектно-ориентированного программирования на языке 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