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