АтрибутыСериализация Лекция 10. Атрибуты Сериализация.

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



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

Атрибуты Работа с файлами Сериализация Лекция 9. Атрибуты Работа с файлами Сериализация.
Ввод-вывод в C# Сериализация. Сохранение объектов в.NET В терминах.NET сериализация (serialization) это термин, описывающий процесс преобразования объекта.
Отражение (reflection) Отражение – получение из метаданных информации о типах, определенных в сборке. Классы, поддерживающие механизм отражения, находятся.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Лекция 3 Принципы объектно- ориентированного программирования.
EPAM Systemswww.epam.com EPAM Systemswww.epam.com Программирование на языке C# Основы ООП.
ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП) 1.
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
Делегаты Как созданные объекты могут посылать сообщения тем объектам, которые их породили? При программировании под Windows на С и C++ основное средство.
Версия сборки Номер версии сборки имеет формат major.minor.build.revision. Например, Значения major(старший), minor(младший), build (компоновка)
Высокоуровневые методы информатики и программирования Лекция 14 Интерфейсы.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1. Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В.
Высокоуровневые методы информатики и программирования Лекция 8 Свойства и операции классов.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
С# и ООП Формальное определение класса с C# Класс в C# - это пользовательский тип данных (user defined type), который состоит из данных (часто называемых.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Транксрипт:

Атрибуты Сериализация Лекция 10

Атрибуты Сериализация

Атрибуты Сериализация

Метаданные : Стандартные Расширенные ( атрибуты ) Атрибуты : Дополнительная метаинформация о сборке, типе, методе, свойстве, и т. д. Добавляется декларативным образом Доступ к атрибутам можно получить через 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

Атрибуты Сериализация

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

Двоичный Компактный Для дестерилизации нужен.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

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

Атрибуты Сериализация