русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Преобразование встроенных типов


Дата добавления: 2013-12-23; просмотров: 933; Нарушение авторских прав


Упаковка и распаковка

В С# предусмотрен очень простой механизм для преобразования структурного типа в ссылочный. Он получил название упаковки (boxing). Пусть у нас переменная простого структурного типа данных – short.

 

short s = 25;

object objShort =s; //упаковываем

 

При этом в управляемой куче создается новый объект и в него копируются внутренние данные старого объекта из стека.

Противоположная операция назвывается распаковкой (unboxing). Распаковка это преобразование ссылки на объект в оперативной памяти обратно в сруктурный тип. Перед выполнением распаковки среда выполнения производит проверку на совместимость между типом объекта в оперативной памяти и тем структурным типом, в который будет производится распаковка.

 

short anyShort = (short)objShort;

 

Если среда выполнения обнаружит, что производится распаковка в недопустимый тип данных, то будет сгенерировано исключение InvalidCastException.

 

object Back(object any){

return(any);

}

/// Неявное преобразование аргумента в тип object

/// Явное приведение типа результата.

public void BackTest() {

int x = 11;

uint ux = 1111;

float y = 5.5f;

string s = "Hello!";

string s1 = "25";

ux = (uint)Back(ux);

WhoIsWho("ux",ux);

s1 = (string)Back(s);

WhoIsWho("s1",s1);

x =(int)(uint)Back(ux);

WhoIsWho("x",x);

y = (float)(double)Back(11 + 5.55 + 5.5f);

WhoIsWho("y",y);

}

 

Объекты одного типа могут быть преобразованы в объекты другого типа неявно или явно. Неявные преобразования происходят автоматичес­ки, компилятор делает это вместо вас. Явные преобразования осуществ­ляются, когда вы сами «приводите» значение к другому типу. Неявные преоб­разования гарантируют также, что данные не будут потеряны. Напри­мер, вы можете неявно приводить от short (2 байта) к int (4 байта). Независимо от того, какой значение находится в short, оно не потеряется при преобразовании к int:



 

short x = 1 ;

int у = х; //неявное преобразование

 

Если вы делаете обратное преобразование, то, конечно же, можете потерять информацию. Если значение в int больше, чем 32767, оно будет усечено при преобразовании. Компилятор не станет выполнять неявное преобразование от int к short:

 

short х;

int у = 5;

х = у; //не скомпилируете

 

Вы должны выполнить явное преобразование, используя оператор приведения:

 

short х;

int у = 5;

х = (short) у; //OK

 

Рассмотрим преобразования для арифметических типов на схеме 1. Если на диаграмме задан путь (стрелками) от типа А к типу В, то это означает существование неявного преобразования из типа А в тип В. Все остальные преобразования между подтипами арифметического типа существуют, но являются явными.

 



<== предыдущая лекция | следующая лекция ==>
Встроенные типы | Переменные


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.