- •Атрибуты в среде .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
Ограничение использования атрибутов:
По умолчанию атрибут может быть применен к практически любому элементу кода (методы, классы, свойства и т.д.) Если нужно явно указать, к чему может применяться атрибут, необходимо отметить его определение атрибутом [AttributeUsage], который позволяет задать (операцией OR) любую комбинацию из перечисления
public enum AttributeTargets
{
All, Assembly, Class, Constructor, Delegate, Enum, Event,
Field, GenericParameter, Interface, Method, Module, Parameter,
Property, ReturnValue, Struct
}
Атрибут [AttributeUsage] также позволяет устанавливать свойство AllowMultiple, которое указывает, может ли атрибут применяться к одному и тому же элементу более одного раза (по умолчанию false). Помимо этого он также позволяет указывать, должен ли атрибут наследоваться производными классами, за счет применения именованного свойства Inherited (по умолчанию true). Например:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct,
Inherited = false)]
class ShapeDescriptionAttribute: System.Attribute
{
...
};
Атрибуты уровня сборки и модуля:
Атрибуты можно также применять ко всем типам внутри конкретного модуля (если речь идет о многофайловой сборке) или ко всем модулям внутри отдельной сборки, используя, соответственно, дескрипторы [module:] и [assembly:]. Например
[assembly: Serializable]
Применяет атрибут [Serializable] ко всем элементам в сборке.
Рефлексия атрибутов:
// Получение типа, представляющего Circle
Type t = typeof (Circle) ;
// Получение всех атрибутов Circle
object[] customAtts = t.GetCustomAttributes(false);
// Вывод описания
foreach (ShapeDescriptionAttribute a in customAtts)
Console.WriteLine("{0}", a.Description);
Выводы:
Применение атрибутов приводит к включению в сборку дополнительных метаданных.
Атрибуты, по сути, остаются бесполезными до тех пор, пока какой-то другой агент не воспроизведет их через рефлексию.
В С# атрибуты указываются в квадратных скобках.
Атрибуты в .NET представляют собой классы, унаследованные от класса System.Attribute
Можно ограничивать область использования атрибутов, при помощи элементов перечисления AttributeTargets
Рефлексия атрибутов осуществляется при помощи метода Type.GetCustomAttributes()
Язык xml. Классы платформы .Net для работы с xml-данными.
XML
XML (англ. eXtensible Markup Language — расширяемый язык разметки) — язык разметки, фактически представляющий собой свод общих синтаксических правил. XML — текстовый формат, предназначенный для хранения структурированных данных, для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML).
Синтаксис xml
XML — это описанная в текстовом формате иерархическая структура, предназначенная для хранения любых данных. Визуально структура может быть представлена как дерево элементов. Элементы XML описываются тегами.
Рассмотрим пример простого кулинарного рецепта, размеченного с помощью XML:
<?xml version="1.0" encoding="UTF-8"?> <recipe name="хлеб"> <title>Простой хлеб</title> <ingredient amount="3" unit="стакан">Мука</ingredient> <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient> <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient> <ingredient amount="1" unit="чайная ложка">Соль</ingredient> <instructions> <step>Смешать все ингредиенты и тщательно замесить.</step> <step>Закрыть тканью и оставить на один час в тёплом помещении.</step> <!-- <step>Почитать вчерашнюю газету.</step> - это сомнительный шаг... --> <step>Замесить ещё раз, положить на противень и поставить в духовку.</step> </instructions> </recipe>
Объявление XML
Первая строка XML-документа называется «объявление XML»
<?xml version="1.0" encoding="UTF-8"?>
Корневой элемент
Важнейшее обязательное синтаксическое требование заключается в том, что документ имеет только один корневой элемент
<recipe name="хлеб" preptime="5" cooktime="180"> ... </recipe>
Комментарии
В любом месте дерева может быть размещен элемент-комментарий. XML-комментарии размещаются внутри специального тега, начинающегося с символов <!-- и заканчивающегося символами -->. Два знака дефис (--) внутри комментария присутствовать не могут.
<!-- <step>Почитать вчерашнюю газету.</step> - это сомнительный шаг... -->
Теги внутри комментария обрабатываться не должны.
Теги
Остальная часть этого XML-документа состоит из вложенных элементов, некоторые из которых имеют атрибуты и содержимое. Элемент обычно состоит из открывающего и закрывающего тегов, обрамляющих текст и другие элементы.
Открывающий тег состоит из имени элемента в угловых скобках, например, <step>, а закрывающий тег состоит из того же имени в угловых скобках, но перед именем ещё добавляется косая черта, например, </step>. Имена не могут содержать пробелы. Имя может начинаться с буквы, подчёркивания, двоеточия. Остальными символами имени могут быть те же символы, а также цифры, дефис, точка.
Содержимым элемента (англ. content) называется всё, что расположено между открывающим и закрывающим тегами, включая текст и другие (вложенные) элементы. Ниже приведён пример XML-элемента, который содержит открывающий тег, закрывающий тег и содержимое элемента:
<step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
Кроме содержания у элемента могут быть атрибуты — пары имя-значение, добавляемые в открывающий тег после названия элемента. Значения атрибутов всегда заключаются в кавычки (одинарные или двойные), одно и то же имя атрибута не может встречаться дважды в одном элементе.
<ingredient amount="3" unit="стакан">Мука</ingredient>
В приведённом примере у элемента ingredient есть два атрибута: amount, имеющий значение 3, и unit, имеющий значение стакан. С точки зрения XML-разметки, приведённые атрибуты не несут никакого смысла, а являются просто набором символов.
Кроме текста, элемент может содержать другие элементы:
<instructions> <step>Смешать все ингредиенты и тщательно замесить.</step> <step>Закрыть тканью и оставить на один час в тёплом помещении.</step> <!-- <step>Почитать вчерашнюю газету.</step> - это сомнительный шаг... --> <step>Замесить ещё раз, положить на противень и поставить в духовку.</step> </instructions>
В данном случае элемент instructions содержит три элемента step.
Для обозначения элемента без содержания, называемого пустым элементом, можно применять особую форму записи:
<step/>