
- •2. Основы языка c#
- •2.1. Основные элементы языка c#
- •2.1.1. Переменные и константы
- •2.1.2. Модификаторы доступа
- •2.1.3. Присваивание значений переменным
- •2.2. Типы данных
- •2.2.1. Значащие и ссылочные типы
- •2.2.2. Таблица типов данных
- •2.2.3. Приведение и преобразование типов
- •2.2.4. Совместимость типов
- •2.2.5. Методы преобразования типа
- •2.3. Общая структура программы на c#
- •Interface iYourInterface // определение интерфейса
- •2.3.1. Метод Main() и аргументы командной строки
- •2.3.2. Пространства имен
- •2.4. Выражения и операции
- •2.7. Методы класса System.Match
- •2.8. Методы класса System.Random
2.2.3. Приведение и преобразование типов
(http://msdn.microsoft.com/ru-ru/library/ms173105.aspx)
Примеры неявного преобразования:
int i = 0;
double d = 0;
i = 10;
d = i; // Неявное преобразование
Таблица 2.2. Неявные преобразования типов
Исходный тип |
Тип назначения |
sbyte |
short, int, long, float, double, decimal |
byte |
short, ushort, int, uint, long, ulong, float, double, decimal |
short |
int, long, float, double, decimal |
ushort |
int, uint, long, ulong, float, double, decimal |
int |
long, float, double, decimal |
uint |
long, ulong, float, double, decimal |
long |
float, double, decimal |
ulong |
float, double, decimal |
char |
ushort, int, uint, long, ulong, float, double, decimal |
float |
double |
Примеры явного преобразования:
int i = 0;
double d = 3.5;
i = (int) d; // Явное преобразование, или "приведение"
Таблица 2.3. Явные преобразования типов
Исходный тип |
Тип назначения |
sbyte |
byte, ushort, uint, ulong, char |
byte |
sbyte, char |
short |
sbyte, byte, ushort, uint, ulong, char |
ushort |
sbyte, byte, short, char |
int |
sbyte, byte, short, ushort, uint, ulong, char |
uint |
sbyte, byte, short, ushort, int, char |
long |
sbyte, byte, short, ushort, int, uint, ulong, char |
ulong |
sbyte, byte, short, ushort, int, uint, long, char |
char |
sbyte, byte, short |
float |
sbyte, byte, short, ushort, int, uint, long, ulong, char, decimal |
double |
sbyte, byte, short, ushort, int, uint, long, ulong, char, float, decimal |
decimal |
sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double |
2.2.4. Совместимость типов
Пример искажения результата или потери точности при явном преобразовании типов:
byte b1;
int in1 = 1, in2 = 2, in3 =1000;
b1 = in1 + in2; // Ошибка! Тип int несовместим с типом byte
b1 = (byte)(in1 + in2); // Правильное преобразование
Console.WriteLine(b1); // Вывод: 3
b1 = (byte)(in3 + in2);
Console.WriteLine(b1); // Вывод: 234
2.2.5. Методы преобразования типа
Таблица 2.4. Основные методы класса System.Convert (http://msdn.microsoft.com/ru-ru/library/system.convert_methods.aspx)
Метод |
Описание |
ChangeType(V,T); |
Возвращает объект (Object) указанного типа (T) и эквивалентное указанному объекту (V) значение. |
FromBase64CharArray (arrCh[],i,L); |
Преобразует подмножество массива символов Unicode 64-разрядной платформы в эквивалентный массив 8-битовых целых чисел без знака. Параметры метода определяют подмножество входного массива (arrCh) и число преобразуемых элементов (L), начиная с индекса i. |
FromBase64String(s); |
Преобразует указанную строку (s) 64-разрядной платформы в эквивалентный массив 8-битных целых чисел без знака. |
IsDBNull(V); |
Возвращает значение, указывающее, имеет ли заданный объект (V) тип DBNull. |
ToBase64CharArray (arrByte[],i1,L, arrCh[],i2); |
Преобразует подмножество (L элементов, начиная с i1-го) массива 8-битных целых чисел без знака (arrByte) в эквивалентное подмножество (начиная с i2-го элемента) массива символов (arrCh) Unicode 64-разрядной платформы. Возвращает целое число со знаком (Int32), представляющее число байтов в выходном массиве (arrCh). |
ToBase64String (arrByte[]); ToBase64String (arrByte[],i,L); |
Преобразует значения всего или подмножества (L элементов, начиная с i-го) массива 8-битовых целых чисел без знака (arrByte) в эквивалентное строковое представление 64-разрядной платформы. |
ToBoolean(V); |
Преобразует указанное значение (числового типа) в логическое (Boolean). Возвращает true – если V <> 0, и false – если V = 0. |
ToByte(V); |
Преобразует указанное значение в 8-битное целое число без знака (Byte). |
ToChar(V); |
Преобразует указанное значение в символ Unicode (Char). |
ToDateTime(V); |
Преобразует указанное значение в значение даты или времени (DateTime). |
ToDecimal(V); |
Преобразует указанное значение в число типа Decimal. |
ToDouble(V); |
Преобразует указанное значение в вещественное число двойной точности (Double). |
ToInt16(V); |
Преобразует указанное значение в 16-битное целое число (Int16). |
ToInt32(V); |
Преобразует указанное значение в 32-битное целое число (Int32). |
ToInt64(V); |
Преобразует указанное значение в 64-битное целое число (Int64). |
ToSByte(V); |
Преобразует указанное значение в 8-битное целое число (SByte). |
ToSingle(V); |
Преобразует указанное значение в вещественное число одинарной точности (Single). |
ToString(V); |
Преобразует указанное значение в его строковое представление (String). |
ToUInt16(V); |
Преобразует указанное значение в 16-битное целое число без знака (UInt16). |
ToUInt32(V); |
Преобразует указанное значение в 32-битное целое число без знака (UInt32). |
ToUInt64(V); |
Преобразует указанное значение в 64-битное целое число без знака (UInt64). |