За формальное описание общей системы типов в net framework отвечает

Обновлено: 04.07.2024

Главные свойства CSS3, применимые сейчас

Главные свойства CSS3, применимые сейчас Теперь, когда мы точно определили область взаимодействия, в которой можно смело использовать CSS3, нам стоит также определиться, какие свойства CSS3 мы можем использовать. Иными словами, какие фрагменты спецификации достигли того

Поддерживаемые платформы

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

Главные инструменты инфопредпринимателя

Главные инструменты инфопредпринимателя Скачайте эту интеллект-карту по адресу:

3. Главные проблемы и обещание их решения

3. Главные проблемы и обещание их решения «Возможно, вы сталкиваетесь с тем, что нет клиентов и в бизнесе полный бардак. Эти проблемы можно

Главные события

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

Главные события

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

Глава 1 Главные программы для Интернета

Глава 1 Главные программы для Интернета Что для вас Интернет? Уверен, что большинство людей ответят на этот вопрос «общение» или «поиск полезной информации», а может, и то и другое. Именно поэтому наиболее важными программами для работы с Интернетом можно считать те

Алгоритмы и платформы

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

Память на сервере (все платформы)

Память на сервере (все платформы) Оценка памяти сервера включает множество факторов.* Работа сервера Firebird. Сервер Firebird осуществляет эффективное использование ресурсов сервера. Суперсервер (Superserver) после старта использует приблизительно 2 Мбайта памяти. Классический

Смешанные платформы

Смешанные платформы Архитектура Firebird позволяет клиентам, запущенным в одной операционной системе, получить доступ к серверу Firebird, выполняющемуся на платформе и в операционной системе, отличных от клиентских. Часто используемый вариант- одновременный запуск нескольких

Платформы Microsoft Windows

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

Определение платформы

Определение платформы Если нужно определить, на какой платформе запущено ваше приложение, то здесь вам не обойтись без вызова функции Windows API SystemParametersInfo.Для начала нужно создать новый класс PlatformDetector, в котором следует объявить функцию SystemParametersInfo и методы определения

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

Все ошибки можно разделить на две категории: перехватываемые и неперехватываемые (рис. 1.4). При возникновении перехватываемой ошибки ( trapped error ) выполнение программы немедленно прекращается, а неперехватываемая ошибка (untrapped error ) остается незамеченной и может проявиться через некоторое время в абсолютно неожиданном месте.

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

Фрагмент программы, в котором не могут возникнуть неперехватываемые ошибки, называется безопасным ( safe ). Языки программирования, которые обеспечивают безопасность написанных на них программ, также называются безопасными ( safe languages). Безопасность - одно из важнейших свойств языка. Она уменьшает время отладки благодаря отсутствию в программах неперехватываемых ошибок. Кроме того, она гарантирует целостность данных , что позволяет использовать автоматическое управление памятью (в частности, сборку мусора).

Для любого языка программирования можно определить класс ошибок, называемых запрещенными (forbidden errors). В этот класс следует включить все неперехватываемые ошибки, а также некоторое подмножество перехватываемых ошибок. Говорят, что фрагмент программы имеет хорошее поведение (well behaved), если в нем не могут возникать запрещенные ошибки. Языки программирования, которые гарантируют хорошее поведение всех написанных на них программ, называются языками со строгой проверкой (strongly checked ).

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

  • неперехватываемые ошибки не могут возникнуть;
  • запрещенные перехватываемые ошибки также невозможны;
  • другие перехватываемые ошибки могут возникать, и борьба с ними остается в компетенции программиста.

Существуют два пути для диагностики запрещенных ошибок: статическая проверка программы до ее выполнения (static checking) и динамическая проверка во время выполнения ( dynamic checking). Статическая проверка характерна для языков, имеющих систему типов, а динамическая проверка - для так называемых бестиповых (typeless) языков, в которых либо вообще нет системы типов, либо существует только один универсальный тип данных . Динамическая проверка требует дополнительных ресурсов, поэтому статическая проверка является предпочтительной, так как чем больше ошибок диагностируется статически, тем выше эффективность программы.

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

Так как платформа . NET спроектирована с учетом поддержки разных языков программирования, то ее общая система типов ( Common Type System - CTS ) является объединением систем типов основных распространенных в настоящее время языков. Из этого следует, что все языки платформы . NET (объектно-ориентированные, процедурные, функциональные) совместно используют единую систему типов, и это обеспечивает взаимодействие программных компонентов, написанных на разных языках.

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

Основные функции CTS следующие.

1. Формирует среду, способствующую межъязыковой интеграции, безопасности типов, а также высокой производительности исполнения кода.

2. Определяет правила, управляющие наследованием типов, виртуальными методами и продолжительностью существования объектов.

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

4. Определяет правила для видимости типов и доступа к членам типа.


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

Контрольные вопросы

6. В чем принципиальное отличие типов-значений от типов-ссылок?

· свойств (специальная конструкция, занимающая промежуточное положение между полем и методом) [4,5].

public static int Main(string[] args)




В данном случае метод Main() был определен как public и как static. Подробнее об этих ключевых словах будет рассказано далее. Пока достаточно отметить, что ключевое слово publiс в определении метода означает, что этот метод будет доступен извне, а ключевое слово static говорит о том, что этот метод позиционируется на уровне класса, а не отдельного объекта и будет доступен даже тогда, когда еще не создано ни одного экземпляра объекта данного класса.

Кроме того, метод Main() принимает единственный параметр, который должен быть набором символов (string[] args). Хотя этот параметр в программе нигде не встречается, его можно использовать для приема параметров, если приложение запускается из командной строки.

Вся программная логика HelloClass заключена в самом методе Main(). Этот метод обращается к классу Console, определенному внутри пространства имен System. Один из членов метода Console - статический метод WriteLine(), который можно использовать для вывода строки на системную консоль. Поскольку метод Main() был определен как int, то он должен вернуть целочисленное значение (в нашем случае «0» - стандартный код успешного завершения программы).

Приложения (программы) можно разрабатывать на разных языках программирования, которые поддерживают эту технологию.

  • совместное использование разных языков программирования;
  • безопасность и переносимость программ;
  • общую модель программирования на базе платформы Windows.
  • общеязыковая исполнительная среда CLR ( Common Language Runtime );
  • библиотека базовых классов.

Библиотека базовых классов включает в себя определение разнообразных примитивов, которыми могут быть: потоки, графические API-интерфейсы, реализация баз данных, файловый ввод-вывод и прочее.

3. Какой принцип действия общеязыковой среды выполнения CLR ( Common Language Runtime )?

Основное назначение CLR – превратить промежуточный код MSIL в исполнительный код в процессе выполнения программы.

Технология .NET. Процесс преобразования исходного кода в код на языке MSIL (CIL) и создание файла сборки

Рис. 1. Процесс преобразования исходного кода в код на языке MSIL ( CIL или IL ) и создание файла сборки ( *.dll или *.exe )

Исполнительная среда CLR отвечает за определение места размещения сборки (assembly).

Запрашиваемый тип, который размещается в сборке (например, класс ArrayList или другой тип), определяется в двоичном файле ( *.dll или *.exe ) с помощью считывания метаданных этого файла.

После этого CLR размещает в памяти считанный из сборки тип.

Затем CLR превращает CIL-код в соответствующие инструкции, которые подстраиваются под конкретную платформу (в зависимости от ПК, операционной системы и т.п.). Кроме того, на этом этапе происходят необходимые проверки на предмет безопасности.

Последним происходит выполнение запрашиваемого программного кода.

4. Что такое промежуточный язык MSIL ( Microsoft Intermediate Language ) или CIL ( Common Intermediate Language )?

MSIL есть псевдокодом. MSIL определяет набор инструкций, которые:

  • могут переноситься на разные платформы;
  • не зависят от конкретного процессора.

Фактически, MSIL – это язык переносного ассемблера

Сборка предназначена для сохранения пространств имен ( namespaces ). Пространства имен содержат типы. Типами могут быть классы, делегаты, интерфейсы, перечисления, структуры.

Сборка может содержать любое количество пространств имен. Любое пространство имен может содержать любое количество типов (классов, интерфейсов, структур, перечислений, делегатов).

6. Что размещается в сборках?

В сборках размещается CIL -код ( MSIL -код или IL -код) и метаданные.

7. Что такое манифест ( manifest )?

Манифест – это описание самой сборки с помощью метаданных.

В манифесте размещается информация:

  • о текущей версии сборки;
  • сведения о культуре (локализация строчных и графических ресурсов);
  • перечень ссылок на все внешние сборки, которые нужны для правильного функционирования.

Если в исходном коде используются библиотеки базовых классов (например из сборки mscorlib.dll ), то они загружаются с помощью загрузчика классов.

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

После этого приложение выполняется.

Технология .NET. Связь между исходным кодом, компилятором и механизмом выполнения .NET

9. Какие существуют виды сборок?

Существует два вида сборок:

  • однофайловые сборки;
  • многофайловые сборки.

Сборка, которая состоит из одного единого модуля ( *.dll или *.exe ) называется однофайловой. В однофайловых сборках все необходимые CIL -инструкции, метаданные и манифесты размещаются в одном, четко определенном пакете.

В многофайловой сборке один из модулей есть главным ( primary ).

10. В каком файле размещается главная сборка библиотеки MS Visual Studio?

Главная сборка размещается в файле “ mscorlib.dll ”.

11. Что такое общая система типов CTS ?

CTS ( Common Type System ) – система типов, которая содержит полное описание всех возможных типов данных и программных конструкций, которые поддерживаются общеязыковой исполнительной средой CLR . Также здесь описывается то, как эти сущности могут взаимодействовать между собою.

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

12. Какое назначение общеязыковой спецификации CLS?
14. Что такое пространство имен ( namespace )?

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

Примеры названий пространств имен:

Например, в пространстве имен System.Data размещаются основные типы для работы с базами данных, в пространстве имен System.Collections размещаются основные типы для работы с коллекциями.

15. Как вывести содержимое сборок, пространств имен и типов в MS Visual Studio ?

В системе Microsoft Visual Studio есть утилита Object Browser , которая вызывается с меню View (рисунок 3).

Microsoft Visual Studio. Команда вызова утилиты Object Browser

Рис. 3. Вызов утилиты Object Browser

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

Microsoft Visual Studio. Окно Object Browser с выделенной сборкой mscorlib.dll

Рис. 4. Окно Object Browser с выделенной сборкой mscorlib.dll

Если раскрыть содержимое сборки mscorlib (знак “ + ”), то будет отображен список всех пространств имен данной сборки (рисунок 5). Как видно из рисунка, сборка включает пространства имен Microsoft.Win32 , System , System.Collections , System.Collections.Concurrent и много других.

Microsoft Visual Studio. Сборка mscorlib и список пространств имен, которые входят в нее

Рис. 5. Сборка mscorlib и список пространств имен, которые входят в нее

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

На рисунке 6 изображен класс BinaryReader из пространства имен System.IO . По всей видимости, в классе реализованы методы с именами BinaryReader() , Close() , Dispose() , FillBuffer() и прочие.

Microsoft Visual Studio. Утилита Object Browser. Содержимое класса BinaryReader

Рис. 6. Содержимое класса BinaryReader

Для подключения пространства имен используется ключевое слово using .

Примеры подключения пространств имен:

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

Читайте также: