Взаимная совместимость кодов на разных язык
В этом разделе описывается встроенная поддержка взаимодействия языков в среде CLR и роль спецификации Common Language Specification (CLS) в обеспечении надежного межъязыкового взаимодействия.
Взаимодействие языков — это способность кода к взаимодействию с кодом, написанным на другом языке программирования. Взаимодействие языков может способствовать повышению уровня повторного использования кода и эффективности процесса разработки.
Поскольку разработчики используют широкий набор средств и технологий, каждая из которых поддерживает различные функции и типы, сложилась ситуация, в которой трудно обеспечить взаимодействие разных языков. Тем не менее, встроенная поддержка взаимодействия разных языков в среде выполнения обеспечивает определенные преимущества для языковых компиляторов и средств, обращающихся к среде CLR.
Среда CLR предоставляет необходимую основу для взаимодействия языков, определяя и обеспечивая реализацию системы общих типов, а также предоставляя метаданные. Поскольку все языки, предназначенные для среды выполнения, следуют правилам системы общих типов CTS по использованию и определению типов, использование типов является согласованным для всех языков. Метаданные обеспечивают взаимодействие языков за счет определения универсального механизма хранения и извлечения сведений о типах. Компиляторы хранят в виде метаданных сведения, которые в среде CLR используются для предоставления служб в процессе выполнения. Среда выполнения может управлять работой многоязычных приложений, поскольку способ хранения и извлечения всех сведений о типах одинаков для всех языков, на которых создается код.
Поддержка взаимодействия языков в среде выполнения дает следующие преимущества при работе с управляемым кодом.
Типы могут наследовать реализацию от других типов, передавать объекты методам другого типа и вызывать методы, определенные для других типов, независимо от языка, в которых реализованы эти типы.
Отладчики, профилировщики и другие средства должны уметь работать только с одной средой — промежуточным языком MSIL и метаданными для среды CLR. Это позволит поддерживать любой язык программирования, обращающийся к среде выполнения.
Обработка исключений проходит согласованно во всех языках. Код может создавать исключение на одном языке, которое может перехватываться и обрабатываться объектом, созданном на другом языке.
Даже если среда выполнения предоставляет поддержку выполнения в многоязычной среде для всего управляемого кода, это не дает гарантии того, что все возможности создаваемых типов можно будет полностью использовать в языках программирования, используемых другими разработчиками. Это происходит главным образом потому, что каждый языковой компилятор, обращающийся к среде выполнения, использует систему типов и метаданные для поддержки собственного уникального набора языковых возможностей. Когда неизвестно, на каком языке будет написан вызывающий код, маловероятно предугадать, будут ли предоставляемые компонентом функции доступны вызывающему объекту. Например, если выбранный язык обеспечивает поддержку целых чисел без знака, можно разработать метод с параметром типа UInt32. Однако такой метод был бы бесполезен для языка, в котором отсутствует понятие целого числа без знака.
Для обеспечения доступности управляемого кода для разработчиков, использующих другие языки программирования, платформа .NET Framework предоставляет спецификацию Спецификация CLS (CLS), в которой описывается базовый набор языковых функций и определяются правила использования этих функций. Дополнительные сведения о CLS-совместимости в компонентах и средствах см. в разделе Написание CLS-совместимого кода.
Связанные разделы
Заголовок |
Описание |
---|---|
Объяснение необходимости использования набора средств, общего для всех языков, и определение правил и средств CLS. |
|
Описание значения CLS-совместимости для компонентов и определение уровней CLS-совместимости для средств. |
|
Описание объявления и использования типов, а также управления ими в среде CLR. |
|
Объяснение механизма среды CLR, используемого для описания типа и сохранения этих сведений в самом типе. |