Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итоговый конспект Тельнов.docx
Скачиваний:
10
Добавлен:
07.04.2023
Размер:
7.75 Mб
Скачать

53. Язык c#: сборки, манифесты, домены, компоненты.

Сборкой (assembly) называется единица развертывания управляемого кода. Сборку можно представить как коллекцию фрагментов кода, типов, ресурсов. Сборка обеспечивает управление версиями. Повторное использование кода и безопасность приложений, созданных на основе .NET Framework. Стандартные сборки .NET имеют форму исполняемого файла (exe) или динамической библиотеки (dll). Динамические сборки могут состоять из нескольких файлов. Сборки могут содержать один или несколько модулей. Модуль – это отдельно компилируемая единица исходного кода. Манифест сборки содержит следующие метаданные: требования к версиям, удостоверения безопасности, определения области действия сборки, разрешения ссылок на ресурсы и классы. Манифест сборки может храниться в файле exe, файле dll, или в отдельном файле.

Пример сборки из одного файла:

MyAssembly.dll

Манифест сборки

Метаданные типов

MSIL-код

Ресурсы

Пример сборки из нескольких файлов:

MyAssembly.dll Util.netmodule

Манифест сборки ---------------------🡪Метаданные типов

Метаданные типов | MSIL- код

MSIL-код |

|

| Graphic.bmp

-----------🡪Ресурсы

Операционные системы и среды выполнения обычно содержат средства изоляции приложений друг от друга (например, в Windows - это процессы).

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

Код, используемый одним приложением, не может иметь непосредственного доступа к коду или ресурсам другого приложения. В среде CLR эта изоляция реализована за счет запрета прямых вызовов между объектами в различных доменах приложений. Объекты, передаваемые от домена к домену, копируются или взаимодействуют через представителей объектов (proxy).

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

Объект становится компонентом, если он соответствует принятому стандарту взаимодействия. В .NET Framework этот стандарт реализуется с помощью интерфейса IComponent. Любой класс, реализующий интерфейс Icomponent является компонентом .NET Framework. Компоненты обладают свойствами:

1. Могут самостоятельно явным образом управлять внешними ресурсами.

2. Поддерживают визуальное проектирование. Компонент можно добавить на панель элементов Visual Studio или перетащить на любую готовую форму.

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

54. Обзор различий между языками C# и С++.

Область

Различия между С# и C++

Наследование

В С# не разрешено множественное наследование классов. От интерфейсов множественное наследование разрешено. Интерфейс не имеет свойств (т.е. не содержит данных), а описывает только методы.

Массивы

В С++ массив задаётся адресом первого элемента. В С# массивы – это объекты, которые включают многие свойства и методы.

Строки

В С++ строка – это массив символов. В С# строки – это сложные объекты с поддержкой методов поиска.

Передача аргументов

В С++ аргументы передаются «по значению», если явным образом не использованы указатели или ссылочные типы. В С# аргументы передаются «по ссылке» (кроме структур), с модификаторами ref или out.

Делегаты

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

Методы базового класса

В С# применяется ключевое слово base для вызова перекрытых членов базового класса из произвольных классов. Перекрытие виртуальных и абстрактных методов выполняется с помощью ключевого слова override.

Обработка исключений

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

Глобальные элементы

С# является чистым объектно-ориентированным языком. Наличие глобальных переменных или методов не допускается. Все данные и методы должны содержаться в элементах class или struct.

Указатели

Манипуляции с указателями и адресная арифметика допускаются в C# только в режиме unsafe (небезопасный режим).

Управление памятью

В С++ полученная динамическая память должна высвобождаться явным образом. В С# выполняется автоматическая «сборка мусора».

Шаблоны классов

В С# универсальные методы и типы поддерживают параметризацию типов приблизительно так, как это реализовано в шаблонах С++.

Ввод/вывод

Службы ввода-вывода и форматирования в С# опираются на библиотеку времени выполнения платформы .NET Framework.

Main

Метод Main в С# объявляется не так, как функция main в С++. Имя метода пишется с заглавной буквы, и этот метод является static. Доступна обработка аргументов командной строки.

Импорт типов

В С++ типы, общие для нескольких модулей, помещаются в заголовочные файлы. В C# возможен контроль типов на этапе выполнения кода (рефлексия), для этого используются метаданные.

STL

В С# имеется библиотека контейнерных классов (коллекций). Ключевое слово foreach позволяет выполнять итерацию массивов и коллекций.