Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Инфа.doc
Скачиваний:
12
Добавлен:
04.06.2015
Размер:
766.98 Кб
Скачать
  1. Ilasm. Применение утилит ildasm и Reflector. Внутреннее устройство сборок Microsoft .Net.

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

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

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

Содержимое сборки можно просмотреть, запустив дизассемблер "Microsoft Intermediate Language Disassembler" (ildasm.exe). Рассмотрим следующий пример — создадим простое консольное приложение, которое выводит на экран строку Hello World:

using System;

namespace SimpleApp

{

class Class1

{

[STAThread]

static void Main(string[] args)

{

Console.WriteLine("Hello World");

}

}

}

Утилиту ildasm.exe можно запустить двумя способами — перейти по адресу C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin и запустить непосредственно файл ildasm.exe или перейти в Пуск\Все программы\ Microsoft Visual Studio .NET 2003 \ Visual Studio .NET Tools \ Visual Studio .NET 2003 Command Prompt и в появившейся командной строке ввести

ildasm.exe

После того как приложение запустится, откроем только что созданную сборку (файл SimpleApp.exe из папки bin/Debug), (рис. 9.1).

Рис. 9.1.  Сборка SimpleApp, открытая с помощью утилиты ildasm.exe

Как мы знаем, у класса всегда есть конструктор. Если он не был создан вручную, компилятор создаст конструктор по умолчанию. В утилите он называется .ctor. Также в созданной нами программе есть метод Main, который принимает строковый массив и не возвращает значений. Щелкаем на методе Main два раза. Открывается окно с MSIL (Microsoft Intermediate Language) кодом этого метода. Здесь видим строковую переменную ldstr со значением "Hello World" и запуск статического метода WriteLine класса Console (рис. 9.2).

Рис. 9.2.  MSIL-код метода Main

На рис. 9.2 я снова привел окно утилиты ildasm.exe: щелкнув на кнопку прокрутки, замечаем номер версии сборки — 1.0.2300.26912.

Частные сборки

Программы, которые написаны на языках, поддерживаемых библиотекой .NET Framework, и на C# в частности, компилируются в код MSIL, которые затем среда CLR (Common Language Runtime) преобразует в машинный код.

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

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

Если мы хотим использовать любой путь для размещения сборки, то следует воспользоваться методом LoadFrom класса Assembly и указать ему адрес нахождения файла со сборкой. Класс Assembly находится в пространстве имен System.Reflection.

Сборки со строгим именем

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

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

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

Строгое имя сборки гарантирует ее уникальность и защиту от декомпиляции.

Применение техники отражения (Reflection)

    Отражение (reflection) — это средство С#, которое позволяет получить информацию о типе. Термин отражение произошел от характера процесса: объект класса Туре воспроизводит, или отражает, базовый тип, который он представляет. Для получения интересующей вас информации вы "задаете вопросы" объекту класса Туре, а он возвращает (отражает) для вас информацию, связанную с этим типом. Отражение — мощный механизм, позволяющий узнать характеристики типа, точное имя которого становится известным только во время выполнения программы, и соответствующим образом использовать их. Многие классы, которые поддерживают средство отражения, являются частью интерфейса .NET Reflection API, который определен в пространстве имен System.Reflection. Таким образом, в программы, которые используют средство отражения, обычно включается следующая инструкция: using System.Reflection;

    Класс System.Туре —, "сердце" подсистемы отображения, поскольку он инкапсулирует тип. Он содержит множество свойств и методов, которые можно использовать для получения информации о типе во время выполнения программы. Класс Туре выведен из абстрактного класса System.Reflection.Memberlnfо. В классе Member Info определены следующие абстрактные свойства, которые предназначены только для чтения:

tуре DecianngType - Тип класса или интерфейса, в котором объявляется анализирузмый член. MemberTypes MemberType - Тип члена. string Name - Имя типа. Type ReflectedType - Тип отражаемого объекта.

Обратите внимание на то, что свойство MemberType имеет тип MemberTypes. Свойство MemberTypes представляет собой перечисление, которое определяет значе- ния, соответствующие различным типам членов. Среди прочих они включают сле- дующие: MemberTypes.Constructor MemberTypes.Method MemberTypes.Field MemberTypes.Event MemberTypes.Property Следовательно, тип члена можно определить, опросив свойство MemberType. На- пример, если свойство MemberType содержит значение MemberTypes .Method, значит, интересующий нас член является методом.

    Класс Memberlnf о включает два абстрактных метода: GetCustomAttributes() и IsDefined (). Оба они связаны с атрибутами. К методам и свойствам, определенным в классе Memberlnf о, класс Туре добавляет немало "своих". Ниже перечислены наиболее часто используемые методы, определенные в классе Туре.

Constructorinfо[] GetConstructors() - Получает список конструкторов для заданного типа Eventlnfо[] GetEvents() - Получает список событий для заданного типа Fieldinfо[] GetFields() - Получает список полей для заданного типа Memberinf о [] GetMembers() - Получает список членов для заданного типа Methodinfо[] GetMethods() - Получает список методов для заданного типа

Propertyinfо[] GetProperties() - Получает список свойств для заданного типа

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

Assembly Assembly - Получает компоновочный файл для заданного типа TypeAttributesAttributes - Получает атрибуты для заданного типа Tyре BaseType - Получает непосредственный базовый тип для заданного типа string FuliName - Получает полное имя заданного типа bool IsArray Истинно, если заданный тип является массивом

2 . Архитектура платформы .NET. Основные компоненты платформы.

Исходные тексты программ компилируются в так называемое промежуточное представление (intermediate language, часто употребляется сокращение IL или MSIL).

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

Важной особенностью трансляции в .NET является то, что промежуточное представление не интерпретируется; вместо этого используется механизм just-in-time компиляции, который генерирует машинный код.

Платформа .NET Framework — это интегрированный компонент Windows, который поддерживает создание и выполнение нового поколения приложений и веб-служб XML.При разработке платформы .NET Framework учитывались следующие цели.

  • Обеспечение согласованной объектно-ориентированной среды программирования для локального сохранения и выполнения объектного кода, для локального выполнения кода, распределенного в Интернете, либо для удаленного выполнения.

  • Обеспечение среды выполнения кода, минимизирующей конфликты при развертывании программного обеспечения и управлении версиями.

  • Обеспечение среды выполнения кода, гарантирующей безопасное выполнение кода, включая код, созданный неизвестным или не полностью доверенным сторонним изготовителем.

  • Обеспечение среды выполнения кода, исключающей проблемы с производительностью сред выполнения сценариев или интерпретируемого кода.

  • Обеспечение единых принципов работы разработчиков для разных типов приложений, таких как приложения Windows и веб-приложения.

  • Разработка взаимодействия на основе промышленных стандартов, которое обеспечит интеграцию кода платформы .NET Framework с любым другим кодом.

Вместе с платформой .NET Framework 3.5 поставляются следующие компоненты:

• среда CLR и библиотеки базовых классов;

• поддержка универсальных типов и методов;

• компиляторы для C#, Visual Basic, C++ и J#;

• ADO.NET;

• ASP.NET;

• Windows Forms;

• веб-службы.

• Windows Presentation Foundation (WPF).

• Windows Communications Foundation (WCF);

• Windows Workflow Foundation (WF).

• LINQ;

• новые компиляторы для C#, Visual Basic, C++ и J#;

• ASP.NET AJAX.

Среда CLR управляет памятью, выполнением потоков, выполнением кода, проверкой безопасности кода, компиляцией и другими системными службами.Эти средства являются внутренними для управляемого кода, который выполняется в среде CLR.

Библиотека классов платформы .NET Framework представляет собой коллекцию типов, которые тесно интегрируются со средой CLR.Библиотека классов является объектно-ориентированной; предоставляя типы, из которых управляемый код пользователя может наследовать функции

3-4. Компиляция и выполнение приложений на платформе Microsoft .NET.

Общеязыковая исполняющая среда CLR (Common Language Runtime)

Возможности среды CLR

Среда CLR управляет памятью, выполнением потоков, выполнением кода, проверкой безопасности кода, компиляцией и другими системными службами.Эти средства являются внутренними для управляемого кода, который выполняется в среде CLR.

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

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

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

Кроме того, управляемая среда выполнения исключает многие часто возникающие проблемы с программным обеспечением.Например, среда выполнения автоматически управляет размещением объектов и ссылками на объекты, освобождая их, когда они больше не используются.Автоматическое управление памятью исключает две наиболее часто возникающие ошибки приложений: утечки памяти и недействительные ссылки на память.

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

Хотя среда выполнения разрабатывалась для будущего программного обеспечения, она также поддерживает сегодняшнее и вчерашнее программное обеспечение.Взаимодействие управляемого и неуправляемого кодов позволяет разработчикам использовать необходимые компоненты COM и библиотеки DLL.

Среда выполнения разработана для повышения производительности.Хотя общеязыковая среда выполнения предоставляет многие стандартные службы времени выполнения, управляемый код никогда не интерпретируется.Средство компиляции по требованию (JIT) позволяет всему управляемому коду выполняться на машинном языке компьютера.Между тем диспетчер памяти устраняет возможность фрагментации памяти и увеличивает объем адресуемой памяти для дополнительного повышения производительности.

И наконец, среда выполнения может размещаться в высокопроизводительных серверных приложениях, таких как Microsoft® SQL Server™ и Internet Information Services (IIS).Такая инфраструктура позволяет использовать управляемый код для написания собственной логики программ, пользуясь при этом высочайшей производительностью лучших производственных серверов, которые поддерживают размещение среды выполнения.

Центральной частью каркаса .NET является его Общеязыковая исполняющая среда - Common Language Runtime (CLR), или .NET runtime.

Код, исполняемый под управлением CLR, часто называют управляемым кодом.

Однако перед тем как код сможет исполниться CLR, любой исходный текст (на C# или другом языке) должен быть скомпилирован. Компиляция в .NET состоит из двух шагов:

  • Компиляция исходного кода в IL.

  • Компиляция IL в специфический для платформы код с помощью CLR.

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

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

Важной особенностью трансляции в .NET является то, что промежуточное представление не интерпретируется; вместо этого используется механизм just-in-time компиляции, который генерирует машинный код.

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

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

очевидно, обеспечивает более высокую скорость выполнения приложения по сравнению

со вторым, но более требователен к дисковой памяти. Впрочем, сегодня, когда в обыч-

обычный настольный компьютер можно установить один — два недорогих диска объемом

60-120 Гбайт, этот фактор не играет существенной роли.

Достоинства: 1 – возможность обработки исключений 2 – универсальность использования разных языков и подключения библиотек. Недостатки: требования высокой производительности.

  1. Атрибуты в .NET. Назначение. Привести примеры использования атрибутов.

Атрибуты предоставляют эффективный метод связывания декларативной информации с кодом (типы, методы, свойства и т. д.).Атрибут, связанный с сущностью программы, может быть запрошен во время выполнения с помощью метода, называемого отражением..Дополнительные сведения см. в разделе Отражение (C# и Visual Basic).

Атрибуты имеют следующие параметры.

  • Атрибуты добавляют в программу метаданные.Метаданные представляют собой сведения о типах, определенных в программе.Все сборки .NET содержат заданный набор метаданных, описывающих типы и члены типов, определенных в сборке.Для задания необходимых дополнительных сведений можно добавить атрибуты.Дополнительные сведения см. в разделе Создание настраиваемых атрибутов (C# и Visual Basic).

  • Один или несколько атрибутов могут применяться к сборкам, модулям или более мелким программным элементам, таким как классы и свойства.

  • Атрибуты могут принимать аргументы точно так же, как методы и свойства.

  • Программа может проверить собственные метаданные или метаданные в других программах с помощью отражения.Дополнительные сведения см. в разделе Обращение к атрибутам с помощью отражения (C# и Visual Basic).