Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 219

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 213 214 215 216 217 218 < 219 > 220 221 222 223 224 225 .. 320 >> Следующая

Заметки на полях
Вполне возможно, что нам никогда и не потребуется выводить отдельные байты в поток. Однако все-таки заметим, что многие типы из самых разных пространств имен .nп'іісиольлуютзнакомые нам классы t в скрытом виде. Например, в классе System .wi ndows. Forms. bi tma р определен метод Save (), который записывает созданное нами двоичное изображение в файл. Вполне возможно создать новый объект в it шар. передав в качестве входящего параметра объекта класса, производного от St геа т. Таким образом мы, к примеру, можем изменять информацию о пикселах в объекте Bitmap в процессе выполнения программы. В принципе можно сосчитать . і паты X и y вручную, но проще непользояать метод SetP" хе" (),на-пример, так:
// Открываем файл изображений в каталоге приложения Consolе.WriteLineC"Modifying a bitmap in memory"):
irrryFStream - new FileStrearaC'Paint Splatter.bmp". FileMode.Open. FileAccess.ReadWrite):
II Создаем объект Bitmap на основе открытого потока Bitmap rawBitmap = new Bitmap(myFStream):
Il Рисуен белый крест поперек изображения (наш код применим лишь в том случае, // если высота и ширина изображения одинаковы) fordnt і = 0: 1 < rawBitmap.Width; 1++) {
rawBitmaa.SetPixeKi, 1, Color.White):
rawBitmap.SetPixel(rawBitmap.Width - i) - 1, 1 - 1. Color.White);
}
Il А теперь сохраняем измененное изображение в файл rawBitmap .SaveC'newImage.bfTip"); rnyFStream.CloseO :
На рис. I 1.17 показано исходное изображение (файл splatter.bmp).
Рис. 11.17. Исходное изображение А на рис. 11.18 — изображение после того, как с ним поработала наша программа..
\
Рис. 11.18. Измененное изображение
Графы для отношений объектов 545
На этом обзор наиболее важных типов пространства имен System. завершен. К этому моменту мы уже умеем записывать текстовую и двоичную информацию на диск и в оперативную память и считывать ее оттуда. Далее в этой главе будет рассказано о том, как в реализована поддержка сериализации пользовательских типов.
Код приложения BmaryRcaderWi'itej можно найти в подкаталоге Chapter
Сохранение объектов в .NET
Как мы уже могли убедиться в первой части главы, в пространстве имен предусмотрено множество типов, которые позволяют записывать двоичные и символьные данные в какое-то место для хранения (например, файл на диске или буфер в памяти) и считывать их. Однако до сих пор нам не встретились типы, которые позволили бы сохранять объекты классов целиком и затем восстанавливать их. Об этом процессе, который называется и пойдет речь в остав-
шейся части главы.
В терминах ЛЧЕТсериализация (serialization) - это термин, описывающий процесс преобразования объекта в линейную последовательность байтов. Обратный
процесс, когда из потока байтов, содержащего всю необходимую информацию, объект восстанавливается в исходном виде, называется десериалиэацией (deserialization). Службы сериализации в .КТЛ — это весьма сложные программные модули, Они обеспечивают многие неочевидные вещи: например, когда объект се-риализуется в поток, информация о всех других объектах, на которые он ссылается, также должна сериализоваться. Например, когда сериализуется производный класс, ссылки на другие классы, которые есть в базовых классах для этого iiposn-водного класса, также должны отслеживаться и учитываться.
После того как набор объектов сохранен в поток, мы можем обходиться с полученным набором байтов так, как нам захочется. Например, предположим, что мы сериализовали набор объектов в MemoryStream, то есть в буфер в оперативной памяти. Далее эта информация может быть передана на удаленный компьютер, в буфер обмена Windows, на CD или просто в файл на диске. Самим байтам абсолютно безразлично, где они будут лежать. Главное — чтобы они точно отображали весь набор подвергшихся сериализации объектов.
Графы для отношений объектов
Набор взаимосвязанных объектов, в поток, называется
объектов (object graph). Графы позволяют фиксировать отношения объектов друг к другу, и они не соответствуют классическим моделям отношений классов в объектно-ориентированном программировании. Внутри графа каждому из объектов присваивается уникальный номер, который используется только для служебных целей самого графа и которому совершенно не обязательно должно что-то ссог-ветствовать в реальном мире. Далее записывается информация о имени класса этому номеру, информация о всех отношениях этого класса с другими классами и отношениях других классов между собой. На самом деле все очень просто, достаточно один раз рассмотреть это на примере.
546 Глава 11 • Ввод, вывод и сериализэций объектов
Разбираться с графом мы будем на примере, как обычно, из мира автомобилей. Пусть у нас будет базовый класс Саг, который при помощи отношения «has-a» включает в себя класс Radio. Производный от класса Саг класс JamesBondCar расширяет возможности базового класса. Объектный граф, моделирующий отношения между тремя этими классами, представлен на рис. 11.19.
Саг Radio
Рис. 11.19. Простой объектный граф
На рис. 11.19 ясно видно, что класс Саг связан с классом Radio (при помощи отношения «has-a». Класс JamesBondCar также неразрывно связан с классом Саг — как производный класс. Конечно же, JamesBondCar связан и с классом Radio, поскольку наследует его от Саг. Учитывая, что каждому из классов присвоен уникальный номер, как показано на рисунке, формула графа может выглядеть следующим образом:
Предыдущая << 1 .. 213 214 215 216 217 218 < 219 > 220 221 222 223 224 225 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100