Необходимость в метаданных типов

Скачать на Телефон 30.04.2019
Скачать на Телефон

Существует множество баз данных. Чтобы понять, что они собой представляют, необходимо рассматривать их содержимое. Но есть одна маленькая полезная деталь - метаданные. Это то, что обобщает всю имеющуюся информацию. Для чего они были разработаны и зачем используются?

Что такое метаданные?

Следует отметить, что единой формулировки данного понятия не существует. Итак, метаданные - это общее название информации о

В основном используется четыре обозначения данного термина:

  1. Могут подразумевать субканальную информацию про используемые данные.
  2. Так называют характеристики, описывающие сущность. Они необходимы, чтобы искать, идентифицировать, оценивать и управлять значениями в БД. Ещё таким образом называют важный набор определённого количества структурированных описаний, предоставленных в допустимой форме и доступных в явном виде, благодаря чему можно найти необходимый объект. Подобная формулировка применяется в случаях, когда необходимо искать сущности, ресурсы и объекты.
  3. Данные из общей формальной системы, которые описывают свойства конкретного хранилища информации.
  4. Информация про характеристики веб-страницы (когда была создана, кто её автор).

Различие между данными и метаданными

Как их отличают? Дело в том, что провести однозначное разделение обычно невозможно. Почему? Давайте рассмотрим более детально на примере:

  1. Что-то может выступать в обеих ролях. Например, заголовок статьи может рассматриваться и как элемент метаданных, и в качестве информации, что передаётся читателю.
  2. Возможность меняться местами. Допустим, кто-то написал стихотворное произведение. Оно представляет собой данные. Композитор, опираясь на слова, создал музыкальную композицию и прикрепил данный текст. В таком случае он превращается в метаданные. Всё зависит от использования. Вообще, подобные случаи возможны из-за восприятия определённой точки зрения на основании своих суждений (тут играет роль пространство имён и система отсчёта).
  3. Возможность создания мета-…-метаданных ориентируясь на аксиому выбора. Это вытекает из того, что почти на любую информацию может быть создана своя система характеристик.

Метаданные файлов в компьютерах

Своё применение они нашли и в автоматизированных рабочих потоках. Если какая-то программа умеет работать с содержимым и то они могут быть преобразованы в другой тип информации, что позволяет освобождать пользователей от множества неудобных и рутинных действий.

Примером могут служить разработки, которые позволяют просматривать графические изображения с разными расширениями. Также можно вспомнить и о различных записях звука, фильмов и многих других вещах.

Метаданные в мировой сети

В интернете с их помощью осуществляется поиск необходимой полезной информации среди огромных массивов данных. С этой точки зрения, метаданные, которые создаются вручную, представляют большую ценность ввиду своей осмысленности. В качестве подобного типа информации могут выступать ключевые слова, теги и ряд других элементов. Метаданные - это то, что кратко рассказывает о сайте. При проведении анализа поисковыми системами нескольких сайтов, если они выявят на них одинаковые тематические слова, то их взаимное указание друг на друга будет иметь большее значение, чем с обычных сайтов.

Классификация метаданных

Как их различают? В основном классификация проводится по одному из двух принципов:

  1. Содержание. Метаданные используются, чтобы описывать файл, ресурс или его содержимое (к примеру, заголовок - «как готовить картошку»).
  2. По принадлежности. Метаданные могу использовать, чтобы информировать о чем-то целом или его составляющей. Так, название фильма относится ко всему нему, а описание эпизода информирует только об определенной части.

Если метаданные - это совокупность зависимостей от возможностей логического вывода, то в таком случае они делятся на 3 вида:

  1. «Сырые» данные. Основа информационного обеспечения.
  2. Метаданные, описывающие содержимое. Они, в свою очередь, тоже используются.
  3. Метаданные, с помощью которых можно сделать логический вывод.

Такие типы метаданных существуют.

Три наиболее востребованных класса

Предлагаем ознакомиться с тремя классами, которые сейчас широко применяются:

  1. Внутренние метаданные. Это информация, которая описывает составные части вещей, их структуру и что она собой представляет. В качестве примера можно привести размер и формат файла.
  2. Административные метаданные. Требуются для процессов обработки информации, а также для назначения вещи. Например, кто автор, редактор, когда был создан файл.
  3. Описательные метаданные. Используются, чтобы охарактеризовать природу файла и его признаки (к какой категории относится, с чем ещё связан).

Формат метаданных

Так называют стандарт, который используется, чтобы проводить формальное описание какой-то категории ресурсов (сущностей, объектов и тому подобного).

Обычно в нём есть определённый набор, который характеризует рассматриваемый объект. Для этого используются атрибуты, свойства, элементы метаданных.
Классифицируются по охвату и подробностям описываемых ресурсов.

Возможные проблемы

Когда может возникать ошибка метаданных? Отсутствие необходимой информации или ограничение доступа - вот основные причины возникающих проблем.

Также ошибка загрузки метаданных появляется в тех случаях, когда файл есть, но он повреждён. Основных причин такого состояния насчитывают три: износ техники, вредоносное влияние отдельных программ (как правило, компьютерных вирусов) и неправильное завершение работы с документом, по причине чего данные сохранились некорректно.

Соответственно, значение метаданных в классификации и систематизировании сетевой информации трудно переоценить. Поэтому желающим оптимизировать собственный сайт просто необходимы знания о них.

Последнее обновление: 31.10.2015

При работе с моделью в MVC большее значение играют метаданные. Они позволяют указать некоторую дополнительную информацию об объекте, например, о том, как отображать его свойства в представлении, или о том, как осуществлять валидацию вводимых данных.

Аннотации данных для отображения свойств

Аннотации данных представляют собой атрибуты, которые вы можете найти в пространстве имен System.ComponentModel.DataAnnotations (хотя несколько атрибутов определено в других пространствах).

Атрибут Display

Итак, предположим у нас имеется некоторая модель Book:

Public class Book { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Author { get; set; } public virtual int Year { get; set; } }

И мы пытаемся получить из базы данных один объект этой модели:

Public class HomeController: Controller { private BookContext db = new BookContext(); public ActionResult Index() { var firstBook = db.Books.ToList().First(); return View(firstBook); } }

Используя соответствующий хелпер, мы выводим эту модель представлении: @Html.DisplayForModel() :

@model DataAnnotations.Models.Book @{ ViewBag.Title = "Книга"; } @Html.DisplayForModel()

Обычный код, но тут мы сталкиваемся с проблемой:

Как видно, заголовки у свойств точно такие же, как и названия свойств, что не очень удобно. Ведь мы могли назвать свойства как угодно. К тому же мы не хотим, чтобы названия на русскоязычном сайте были на английском языке.

Конечно, в этом случае мы могли бы использовать @Html.LabelFor для настройки названия для каждого отдельного свойства, но в этом случае у нас бы увеличился в несколько раз объем кода, и мы не смогли бы одной строкой вывести всю информацию о модели. К тому же может потребоваться в нескольких представлениях выводить информацию о модели. Поэтому данный подход не оптимален.

И тут нам на помощь приходят аннотации данных, а именно атрибут Display . Нам достаточно поправить модель, указав у нее параметры отображения:

Using System.ComponentModel.DataAnnotations; ........................................... public class Book { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Author { get; set; } public virtual int Year { get; set; } }

Свойство Name атрибута Display содержит строку, которая будет отображаться вместо имени свойства. Больше нам ничего не надо менять. Запустим и увидим новые названия:

Атрибут HiddenInput

В предыдущем примере у нас осталась одна проблемка - это поле Id. Иногда, конечно, может потребоваться вывод поля Id. Но, например, если бы мы выводили модель в режиме редактирования с помощью хелпера @Html.EditorForModel() , то данное поле было бы доступно для редактирования, что не очень хорошо, особенно когда идентификаторы не должны меняться. Чтобы скрыть это поле мы можем применить атрибут HiddenInput :

Using System.ComponentModel.DataAnnotations; using System.Web.Mvc; ........................................... public class Book { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Author { get; set; } public virtual int Year { get; set; } }

Свойство DisplayValue=false указывает, что надо скрыть данное поле. В итоге вы его не увидите:

При использовании хелперов редактирования (Html.EditorFor/Html.EditorForModel) для данного свойства будет сгенерировано скрытое поле:

Атрибут ScaffoldColumn

При редактировании модели атрибут HiddenInput полностью не скрывает поля, так как мы можем посмотреть исходный код страницы и найти соответствующие поля. Чтобы полностью скрыть свойство от хелперов, используется атрибут ScaffoldColumn :

Public virtual int Id { get; set; }

Теперь хелперы редактирования не увидят данное свойство и не создадут для него даже скрытое поле на странице.

Атрибут DataType

Атрибут DataType позволяет предоставлять среде выполнения информацию об использовании свойства. Например, допустим, у нас есть свойство Password:

Public string Password { get; set; }

Для свойства с атрибутом DataType.Password HTML-хелперы создают элемент ввода, у которого атрибут type имеет значение "password". Тогда в браузере вы при вводе данных вы не увидите вводимые символы:

Перечисление DataType может принимать несколько различных значений:

Атрибут UIHint

Данный атрибут указывает, какой будет использоваться шаблон отображения при создании разметки html для данного свойства. Шаблон управляет, как свойство будет рендерится на странице.

Имеются следующие встроенные шаблоны:

    Boolean

    Хелперы редактирования создают флажок (checkbox) для булевых значений. Для значений типа bool? (nullable) создается элемент select с параметрами True, False и Not Set

    Хелперы отображения генерируют те же элементы html, что и хелперы редактирования, только с атрибутом disabled

    Collection

    Используется соответствующий шаблон для рендеринга каждого элемента коллекции. Причем элементы могут быть разных типов.

    Decimal

    Хелперы редактирования создают однострочное текстовое поле - элемент input

    EmailAddress

    HiddenInput

    Создается скрытое поле - элемент hidden input

    Html

    Хелперы редактирования создают однострочное текстовое поле.

    Хелперы отображения просто показывают текст

    MultilineText

    Хелперы редактирования создают многострочное текстовое поле (элемент textarea)

    Object

    Хелперы изучают свойства объекта и выбирают наиболее подходящие для него шаблоны.

    Password

    Хелперы редактирования создают текстовое поле для ввода символов с использованием маски

    Хелперы отображения показывают пароль как есть, без использования маски

    String

    Хелперы редактирования создают однострочное текстовое поле

    Хелперы редактирования создают текстовое поле

Например, используем последний шаблон Url:

Public class Book { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Author { get; set; } public virtual int Year { get; set; } }

Необходимость в метаданных типов

Возможность полностью описывать типы (классы, интерфейсы, структуры, перечисления и делегаты) с помощью метаданных является одной из ключевых в платформе.NET. Во многих технологиях.NET, таких как сериализация объектов, удаленная работа, веб-службы XML и Windows Communication Foundation (WCF), эта возможность нужна для выяснения формата типов во время выполнения. Более того, в средствах обеспечения функциональной совместимости между языками, многочисленных службах компилятора и предлагаемой в IDE-среде функции IntelliSense везде за основу берется конкретное описание типа.

Невзирая на важность (а, возможно, и благодаря ей), метаданные не являются новинкой, поставляемой только в.NET Framework. В Java, CORBA и СОМ тоже применяются похожие концепции. Например, в СОМ для описания типов, содержащихся внутри сервера СОМ, используются специальные библиотеки типов СОМ (которые являются не более чем просто скомпилированным IDL-кодом). Как и в СОМ, в библиотеках кода в.NET поддерживаются метаданные типов, но эти метаданные, конечно же, синтаксически совершенно не похожи на IDL-метаданные из СОМ.

Вспомните, что утилита ildasm.exe позволяет просматривать метаданные всех содержащихся в сборке типов, для чего в ней нужно нажать комбинацию клавиш Ctrl+M. Если открыть в этой утилите любую из сборок *.dll или *.ехе и нажать Ctrl+M, можно увидеть метаданные всех содержащихся в ней типов, как показано на рисунке:

На этом рисунке видно, что метаданные типов.NET отображаются в ildasm.exe очень подробно (в двоичном формате они гораздо компактнее). В действительности описание всех метаданных обычной сборки заняло бы несколько страниц. Однако вполне достаточно будет кратко рассмотреть только некоторые наиболее важные описания метаданных сборки.

Глубоко вдаваться в то, что обозначает синтаксис в каждом из приводимых фрагментов метаданных.NET, не стоит. Главное - понять, что метаданные.NET являются очень описательными и предусматривают перечисление каждого определенного внутри (или упоминаемого с помощью внешней ссылки) типа, который встречается в данной кодовой базе.

Каждый тип, который определен внутри текущей сборки, сопровождается маркером TypeDef #n (TypeDef - сокращение от type definition (определение типа)). Если описываемый тип предусматривает использование еще какого-то типа, определенного в другой сборке.NET, этот второй тип сопровождается маркером TypeRef #n (TypeRef - сокращение от type reference (ссылка на тип)). Маркер TypeRef, по сути, является указателем на полное определение метаданных соответствующего типа во внешней библиотеке. Вкратце, метаданные в.NET представляют собой ряд таблиц, в которых явным образом перечислены все определения типов (TypeDef) и типы, на которые они ссылаются (TypeRef), причем те и другие можно просматривать в специальном окне метаданных утилиты ildasm.exe.

Например в сборке fontinfo.dll, рассматривавшейся в предыдущем разделе, можно встретить подробное описание классов:

Давайте рассмотрим полученные данные более подробно. Маркер TypDefName используется для описания имени данного типа, маркер Extends - для описания базового класса, который лежит в его основе (и каковым в данном случае является тип System.Object), а маркер Field #n - для описания каждого поля, которое входит в его состав. Маркеры Method #n содержат подробное описание инкапсулированных в классе методов.

Последнее обновление: 31.10.2015

При работе с моделью в MVC большее значение играют метаданные. Они позволяют указать некоторую дополнительную информацию об объекте, например, о том, как отображать его свойства в представлении, или о том, как осуществлять валидацию вводимых данных.

Аннотации данных для отображения свойств

Аннотации данных представляют собой атрибуты, которые вы можете найти в пространстве имен System.ComponentModel.DataAnnotations (хотя несколько атрибутов определено в других пространствах).

Атрибут Display

Итак, предположим у нас имеется некоторая модель Book:

Public class Book { public int Id { get; set; } public string Name { get; set; } public string Author { get; set; } public int Year { get; set; } }

И мы пытаемся получить из базы данных один объект этой модели:

Public class HomeController: Controller { BookContext db = new BookContext(); public ActionResult Index() { var firstBook = db.Books.FirstOrDefault(); return View(firstBook); } }

Используя соответствующий хелпер, мы выводим эту модель представлении: @Html.DisplayForModel() :

@model DataAnnotations.Models.Book @{ ViewBag.Title = "Книга"; } @Html.DisplayForModel()

Обычный код, но тут мы сталкиваемся с проблемой:

Как видно, заголовки у свойств точно такие же, как и названия свойств, что не очень удобно. Ведь мы могли назвать свойства как угодно. К тому же мы не хотим, чтобы названия на русскоязычном сайте были на английском языке.

Конечно, в этом случае мы могли бы использовать @Html.LabelFor для настройки названия для каждого отдельного свойства, но в этом случае у нас бы увеличился в несколько раз объем кода, и мы не смогли бы одной строкой вывести всю информацию о модели. К тому же может потребоваться в нескольких представлениях выводить информацию о модели. Поэтому данный подход не оптимален.

И тут нам на помощь приходят аннотации данных, а именно атрибут Display . Нам достаточно поправить модель, указав у нее параметры отображения:

Using System.ComponentModel.DataAnnotations; ........................................... public class Book { public int Id { get; set; } public string Name { get; set; } public string Author { get; set; } public int Year { get; set; } }

Свойство Name атрибута Display содержит строку, которая будет отображаться вместо имени свойства. Больше нам ничего не надо менять. Запустим и увидим новые названия:

Атрибут HiddenInput

В предыдущем примере у нас осталась одна проблемка - это поле Id. Иногда, конечно, может потребоваться вывод поля Id. Но, например, если бы мы выводили модель в режиме редактирования с помощью хелпера @Html.EditorForModel() , то данное поле было бы доступно для редактирования, что не очень хорошо, особенно когда идентификаторы не должны меняться. Чтобы скрыть это поле мы можем применить атрибут HiddenInput :

Using System.ComponentModel.DataAnnotations; using System.Web.Mvc; ........................................... public class Book { public int Id { get; set; } public string Name { get; set; } public string Author { get; set; } public int Year { get; set; } }

Свойство DisplayValue=false указывает, что надо скрыть данное поле. В итоге вы его не увидите:

При использовании хелперов редактирования (Html.EditorFor/Html.EditorForModel) для данного свойства будет сгенерировано скрытое поле:

Атрибут ScaffoldColumn

При редактировании модели атрибут HiddenInput полностью не скрывает поля, так как мы можем посмотреть исходный код страницы и найти соответствующие поля. Чтобы полностью скрыть свойство от хелперов, используется атрибут ScaffoldColumn :

Public int Id { get; set; }

Теперь хелперы редактирования не увидят данное свойство и не создадут для него даже скрытое поле на странице.

Атрибут DataType

Атрибут DataType позволяет предоставлять среде выполнения информацию об использовании свойства. Например, допустим, у нас есть свойство Password:

Public string Password { get; set; }

Для свойства с атрибутом DataType.Password HTML-хелперы создают элемент ввода, у которого атрибут type имеет значение "password". Тогда в браузере вы при вводе данных вы не увидите вводимые символы, а вместо них будут выводиться точки.

Перечисление DataType может принимать несколько различных значений:

Атрибут UIHint

Данный атрибут указывает, какой будет использоваться шаблон отображения при создании разметки html для данного свойства. Шаблон управляет, как свойство будет рендерится на странице.

Имеются следующие встроенные шаблоны:

    Boolean

    Хелперы редактирования создают флажок (checkbox) для булевых значений. Для значений типа bool? (nullable) создается элемент select с параметрами True, False и Not Set

    Хелперы отображения генерируют те же элементы html, что и хелперы редактирования, только с атрибутом disabled

    Collection

    Используется соответствующий шаблон для рендеринга каждого элемента коллекции. Причем элементы могут быть разных типов.

    Decimal

    Хелперы редактирования создают однострочное текстовое поле - элемент input

    EmailAddress

    HiddenInput

    Создается скрытое поле - элемент hidden input

    Html

    Хелперы редактирования создают однострочное текстовое поле.

    Хелперы отображения просто показывают текст

    MultilineText

    Хелперы редактирования создают многострочное текстовое поле (элемент textarea)

    Object

    Хелперы изучают свойства объекта и выбирают наиболее подходящие для него шаблоны.

    Password

    Хелперы редактирования создают текстовое поле для ввода символов с использованием маски

    Хелперы отображения показывают пароль как есть, без использования маски

    String

    Хелперы редактирования создают однострочное текстовое поле

    Хелперы редактирования создают текстовое поле

Например, используем последний шаблон Url:

Public class Book { public int Id { get; set; } public string Name { get; set; } public string Author { get; set; } public int Year { get; set; } }

Тогда мы получим следующий результат:

Таким образом, мы можем управлять отображением свойств модели в представлении.

Этого метода.

Компилятор .NET-языка создает метаданные и сохраняет их в сборку , содержащую CIL . Когда среда CLR исполняет CIL она делает проверку того, что метаданные вызываемого метода совпадают с метаданными, хранящимися в вызывающем методе. Это гарантирует, что метод может быть вызван именно с корректным числом параметров и именно с корректными типами параметров.

Атрибуты

Разработчики могут добавлять метаданные в свой код благодаря атрибутам . Существует два типа (две формы) атрибутов: атрибуты, которые определены в среде CLR (т. н. англ. pseudo custom attributes ), и пользовательские атрибуты (англ. custom attributes ), создаваемые пользователем для добавления в код дополнительных сведений . С точки зрения разработчика оба типа имеют одинаковый синтаксис . Атрибуты в коде являются по сути сообщениями компилятору для создания метаданных. В CIL метаданные (такие как например, модификаторы наследования, модификаторы области видимости), а также почти все, что не является кодом операции или потоками, также помечаются как атрибуты.

Пользовательский атрибут представляет собой обычный класс , наследующий от класса Attribute . Такой атрибут может быть использован для любого метода, свойства, класса или сборки целиком при использовании следующего синтаксиса: [ИмяАтрибута (необязательный параметр , дополнительные пары имя=значение )] . Например:

Пользовательские атрибуты весьма широко используются в платформе.NET Framework. Windows Communication Framework использует атрибуты для определения сервисных контрактов, ASP.NET использует их для предоставления методов как веб-служб , LINQ к SQL использует их для привязки классов к нижележащим реляционным схемам , Visual Studio использует их для группировки свойств объекта, разработчики классов указывают категорию для класса объекта при помощи пользовательского атрибута . Пользовательские атрибуты обрабатываются кодом приложения, а не CLR. Когда компилятор находит пользовательский атрибут, то он создает пользовательские метаданные, нераспознаваемые средой CLR. Разработчик должен реализовать код для чтения и обработки метаданных. В качестве примера, атрибут, показанный в примере выше, может быть обработан следующим кодом:

class CustomAttribute: Attribute { private int paramNumber = 0; private string comment = ""; public CustomAttribute() { } public CustomAttribute(int num) { paramNumber = num; } public String Comment { set { comment = value; } } }

Имя класса связано с именем атрибута. Компилятор среды разработки Visual C# автоматически добавляет строку « Attribute » в конец каждого имени атрибута. Как следствие, каждое имя атрибута класса должно оканчиваться такой строкой, но вполне допускается и определение атрибута без суффикса Attribute . При добавлении атрибута к какому-либо элементу компилятор ищет и по указанному имени и имени со словом Attribute на конце, то есть если написать , то компилятор будет искать и Custom и CustomAttribute . Если же они оба существуют, то компилятор сообщит об ошибке. Во избежание неоднозначности имена атрибутов могут помечаться префиксом « @ », в результате чего [@Custom] будет не то же самое что и CustomAttribute . Использование атрибута вызывает конструктор класса, причем поддерживаются и перегруженные конструкторы. Пары «имя-значение» привязываются к свойствам, при этом «имя» обозначает имя свойства, а «значение» - присвоенное значение свойства.

Иногда появляется путаница относительно добавления атрибута. Например, в следующем коде непонятно, что именно обозначается как «orange»:

В данном случае «orange» может означать какой-нибудь тестовый метод ExampleMethod , его возвращаемое значение или всю сборку целиком. В этом случае компилятор по умолчанию попытается обработать атрибут как атрибут метода. Если это не то, что предполагалось автором кода, или автор просто захотел сделать код более понятным, то допускается указание цели атрибута . Написание укажет на то, что возвращаемым значением будет «апельсин», укажет на всю сборку целиком. Допустимыми целями являются: сборка (assembly), поле (field), событие (event), метод (method), модуль (module), параметр (param), свойство (property), возвращаемое значение (return) и тип (type).

Заранее определённые атрибуты используются так же как и обычные атрибуты, но у них нет настраиваемого обработчика, поскольку компилятор содержит в себе уже встроенное описание таких атрибутов и обрабатывает код в зависимости от установленной метки. Такие атрибуты как Serializable и Obsolete реализуются именно как заранее определённые атрибуты. Заранее определённые атрибуты не должны использоваться ассемблером ILASM, поскольку у него есть собственный синтаксис для описания метаданных.

Хранение метаданных

Сборки содержат в себе таблицы метаданных, описанные в спецификации CIL. Таблицы метаданных могут иметь ноль или более записей (вхождений), причем позиция записи определяет её индекс. Когда код CIL использует метаданные, то он делает это по меткам метаданных. Это 32-битное значение, в котором первые 8 бит содержат данные, идентифицирующие соответствующую таблицу метаданных, а оставшиеся 24 бита определяют индекс метаданных в таблице. SDK платформы содержит пример, именуемый metainfo (рус. метаинформация ), перечисляющий в виде списка таблицы метаданных в сборке. Однако, эта информация довольно редко используется разработчиком. Метаданные в сборке можно просматривать при помощи утилиты ILDASM (Intermediate Language Disassembler), поставляемой в составе.NET Framework SDK.

Отражение

Отражение - это интерфейс программирования приложений (API), используемый для чтения метаданных.NET. API отражения предоставляет возможность реализации в первую очередь логического просмотра метаданных, нежели точный просмотр, обеспечиваемый инструментами типа metainfo. Отражение в версии 1.1 платформы.NET может быть использовано для проверки описания классов и их членов, а также вызова методов. Однако, оно не позволяет среде исполнения получать доступ к CIL ради метода. Версия 2.0 платформы позволяет получать метод из CIL.

Прочие инструменты для работы с метаданными

Помимо пространства имён System.Reflection существуют также и другие инструменты, которые могут применяться для работы с метаданными. Microsoft .NET Framework поставляется совместно с библиотекой для манипуляции метаданными CLR, реализуемой в машинном коде . Для извлечения и манипуляции метаданными могут использоваться и сторонние инструменты, такие как и .

Напишите отзыв о статье "Метаданные в.NET"

Примечания

См. также

Ссылки

  • (рус.)
  • (рус.)

Отрывок, характеризующий Метаданные в.NET

– Нет, уехали.
«Как бы мне не отвечать за промедление! Вот досада!» – думал офицер. Он объездил весь лагерь. Кто говорил, что видели, как Ермолов проехал с другими генералами куда то, кто говорил, что он, верно, опять дома. Офицер, не обедая, искал до шести часов вечера. Нигде Ермолова не было и никто не знал, где он был. Офицер наскоро перекусил у товарища и поехал опять в авангард к Милорадовичу. Милорадовича не было тоже дома, но тут ему сказали, что Милорадович на балу у генерала Кикина, что, должно быть, и Ермолов там.
– Да где же это?
– А вон, в Ечкине, – сказал казачий офицер, указывая на далекий помещичий дом.
– Да как же там, за цепью?
– Выслали два полка наших в цепь, там нынче такой кутеж идет, беда! Две музыки, три хора песенников.
Офицер поехал за цепь к Ечкину. Издалека еще, подъезжая к дому, он услыхал дружные, веселые звуки плясовой солдатской песни.
«Во олузя а ах… во олузях!..» – с присвистом и с торбаном слышалось ему, изредка заглушаемое криком голосов. Офицеру и весело стало на душе от этих звуков, но вместе с тем и страшно за то, что он виноват, так долго не передав важного, порученного ему приказания. Был уже девятый час. Он слез с лошади и вошел на крыльцо и в переднюю большого, сохранившегося в целости помещичьего дома, находившегося между русских и французов. В буфетной и в передней суетились лакеи с винами и яствами. Под окнами стояли песенники. Офицера ввели в дверь, и он увидал вдруг всех вместе важнейших генералов армии, в том числе и большую, заметную фигуру Ермолова. Все генералы были в расстегнутых сюртуках, с красными, оживленными лицами и громко смеялись, стоя полукругом. В середине залы красивый невысокий генерал с красным лицом бойко и ловко выделывал трепака.
– Ха, ха, ха! Ай да Николай Иванович! ха, ха, ха!..
Офицер чувствовал, что, входя в эту минуту с важным приказанием, он делается вдвойне виноват, и он хотел подождать; но один из генералов увидал его и, узнав, зачем он, сказал Ермолову. Ермолов с нахмуренным лицом вышел к офицеру и, выслушав, взял от него бумагу, ничего не сказав ему.
– Ты думаешь, это нечаянно он уехал? – сказал в этот вечер штабный товарищ кавалергардскому офицеру про Ермолова. – Это штуки, это все нарочно. Коновницына подкатить. Посмотри, завтра каша какая будет!

На другой день, рано утром, дряхлый Кутузов встал, помолился богу, оделся и с неприятным сознанием того, что он должен руководить сражением, которого он не одобрял, сел в коляску и выехал из Леташевки, в пяти верстах позади Тарутина, к тому месту, где должны были быть собраны наступающие колонны. Кутузов ехал, засыпая и просыпаясь и прислушиваясь, нет ли справа выстрелов, не начиналось ли дело? Но все еще было тихо. Только начинался рассвет сырого и пасмурного осеннего дня. Подъезжая к Тарутину, Кутузов заметил кавалеристов, ведших на водопой лошадей через дорогу, по которой ехала коляска. Кутузов присмотрелся к ним, остановил коляску и спросил, какого полка? Кавалеристы были из той колонны, которая должна была быть уже далеко впереди в засаде. «Ошибка, может быть», – подумал старый главнокомандующий. Но, проехав еще дальше, Кутузов увидал пехотные полки, ружья в козлах, солдат за кашей и с дровами, в подштанниках. Позвали офицера. Офицер доложил, что никакого приказания о выступлении не было.
– Как не бы… – начал Кутузов, но тотчас же замолчал и приказал позвать к себе старшего офицера. Вылезши из коляски, опустив голову и тяжело дыша, молча ожидая, ходил он взад и вперед. Когда явился потребованный офицер генерального штаба Эйхен, Кутузов побагровел не оттого, что этот офицер был виною ошибки, но оттого, что он был достойный предмет для выражения гнева. И, трясясь, задыхаясь, старый человек, придя в то состояние бешенства, в которое он в состоянии был приходить, когда валялся по земле от гнева, он напустился на Эйхена, угрожая руками, крича и ругаясь площадными словами. Другой подвернувшийся, капитан Брозин, ни в чем не виноватый, потерпел ту же участь.
– Это что за каналья еще? Расстрелять мерзавцев! – хрипло кричал он, махая руками и шатаясь. Он испытывал физическое страдание. Он, главнокомандующий, светлейший, которого все уверяют, что никто никогда не имел в России такой власти, как он, он поставлен в это положение – поднят на смех перед всей армией. «Напрасно так хлопотал молиться об нынешнем дне, напрасно не спал ночь и все обдумывал! – думал он о самом себе. – Когда был мальчишкой офицером, никто бы не смел так надсмеяться надо мной… А теперь!» Он испытывал физическое страдание, как от телесного наказания, и не мог не выражать его гневными и страдальческими криками; но скоро силы его ослабели, и он, оглядываясь, чувствуя, что он много наговорил нехорошего, сел в коляску и молча уехал назад.
Излившийся гнев уже не возвращался более, и Кутузов, слабо мигая глазами, выслушивал оправдания и слова защиты (Ермолов сам не являлся к нему до другого дня) и настояния Бенигсена, Коновницына и Толя о том, чтобы то же неудавшееся движение сделать на другой день. И Кутузов должен был опять согласиться.

На другой день войска с вечера собрались в назначенных местах и ночью выступили. Была осенняя ночь с черно лиловатыми тучами, но без дождя. Земля была влажна, но грязи не было, и войска шли без шума, только слабо слышно было изредка бренчанье артиллерии. Запретили разговаривать громко, курить трубки, высекать огонь; лошадей удерживали от ржания. Таинственность предприятия увеличивала его привлекательность. Люди шли весело. Некоторые колонны остановились, поставили ружья в козлы и улеглись на холодной земле, полагая, что они пришли туда, куда надо было; некоторые (большинство) колонны шли целую ночь и, очевидно, зашли не туда, куда им надо было.
Граф Орлов Денисов с казаками (самый незначительный отряд из всех других) один попал на свое место и в свое время. Отряд этот остановился у крайней опушки леса, на тропинке из деревни Стромиловой в Дмитровское.
Перед зарею задремавшего графа Орлова разбудили. Привели перебежчика из французского лагеря. Это был польский унтер офицер корпуса Понятовского. Унтер офицер этот по польски объяснил, что он перебежал потому, что его обидели по службе, что ему давно бы пора быть офицером, что он храбрее всех и потому бросил их и хочет их наказать. Он говорил, что Мюрат ночует в версте от них и что, ежели ему дадут сто человек конвою, он живьем возьмет его. Граф Орлов Денисов посоветовался с своими товарищами. Предложение было слишком лестно, чтобы отказаться. Все вызывались ехать, все советовали попытаться. После многих споров и соображений генерал майор Греков с двумя казачьими полками решился ехать с унтер офицером.
– Ну помни же, – сказал граф Орлов Денисов унтер офицеру, отпуская его, – в случае ты соврал, я тебя велю повесить, как собаку, а правда – сто червонцев.
Унтер офицер с решительным видом не отвечал на эти слова, сел верхом и поехал с быстро собравшимся Грековым. Они скрылись в лесу. Граф Орлов, пожимаясь от свежести начинавшего брезжить утра, взволнованный тем, что им затеяно на свою ответственность, проводив Грекова, вышел из леса и стал оглядывать неприятельский лагерь, видневшийся теперь обманчиво в свете начинавшегося утра и догоравших костров. Справа от графа Орлова Денисова, по открытому склону, должны были показаться наши колонны. Граф Орлов глядел туда; но несмотря на то, что издалека они были бы заметны, колонн этих не было видно. Во французском лагере, как показалось графу Орлову Денисову, и в особенности по словам его очень зоркого адъютанта, начинали шевелиться.



Рекомендуем почитать

Наверх