Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прога - ответы2.docx
Скачиваний:
19
Добавлен:
23.04.2019
Размер:
206.38 Кб
Скачать

Ограничение использования атрибутов:

По умолчанию атрибут может быть применен к практически любому элементу кода (методы, классы, свойства и т.д.) Если нужно явно указать, к чему может применяться атрибут, необходимо отметить его определение атрибутом [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()

  1. Язык 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/>