Система общих типов CTS и спецификация CLS

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

Система общих типов CTS

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

Чтобы сделать это без каких-либо затруднений, требуется способ описания всех поддерживаемых типов. Именно за это и отвечает система общих типов CTS. Она предназначена для выполнения следующих задач:

  • Создание платформы для выполнения на разных языках.
  • Предоставление объектно-ориентированной модели для поддержки реализации различных языков в реализации .NET.
  • Определение набора правил, которым должны следовать все языки при работе с типами.
  • Предоставление библиотеки, которая содержит базовые типы-примитивы, используемые при разработке приложений (например, Boolean, Byte, Char и т. д.).

Система CTS определяет две разновидности типов, которые должны поддерживаться: типы значений и ссылочные типы. Имена разновидностей указывают на их определения.

Объекты ссылочных типов представлены ссылкой на фактическое значение объекта. Здесь ссылка аналогична указателю в C/C++. Она просто указывает на адрес памяти, где находятся значения объектов. Это оказывает значительное влияние на способ использования этих типов. Если назначить ссылочный тип переменной, а затем передать эту переменную, например, в метод, любые изменения объекта будут отражены на основном объекте. Копирование при этом не выполняется.

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

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

  • Классы
  • Структуры
  • Перечисления
  • Интерфейсы
  • Делегаты

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

Спецификация CLS

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

Спецификация CLS является подмножеством системы CTS. Это означает, что все правила в CTS применяются и к CLS, если только в CLS не действуют более строгие правила. Если компонент создается с использованием только правил CLS, то есть предоставляет в своем API только функции CLS, он считается CLS-совместимым. Например, <framework-librares> являются CLS-совместимыми, так как они должны работать во всех языках, поддерживаемых в .NET.

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

Дополнительные ресурсы