Вопрос 46. Работа с классом List. Сериализация 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вопрос 46. Работа с классом List. Сериализация



Класс List призван для работы со списками. В классе List есть методы по добавлению, удалению, вставке элементов и прочее.

Класс List призван для работы со списками. Списки - очень удобный инструмент для программирования.

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

List <тип> имя = new List <тип> ();

Пример:

List <string> L = new List <string> ();

while (true)

{ string st = Console.ReadLine();

if (st.Length == 0) break;

L.Add(st); }

Печать листа:

foreach (string s in L)

Console.WriteLine(s);

Методы класса List

Имя Описание
Add Добавляет объект в конец коллекции List <T>.
AddRange Добавляет элементы указанной коллекции в конец списка List <T>.
AsReadOnly   Возвращает для текущей коллекции оболочку IList <T>, доступную только для чтения.
BinarySearch   Перегружен. Использует алгоритм двоичного поиска для нахождения определенного элемента в отсортированном списке List <T> или в его части.
Clear Удаляет все элементы из коллекции List <T>.
Contains Определяет, входит ли элемент в состав List <T>.
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
Sort Перегружен. Сортирует элементы в списке List <T> или в его части.
ToArray Копирует элементы списка List <T> в новый массив.
ToString Возвращает объект String, который представляет текущий объект Object. (Унаследовано от Object.)
   
   

Сериализация

При работе с программной системой зачастую возникает необходимость в сериализации объектов. Под сериализацией понимают процесс сохранения объектов в долговременной памяти (файлах) в период выполнения системы. Под десериализацией понимают обратный процесс - восстановление состояния объектов, хранимых в долговременной памяти. Механизмы сериализации C# и Framework.Net поддерживают два формата сохранения данных - в бинарном файле и XML-файле. В первом случае данные при сериализации преобразуются в бинарный поток символов, который при десериализации автоматически преобразуется в нужное состояние объектов. Другой возможный преобразователь (SOAP formatter) запоминает состояние объекта в формате xml.

Сериализация позволяет запомнить рубежные состояния системы объектов с возможностью последующего возвращения к этим состояниям. Она необходима, когда завершение сеанса работы не означает завершение вычислений. В этом случае очередной сеанс работы начинается с восстановления состояния, сохраненного в конце предыдущего сеанса работы. Альтернативой сериализации является работа с обычной файловой системой, с базами данных и другими хранилищами данных. Поскольку механизмы сериализации, предоставляемые языком C#, эффективно поддерживаются.Net Framework, то при необходимости сохранения данных значительно проще и эффективнее пользоваться сериализацией, чем самому организовывать их хранение и восстановление.

Еще одно важное применение сериализации - это обмен данными удаленных систем. При удаленном обмене данными предпочтительнее формат xml из-за открытого стандарта передачи данных в Интернете по soap-протоколу, из-за открытого стандарта на структуру xml-документов. Обмен становится достаточно простым даже для систем, построенных на разных платформах и в разных средах разработки.

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

Если класс объявить с атрибутом [Serializable], то в него встраивается стандартный механизм сериализации, поддерживающий, что крайне приятно, глубокую сериализацию. Если по каким-либо причинам стандартная сериализация нас не устраивает, то класс следует объявить наследником интерфейса ISerializable, реализация методов которого позволит управлять процессом сериализации.

[Serializable]

public class Test

{

public string name;

int age;

//другие поля и методы класса

}

Для запуска механизма необходимо создать объект, называемый форматером и выполняющий сериализацию и десериализацию данных с подходящим им форматированием. Библиотека FCL предоставляет два класса форматеров. Бинарный форматер, направляющий данные в бинарный поток, принадлежит классу BinaryFormatter.

void SaveState()

{BinaryFormatter bf = new BinaryFormatter();

FileStream fs = new FileStream

("State.bin",FileMode.Create, FileAccess.Write);

bf.Serialize(fs,this);

fs.Close();}

Здесь и выполняется сериализация графа объектов. Как видите, все просто. Вначале создается форматер – объект bf класса BinaryFormatter. Затем определяется файл, в котором будет сохраняться состояние объектов, - объект fs класса FileStream.

 

 

ПРИЛОЖЕНИЕ 1

P=10 P=2 P=4 P=8 P=16 P=2-10
           
           
           
           
           
           
           
           
           
           
        A 0001 0000
        B 0001 0001
        C 0001 0010
        D 0001 0011
        E 0001 0100
        F 0001 0101
          0001 0110

 



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 330; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.189.177 (0.005 с.)