Примеры создания объектных образов и восстановления значений

Примеры создания объектных образов и восстановления значений

Вы, наверное, спросите, когда действительно бывает необходимо вручную выполнять преобразование в объектный тип (или восстановление из объектного образа)? Предыдущий пример был исключительно иллюстративным, поскольку в нем для данных short не было никакой реальной необходимости приведении к объектному типу (с последующим восстановлением данных из объектного образа).

Реальность такова, что необходимость вручную приводить данные к объектному типу возникает очень редко – если возникает вообще. В большинстве случаев компилятор C# выполняет такие преобразования автоматически. Например, при передаче типа, характеризуемого значением, методу, предполагающему получение объектного параметра, автоматически "в фоновом режиме" происходит приведение к объектному типу.

class Program {

 static void Main(string[] args) {

 // Создание значения int (тип, характеризуемый значением).

 int myInt = 99;

 // myInt передается методу, предполагающему

 // получение объекта, поэтому myInt приводится

 // к объектному типу автоматически.

 UseThisObject(myInt);

 Console.ReadLine();

}

static void UseThisObject(object o) {

 Console.WriteLine("Значением о является: {0}", о);}

}

Автоматическое преобразование в объектный тип происходит и при работе c типами библиотек базовых классов .NET. Например, пространство имен System.Collections (формально оно будет обсуждаться в главе 7) определяет тип класса с именем ArrayList. Подобно большинству других типов коллекций, ArrayList имеет члены, позволяющие вставлять, получать и удалять элементы.

public class System.Collections.ArrayList: object, System.Collections.IList, System.Collections.ICollection, System.Collections.IEnumerable, ICloneable {

 …

 public virtual int Add(object value);

 public virtual void Insert(int index, object value);

 public virtual void Remove(object obj);

 public virtual object this[int index] {get; set;}

}

Как видите, эти члены действуют на типы System.Object. Поскольку все, в конечном счете, получается из этого общего базового класса, следующий программный код оказывается вполне корректным.

static void Main(string [] args) {

 …

 ArrayList myInts = new ArrayList();

 myInts.Add(88);

 myInts.Add(3.33);

 myInts.Add(false);

}

Но теперь с учетом вашего понимания ссылочных типов и типов, характеризуемые значением, вы можете спросить: что же на самом деле размещается в ArrayList? (Ссылки? Копии ссылок? Копии структур?) Как и в случае, с рассмотренным выше методом UseThisObject(), должно быть ясно, что каждый из типов данных System.Int32 перед размещением в ArrayList в действительности приводится к объектному типу. Чтобы восстановить элемент из типа ArrayList, требуется выполнить соответствующую операцию восстановления.

static void BoxAndUnboxInts() {

 // "Упаковка" данных int в ArrayList.

 ArrayList myInts = new ArrayList();

 myInts.Add(88);

 myInts.Add(3.33);

 myInts.Add(false);

 // Извлечение первого элемента из ArrayList.

 int firstItem = (int)myInts[0];

 Console.WriteLine("Первым элементом является {0}", firstItem);

}

Без сомнения, операции приведения к объектному типу и восстановления из объектного образа требуют времени и, если эти операций использовать без ограничений, это может влиять на производительность приложения. Но с использованием такого подхода .NET вы можете симметрично работать с типами характеризуемыми значением, и со ссылочными типами.

Замечание. В C# 2.0 потери производительности из-за приведения к ссылочному типу и восстановления из объектного образа можно нивелировать путем использования обобщений (generics), которые будут рассмотрены в главе 10.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Запись CD/DVD из образов

Из книги Запись CD и DVD: профессиональный подход автора Бахур Виктор

Запись CD/DVD из образов Запустите программу Alcohol 120 %. В группе Основные операции выберите Запись CD/DVD из образов. Откроется Мастер записи дисков из образов (рис. 2.19). Работать с мастером можно, если на компьютере имеется хотя бы один файл-образ. Щелкнув на кнопке Обзор, вы


Примеры создания проектов с малыми архитектурными формами

Из книги Ландшафтный дизайн на компьютере автора Орлов Андрей Сергеевич

Примеры создания проектов с малыми архитектурными формами Познакомившись с элементами управления и алгоритмом работы в программе 3D Home Architect Design Suite Deluxe, перейдем к составлению проектов, содержащих элементы архитектуры малых форм.Проект с беседкой. Попробуем создать


Операции создания объектного образа и восстановления из объектного образа

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Операции создания объектного образа и восстановления из объектного образа Ввиду того, что в .NET определяются две главные категории типов (характеризуемые значением или ссылкой), может понадобиться представление переменной одной категории в виде переменной другой


Снова о создании объектных образов, восстановлении значений и System.Object

Из книги VBA для чайников автора Каммингс Стив

Снова о создании объектных образов, восстановлении значений и System.Object Чтобы понять, в чем заключаются преимущества использования обобщений, следует выяснить, какие проблемы возникают у программиста без их использования. Вы должны помнить из главы 3, что платформа .NET


Проблемы создания объектных образов и восстановления значений

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

Проблемы создания объектных образов и восстановления значений Операции создания объектных образов и восстановления из них значений очень удобны с точки зрении программиста, но такой упрощенный подход при обмене элементами стека и динамической памяти имеет свои


Проблемы создания объектных образов и строго типизованные коллекции

Из книги КОМПАС-3D для студентов и школьников. Черчение, информатика, геометрия автора Большаков Владимир

Проблемы создания объектных образов и строго типизованные коллекции Строго типизованные коллекции можно найти в библиотеках базовых классов .NET и это очень полезные программные конструкции. Однако эти пользовательские контейнеры мало помотают в решении проблем


Роль объектных графов

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

Роль объектных графов Как уже упоминалось, при сериализации объекта среда CLR учитывает состояния всех связанных объектов. Множество связанных объектов представляется объектным графом. Объектные графы обеспечивают простой способ учета взаимных связей в множестве


1.9. Запись ISO-образов

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

1.9. Запись ISO-образов Ранее Windows умела записывать только файлы на CD/DVD. Сейчас Windows 7 умеет записывать ISO-образы на болванки, причем поддерживается запись даже на диски Blu-Ray


Глава 5 Примеры трехмерного моделирования и создания ассоциативных чертежей

Из книги Windows 10. Секреты и устройство автора Алмаметов Владимир

Глава 5 Примеры трехмерного моделирования и создания ассоциативных чертежей В этой главе рассмотрены особенности выполнения четырех учебных заданий, в которых необходимо разработать чертежи деталей по их создаваемым трехмерным моделям. При синтезе моделей в эскизах


19.4. Загрузка с ISO-образов

Из книги автора

19.4. Загрузка с ISO-образов Предположим, вы скачали ISO-образ новой версии Ubuntu, но у вас нет «болванки», чтобы записать на нее образ и загрузиться с полученного диска. Могу вас обрадовать: «болванка» вам для этого не понадобится — GRUB2 умеет использовать ISO-образы в качестве


1.2.2. Компоновка объектных файлов

Из книги автора

1.2.2. Компоновка объектных файлов После того как файлы main.c и reciprocal.cpp скомпилированы, необходимо скомпоновать их. Если в проект входит хотя бы один файл C++, компоновка всегда осуществляется с помощью компилятора g++. Если же все файлы написаны на языке С, нужно использовать


1.8.2. Примеры установки значений umask

Из книги автора

1.8.2. Примеры установки значений umask В табл. 1.9 представлены некоторые возможные значения umask и указаны соответствующие им режимы доступа к файлам и каталогам.Таблица 1.9. Примеры значений umask Значение umask Режим доступа к каталогам Режим доступа к


1.9.2. Примеры создания символических ссылок

Из книги автора

1.9.2. Примеры создания символических ссылок Символическая ссылка создается с помощью команды ln -s, формат которой таков:ln -s исхолный_файл [имя_ссылки]Если имя ссылки не указано, будет создана ссылка, имя которой совпадает с именем исходного файла.Рассмотрим случай, когда в