- •Атрибуты в среде .Net и языке c#.
- •Метаданные
- •Понятие атрибутов
- •Предопределенные и собственные атрибуты
- •Потребители атрибутов
- •Применение атрибутов
- •Сокращенное именование атрибутов
- •Создание собственных атрибутов:
- •Применение собственных атрибутов:
- •Ограничение использования атрибутов:
- •Атрибуты уровня сборки и модуля:
- •Рефлексия атрибутов:
- •Выводы:
- •Язык xml. Классы платформы .Net для работы с xml-данными.
- •Синтаксис xml
- •Работа с xml при помощи System.Xml
- •Работа с xml при помощи linq to xml
- •Выводы:
- •Потоковый ввод-вывод. Файлы. Работа с файлами и каталогами. Пространство имен System.Io
- •Классы Directory (DirectoryInfo) и File (FileInfo) Некоторые общие свойства классов DirectoryInfo и FileInfo:
- •Дополнительные возможности класса DirectoryInfo
- •Дополнительные возможности класса FileInfo
- •Дополнительные члены File
- •Потоковый ввод-вывод
- •Работа с классом FileStream
- •Работа с классами StreamWriter и StreamReader
- •Классы StringWriter и StringReader
- •Работа с классами BinaryWriter и BinaryReader
- •Выводы:
- •Сериализация. Атрибуты. Стандартные форматы сериализации. Понятие сериализации объектов
- •Роль графов объектов
- •Конфигурирование объектов для сериализации
- •Общедоступные поля, приватные поля и общедоступные свойства
- •Стандартные форматеры сериализации
- •Настройка сериализации с использованием атрибутов
- •Выводы:
- •Понятие бд и субд. Язык sql. Ado.Net как средство доступа из c# к субд. Понятие бд
- •Понятие субд
- •Обзор синтаксиса
- •Подключенный уровень
- •Автономный уровень
- •Основные свойства класса DataSet
- •Основные методы класса DataSet
- •Типы DataColumn и DataRow
- •Основные члены типа DataColumn:
- •Основные члены типа DataRow:
- •Работа с адаптерами данных:
- •Основные члены класса DbDataAdapter:
- •Параллельные вычисления. Многозадачность и многопоточность.
- •Некоторые члены класс Process:
- •Некоторые члены класса ProcessThread
- •Домены приложений
- •Некоторые члены класс AppDomain:
- •Многопоточность. Классификация состояний потока. Средства многопоточного программирования System.Threading.
- •Некоторые члены пространства имен System.Threading
- •Основные члены класс Thread
- •Состояния потока
- •Многопоточное программирование при помощи асинхронных вызовов делегатов
- •Создание вторичных потоков при помощи Thread.Start()
- •Синхронизация с помощью lock
- •Синхронизация с использованием типа System.Threading.Monitor
- •Синхронизация с использованием типа System.Threading.Interlocked
- •Синхронизация с использованием атрибута [Synchronization]
- •Использование System.Threading.Timer
- •Пул потоков clr
- •Библиотека Windows.Forms. Пространства имен. Структура приложения. Элементы управления. События. Иерархия элементов управления.
- •Основные пространства имен Windows Forms
- •Структура приложения WinForms
- •Элементы управления
- •События
- •Библиотека wpf. Отличия wpf от WindowsForms. Разметка xaml. Понятие Windows Presentation Foundation
- •Типы приложений wpf
- •Основные сборки wpf
- •Построение приложения wpf без xaml
- •Построение приложения wpf с использованием только xaml
- •Пример c# обработчика события для контрола, объявленного в xaml (связь кода и xaml):
- •Создание проекта
- •Знакомство с инструментами визуального конструктора wpf
Стандартные форматеры сериализации
Среда .NET предоставляет следующие форматеры:
BinaryFormatter сериализует состояние объекта в поток, используя двоичный формат. Этот тип определен в пространстве имен System.Runtime.Serialization.Formatters.Binary
SoapFormatter сохраняет состояние объекта в виде сообщения SOAP (XML-формат для обмена сообщениями с веб-службами). Этот тип определен в пространстве имен System.Runtime.Serialization.Formatters.Soap
XmlSerializer используется для сохранения объектов в XML. Чтобы использовать этот тип, нужно использовать пространство имен System.Xml.Serialization
Пример работы с форматером BinaryFormatter:
UserPrefs userData = new UserPrefs();
userData.WindowColor = "Yellow";
userData.FontSize = 0;
BinaryFormatter binFormat = new BinaryFormatter();
// Сохранить объект в файле.
using ( Stream fStream = new FileStream("user.dat", FileMode.Create, FileAccess.Write) )
{
binFormat.Serialize(fStream, userData);
}
// Прочитать UserPrefs из двоичного файла.
using ( Stream fStream = File.OpenRead(fileName) )
{
UserPrefs prefsFromDisk = (UserPrefs)binFormat.Deserialize(fStream);
}
Настройка сериализации с использованием атрибутов
Для дополнительного управления сериализацией .NET предоставляет возможность определять методы, оснащаемые специальными атрибутами:
[OnSerializing] |
Метод будет вызван при сериализации объекта |
[OnSerialized] |
Метод будет вызван после сериализации объекта |
[OnDeserializing] |
Метод будет вызван при десериализации объекта |
[OnDeserialized] |
Метод будет вызван после десериализации объекта |
Эти атрибуты сериализации определены в пространстве имен System.Runtime.Serialization. В случае применения этих атрибутов метод должен быть определен так, чтобы принимать параметр StreamingContext и не возвращать ничего.
Пример:
[Serializable]
public class UserPrefs
{
public string WindowColor;
public int FontSize;
[OnSerializing]
private void OnSerializing(StreamingContext context)
{
// будет вызван при сериализации
}
[OnSerialized]
private void OnSerialized(StreamingContext context)
{
// Будет вызван сразу после сериализации
}
}
Выводы:
Сериализация – сохранение объектов в потоке для последующего полного восстановления его состояния.
При сериализации класса сохраняются также все объекты, от которых он зависит (наследуя или включая). Для установления связей среда строит граф объектов.
Для сериализации объект должен быть отмечен атрибутом [Serializable]. Если какие-либо поля не должны сохраняться – их нужно отметить атрибутом [NonSerialized].
BinaryFormatter и SoapFormatter сериализуют все поля и свойства, XmlSerializer – только public поля или private поля с public свойствами.
BinaryFormatter сохраняет данные в компактном двоичном формате, SoapFormatter – в формате SOAP для веб-служб, XmlSerializer – в XML-формате.
Для тонкого управления сериализацией можно использовать методы, помеченные специальными атрибутами [OnSerializing], [OnSerialized], [OnDeserializing], [OnDeserialized]