Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемАльбина Однодворцева
1 Атрибуты Работа с файлами Сериализация Лекция 11
2 Атрибуты Работа с файлами Сериализация
3 Атрибуты Работа с файлами Сериализация
4 Метаданные : Стандартные Расширенные ( атрибуты ) Атрибуты : Дополнительная метаинформация о сборке, типе, методе, свойстве, и т. д. Добавляется декларативным образом Доступ к атрибутам можно получить через Reflection Использование Может учитываться во время компиляции Может учитываться во время исполнения Может учитываться средой разработки
5 В квадратных скобках перед целевым объектом : Например, перед типом [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(){…}
6 Параметры атрибутов : Могут задаваться позиционно или по имени Позиционные, как обычно, задаются в определённом порядке и не могут быть пропущены Именованные параметры могут следовать в произвольном порядке и могут быть пропущены [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; }
7 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 предоставляет набор статических методов для работы с атрибутами
8 Через информацию о члене : 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 {….}
9 Сериализация – что и как сериализовать Работа с БД Автоматическое чтение / запись объектов в БД Авто генерация таблиц по атрибутам 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
10 Работа с атрибутами Построение SQL запроса для произвольной Entity
11 Атрибуты Работа с файлами Работа с файловой системой Операции с потоками Сериализация
12 Пространство имен System.IO Работа с файловой системой DriveInfo Диски : DriveInfo DirectoryInfoDirectoryFileSystemInfo Папки : DirectoryInfo, Directory, FileSystemInfo FileFileInfoFileSystemInfo Файлы : File, FileInfo, FileSystemInfo Работа с путями Path Path Наблюдение за изменениями в файловой системе FileSystemWatcher FileSystemWatcher Работа с потоками ( чтение / запись файла ) Stream Stream, производные от него и классы обертки
13 Два способа работы : File, Directory – статические классы FileInfo, DirectoryInfo Многие методы похожие FileSystemInfo Базовый для FileInfo и DirectoryInfo DriveInfo Информация о диске Не связан с FileSystemInfo
14 Экземпляр представляет один диск 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();
15 Абстрактный класс Базовый класс для DirectoryInfo и FileInfo Свойства файла / папки Name Name – название файла, папки FullName FullName – полное имя, т. е. с полным путем Extension Extension - расширение Exists() Exists() – существует ли такой файл / папка CreationTimeLastAccessTime CreationTime, LastAccessTime – время создания / последнего доступа ( изменения ) Attributes Attributes - атрибуты ( только на чтение ) …
16 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);
17 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);
18 Работа с файлами каталогами
19 Класс Stream Представляет файл, порт, область памяти и т. д. как поток байт Абстрактный класс Запись, чтение, перемещение указателя Реализация конкретных потоков в наследниках Классы обертки. …Reader / ….Writer Чтение из / запись в поток BinaryReader/BinaryWriter – бинарные чтение / запись StreamReader/StreamWriter – текстовые чтение / запись Понятие кодировки (Encoding)
20 Возможности 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()
21 Stream PipeStream Поток данных из именованных каналов FileStream поток из файла MemoryStream поток из памяти SqlFileStream NetworkStream поток из сети UnmanagedMemoryStream поток неуправляемых данных …
22 CryptoStream CryptoStream – предоставляет шифрование потока BufferedStream BufferedStream – добавляет буферизацию GZipStreamDeflateStream GZipStream, DeflateStream – предоставляют возможность сжатия потока BinaryReader/BinaryWriter StreamReader/StreamWriter BinaryReader/BinaryWriter, StreamReader/StreamWriter – предоставляют удобные способы чтения / записи в поток
23 Классы обертки. Оборачивают конкретный поток Бинарный доступ к потоку Чтение / запись встроенных типов ReadXXX() / WriteXXX() XXX = Int32, Single, Double, … « Подсмотреть » следующий символ PeekChar() Кодировка по умолчанию UTF8
24 Классы обертки. Оборачивают конкретный поток Текстовый доступ к потоку Чтение / запись строк ReadLine() – чтение строки ReadToEnd() – сразу весь файл Write() – запись строки WriteLine() – запись строки + символ новой строки Параметры аналогичны функциям консоли
25 System.Text.Encoding Определяет преобразование char (Unicode) byte [] Encoding GetEncoding() получает кодировку по Имени : GetEncoding(windows-1251) Номеру : GetEncoding(1251) Использование : StreamReader sr = new StreamReader(stream, Encoding.Unicode);
26 TextReader/TextWriter – базовые классы StreamReader/StreamWriter – из потока StringReader/StringWriter – из строки Стандартные потоки Console.In – поток ввода Console.Out – поток вывода Console.Error – поток ошибок
27 Текстовый ввод - вывод
28 Атрибуты Работа с файлами Сериализация
29 Сериализация – процесс сохранения состояния объекта в потоке Сохраняются данные и необходимая информация для реконструкции объекта – десериализации При сериализации Сохраняется граф объектов Сохраняются данные и всех базовых классов Использование Сохранение данных программы ( например, настройки ) Передача объектов по сети Персистентные объекты ( время жизни объекта больше времени работы программы )
30 Двоичный Компактный Для десериализации нужен.NET SOAP Стандарт W3C.org Не зависит от платформы Многословен XML Произвольный XML формат Не зависит от платформы Многословен. Полностью настраиваемый
31 Только для двоичного и SOAP форматов С помощью атрибутов [Serializable] [Serializable] – указывает на то, что тип можно сериализовать [Serializable] class Complex {….} Что сериализуется Все публичные и приватные поля ( и автоматические свойства ) Базовые и используемые типы тоже должны быть сериализуемыми, т. е. иметь атрибут [Serializable] [NonSerialized] [NonSerialized] – помечается поле или автоматическое свойство, если что - то сериализовать не нужно [Serializable] struct Complex { double im, re; [NonSerialized] double mod, arg;}
32 Форматеры BinaryFormatter BinaryFormatter – для бинарной сериализации (System.Runtime.Serialization.Formatters.Binary.BinaryFormatter) SoapFormatter SoapFormatter – для сериализации в SOAP формате (System.Runtime.Serialization.Formatters.Soap.SoapFormatter) XmlSerializer XmlSerializer – для сериализации в произвольный XML формат (System.Xml.Serialization.XmlSerializer)
33 Для 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);
34 Сериализация только публичных полей и свойств ( приватных полей, стоящих за ними ) Должен быть конструктор без параметров Атрибуты настройки вида XML [XmlIgnore] [XmlAttribute] [XmlElement] [XmlText] И др. Необходимо задавать граф сериализуемых объектов XmlSerializer serializer = new XmlSerializer(typeof(Car), new Type[] { typeof(Radio) }); Не умеет сериализовать ArrayList и List
35 Сериализация
36 Атрибуты Работа с файлами Сериализация
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.