Атрибуты Работа с файлами Сериализация Лекция 11.

Презентация:



Advertisements
Похожие презентации
АтрибутыСериализация Лекция 10. Атрибуты Сериализация.
Advertisements

Атрибуты Работа с файлами Сериализация Лекция 9. Атрибуты Работа с файлами Сериализация.
Работа со строками Работа с файлами Лекция 7. Работа со строками Работа с файлами.
Обработка исключений Работа с файлами Лекция 8. Обработка исключений Работа с файлами Работа с файловой системой Операции с потоками.
Ввод-вывод в C# Сериализация. Сохранение объектов в.NET В терминах.NET сериализация (serialization) это термин, описывающий процесс преобразования объекта.
Потоки ввода/вывода. Система ввода/вывода обеспечивает для программиста стандартные и не зависящие от физического устройства средства представления информации.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Отражение (reflection) Отражение – получение из метаданных информации о типах, определенных в сборке. Классы, поддерживающие механизм отражения, находятся.
Высокоуровневые методы информатики и программирования Лекция 17 Работа с файловой системой.
Click to edit Master title style IDK1011 Основы программирования Диалоговые окна Чтение файлов и директорий.
Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.
Версия сборки Номер версии сборки имеет формат major.minor.build.revision. Например, Значения major(старший), minor(младший), build (компоновка)
Классы в С#. Перечисления С# Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. [атрибуты][модификаторы]
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Работа с файлами.. Процедура Assign(var f; name : String); Связывает внешний файл с именем name и переменную файлового типа f. Все дальнейшие операции.
АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1. Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
1 ©Павловская Т.А. (СПбГУ ИТМО) Структуры данных Контейнерные классы Работа с файлами.
Транксрипт:

Атрибуты Работа с файлами Сериализация Лекция 11

Атрибуты Работа с файлами Сериализация

Атрибуты Работа с файлами Сериализация

Метаданные : Стандартные Расширенные ( атрибуты ) Атрибуты : Дополнительная метаинформация о сборке, типе, методе, свойстве, и т. д. Добавляется декларативным образом Доступ к атрибутам можно получить через Reflection Использование Может учитываться во время компиляции Может учитываться во время исполнения Может учитываться средой разработки

В квадратных скобках перед целевым объектом : Например, перед типом [Serializable] public class Complex {…} Или перед методом : [System.Runtime.InteropServices.DllImport("user32.dll")] extern static void SampleMethod(); Может быть применено несколько атрибутов одновременно [Serializable] [Obsolete] [DefaultMember(Re)] [MyAttrib(im, myval = 12345)] public struct Complex { … } Несколько атрибутов можно объединить в одни [] [XmlIgnore, Obsolete] public double Re { get; set; } Некоторые атрибуты могут быть применены сразу несколько раз [Conditional("DEBUG"), Conditional("TEST1")] void TraceMethod(){…}

Параметры атрибутов : Могут задаваться позиционно или по имени Позиционные, как обычно, задаются в определённом порядке и не могут быть пропущены Именованные параметры могут следовать в произвольном порядке и могут быть пропущены [DllImport("user32.dll")] [DllImport("user32.dll", SetLastError=false, ExactSpelling=false)] [DllImport("user32.dll", ExactSpelling=false, SetLastError=false)] …….. Целью атрибутов могут быть : Сборка, Модуль, Тип, Поле, Свойство, Метод, Параметр ( метода или свойства ), Возвращаемое значение ( метода или свойства ), Событие [assembly: AssemblyTitleAttribute("Production assembly 4")] // Атрибут сборки [module: CLSCompliant(true)]// Атрибут модуля [SomeAttr] // Атрибут метода int Method1() { return 0; } [method: SomeAttr]// Можно и конкретно указать, что это атрибут метода int Method2() { return 0; } [return: SomeAttr]// Атрибут возвращаемого значения int Method3() { return 0; }

Attribute Класс, должен быть унаследован от абстрактного класса Attribute Attribute public class ColumnAttribute : Attribute {…} AttributeUsage Можно задавать область применимости атрибута с помощью атрибута AttributeUsage [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public class TableAttribute : Attribute { public TableAttribute(string tableName) { this.tableName = tableName ?? String.Empty; } private readonly string tableName; public string TableName { get { return tableName; } } } Применение такого атрибута (Attribute можно опускать ) [Table("Customers")] public class Customer {…} [TableAttribute("Orders")] public class Order {…} Класс Attribute предоставляет набор статических методов для работы с атрибутами

Через информацию о члене : IsDefined bool MemberInfo.IsDefined(Type attrType, bool inherit) – нет доступа к атрибутному объекту Только проверка о существовании атрибута Через атрибут : GetCustomAttributes Attribute[] GetCustomAttributes(MemberInfo mi) GetCustomAttribute Attribute Attribute.GetCustomAttribute(MemberInfo mi, Type attrType) Создают экземпляры атрибутов ( вызывают конструкторы классов атрибутов, задают свойства и т. д.) if (entity.GetType().IsDefined(typeof(TableAttribute), false)) { TableAttribute tableAttribute = (TableAttribute)Attribute.GetCustomAttribute(entityType, typeof(TableAttribute)); Console.WriteLine(tableAttribute. TableName ); } Атрибут может наследоваться от предка к потомку. Наследование может быть задано с помощью AttributeUsageAttribute на конкретном классе атрибута [AttributeUsageAttribute(AttributeTargets.All, Inherited = true, AllowMultiple = false)] public abstract class AuthorAttribute : Attribute {….}

Сериализация – что и как сериализовать Работа с БД Автоматическое чтение / запись объектов в БД Авто генерация таблиц по атрибутам WCF, веб - сервисы Пометить метод как доступный удаленно. Задание контрактов Аспектно - ориентированное программирование Задание метаинформации сборке ( версию, описание, торговую марку и т. д.) [assembly: AssemblyVersion(" ")] Вызов неуправляемого кода [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type); Взаимодействие со средой разработки [Obsolete("Use Method2 instead")] Описание свойств, методов и т. д. для COM объектов Взаимодействие с системой безопасности.NET

Работа с атрибутами Построение SQL запроса для произвольной Entity

Атрибуты Работа с файлами Работа с файловой системой Операции с потоками Сериализация

Пространство имен System.IO Работа с файловой системой DriveInfo Диски : DriveInfo DirectoryInfoDirectoryFileSystemInfo Папки : DirectoryInfo, Directory, FileSystemInfo FileFileInfoFileSystemInfo Файлы : File, FileInfo, FileSystemInfo Работа с путями Path Path Наблюдение за изменениями в файловой системе FileSystemWatcher FileSystemWatcher Работа с потоками ( чтение / запись файла ) Stream Stream, производные от него и классы обертки

Два способа работы : File, Directory – статические классы FileInfo, DirectoryInfo Многие методы похожие FileSystemInfo Базовый для FileInfo и DirectoryInfo DriveInfo Информация о диске Не связан с FileSystemInfo

Экземпляр представляет один диск DriveInfo drive = new DriveInfo("c"); DriveInfo drive = new Информация о диске системы Name Name – имя диска DriveType DriveType – тип диска. Например : Fixed, CDRom IsReady IsReady – готов ли к использованию ( например для CD Rom) VolumeLabel VolumeLabel – метка тома DriveFormat DriveFormat – тип файловой системы TotalSize TotalSize – размер диска AvailableFreeSpace AvailableFreeSpace – размер свободного места … Получение всех дисков GetDrives() Статически метод GetDrives() DriveInfo[] drives = DriveInfo.GetDrives();

Абстрактный класс Базовый класс для DirectoryInfo и FileInfo Свойства файла / папки Name Name – название файла, папки FullName FullName – полное имя, т. е. с полным путем Extension Extension - расширение Exists() Exists() – существует ли такой файл / папка CreationTimeLastAccessTime CreationTime, LastAccessTime – время создания / последнего доступа ( изменения ) Attributes Attributes - атрибуты ( только на чтение ) …

DirectoryInfo Экземпляр DirectoryInfo представляет одну папку файловой системы Наследник от FileSystemInfo Создание объекта ( но не физической папки на диске ) DirectoryInfo windowsFolder = new Получение информации о файлах и папках GetDirectories() GetDirectories() – получение подпапок. Возможен поиск по шаблону и поиск во всех дочерних папках DirectoryInfo[] folders = GetDirectories(); DirectoryInfo[] folders = di.GetDirectories(my*); DirectoryInfo[] folders = di.GetDirectories(my*, SearchOption.AllDirectories); GetFiles() GetFiles() – получение файлов FileInfo[] files = folder.GetFiles(); FileInfo[] files = folder.GetFiles("*.txt, SearchOption.TopDirectoryOnly); GetFileSystemInfos() GetFileSystemInfos() – получение всех файлов / папок FileSystemInfo[] fsi = folder.GetFileSystemInfos(); Операции с папками Create() Create() – создание папки по текущему объекту DirectoryInfo new CreateSubdirectory() CreateSubdirectory() - создание подпапки текущего каталога Delete() Delete() – удаление текущей папки MoveTo () MoveTo () – перемещение текущей папки Directory Класс Directory имеет практически такие же методы, но в статическом исполнении Directory.CreateDirectory(path);

FileInfo Экземпляр FileInfo представляет один файл файловой системы Наследник от FileSystemInfo Создание объекта ( но не физического файла на диске ) FileInfo file = new FileInfo(c:\\test.txt); Свойства ( в добавление к свойствам FileSystemInfo) DirectoryDirectoryName Directory, DirectoryName – папка DirectoryInfo или полное имя папки ( с полным путем ) IsReadOnly IsReadOnly – файл только для чтения Length Length – размер файла в байтах Операции с файлами целиком Create()CreateText() Create(), CreateText() – создание файла CopyTo() CopyTo() – копирование файла Delete() Delete() – удаление текущего файла MoveTo () MoveTo () – перемещение текущего файла Операции с содержимым файла Create()CreateText()OpenRead()OpenText()OpenWrite()AppendText() Create(), CreateText(), OpenRead(), OpenText(), OpenWrite(), AppendText() File Класс File имеет практически такие же методы, но в статическом исполнении File.Delete(c:\\myText.txt);

Работа с файлами каталогами

Класс Stream Представляет файл, порт, область памяти и т. д. как поток байт Абстрактный класс Запись, чтение, перемещение указателя Реализация конкретных потоков в наследниках Классы обертки. …Reader / ….Writer Чтение из / запись в поток BinaryReader/BinaryWriter – бинарные чтение / запись StreamReader/StreamWriter – текстовые чтение / запись Понятие кодировки (Encoding)

Возможности CanRead – можно ли читать CanWrite – можно ли писать CanSeek – можно ли двигать курсор Чтение int Read(byte[] buffer, int offset, int count) Запись void Write(byte[] buffer, int offset, int count) Текущая позиция long Position {get; set; } Перемещение long Seek(long offset, SeekOrigin origin); Закрытие потока void Close() void Dispose()

Stream PipeStream Поток данных из именованных каналов FileStream поток из файла MemoryStream поток из памяти SqlFileStream NetworkStream поток из сети UnmanagedMemoryStream поток неуправляемых данных …

CryptoStream CryptoStream – предоставляет шифрование потока BufferedStream BufferedStream – добавляет буферизацию GZipStreamDeflateStream GZipStream, DeflateStream – предоставляют возможность сжатия потока BinaryReader/BinaryWriter StreamReader/StreamWriter BinaryReader/BinaryWriter, StreamReader/StreamWriter – предоставляют удобные способы чтения / записи в поток

Классы обертки. Оборачивают конкретный поток Бинарный доступ к потоку Чтение / запись встроенных типов ReadXXX() / WriteXXX() XXX = Int32, Single, Double, … « Подсмотреть » следующий символ PeekChar() Кодировка по умолчанию UTF8

Классы обертки. Оборачивают конкретный поток Текстовый доступ к потоку Чтение / запись строк ReadLine() – чтение строки ReadToEnd() – сразу весь файл Write() – запись строки WriteLine() – запись строки + символ новой строки Параметры аналогичны функциям консоли

System.Text.Encoding Определяет преобразование char (Unicode) byte [] Encoding GetEncoding() получает кодировку по Имени : GetEncoding(windows-1251) Номеру : GetEncoding(1251) Использование : StreamReader sr = new StreamReader(stream, Encoding.Unicode);

TextReader/TextWriter – базовые классы StreamReader/StreamWriter – из потока StringReader/StringWriter – из строки Стандартные потоки Console.In – поток ввода Console.Out – поток вывода Console.Error – поток ошибок

Текстовый ввод - вывод

Атрибуты Работа с файлами Сериализация

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

Двоичный Компактный Для десериализации нужен.NET SOAP Стандарт W3C.org Не зависит от платформы Многословен XML Произвольный XML формат Не зависит от платформы Многословен. Полностью настраиваемый

Только для двоичного и SOAP форматов С помощью атрибутов [Serializable] [Serializable] – указывает на то, что тип можно сериализовать [Serializable] class Complex {….} Что сериализуется Все публичные и приватные поля ( и автоматические свойства ) Базовые и используемые типы тоже должны быть сериализуемыми, т. е. иметь атрибут [Serializable] [NonSerialized] [NonSerialized] – помечается поле или автоматическое свойство, если что - то сериализовать не нужно [Serializable] struct Complex { double im, re; [NonSerialized] double mod, arg;}

Форматеры BinaryFormatter BinaryFormatter – для бинарной сериализации (System.Runtime.Serialization.Formatters.Binary.BinaryFormatter) SoapFormatter SoapFormatter – для сериализации в SOAP формате (System.Runtime.Serialization.Formatters.Soap.SoapFormatter) XmlSerializer XmlSerializer – для сериализации в произвольный XML формат (System.Xml.Serialization.XmlSerializer)

Для BinaryFormatter и SoapFormatter Serialize Serialize(stream, obj) – сериализация объекта в поток Complex complex = new Complex(10, 20); using (FileStream stream = new FileStream("store.bin", FileMode.Create)) { BinaryFormatter binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(stream, complex); } Deserialize object Deserialize(stream) – для десериализации объекта Complex complex; using (FileStream stream = new FileStream("store.bin", FileMode.Open)) { BinaryFormatter binaryFormatter = new BinaryFormatter(); complex = (Complex)binaryFormatter.Deserialize(stream); } Для XmlSerializer необходимо указать сериализуемый тип (- ы ) XmlSerializer serializer = new XmlSerializer(typeof(Complex)); serializer.Serialize(fileStream, complex); XmlSerializer serializer = new XmlSerializer(typeof(Car), new Type[] { typeof(Radio) }); Car c = (Car)ser.Deserialize(fileStream);

Сериализация только публичных полей и свойств ( приватных полей, стоящих за ними ) Должен быть конструктор без параметров Атрибуты настройки вида XML [XmlIgnore] [XmlAttribute] [XmlElement] [XmlText] И др. Необходимо задавать граф сериализуемых объектов XmlSerializer serializer = new XmlSerializer(typeof(Car), new Type[] { typeof(Radio) }); Не умеет сериализовать ArrayList и List

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

Атрибуты Работа с файлами Сериализация