* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Основы CLS
15 апреля 2009
Нет необходимости доказывать, что одни и те же программные конструкции в раз- ных языках выглядят абсолютно по-разному. Например, в С# и Delphi объединение строк (конкатенация) производится с помощью оператора плюс "+", а в Visual Basic для этой цели используется амперсант "&". Для среды выполнения .NET такая разни- ца в синтаксисе абсолютно безразлична: все равно соответствующие компиляторы создадут одинаковый код IL. Однако языки программирования отличаются не только синтаксисом, но и возможностями. Например, в одних языках программирования разрешена перегрузка операторов, а в других — нет. Одни языки могут использовать беззнаковые типы данных, в других такие типы данных не предусмотрены. Поэтому нужны некие единые правила для всех языков .NET.
Если им следовать, то программ- ные модули, написанные на разных языках, будут нормально взаимодействовать друг с другом. Такой набор правил определен в универсальной спецификации языка (CLS). Набор правил CLS не только гарантирует нормальное взаимодействие блоков кода, созданных на разных языках, но и определяет минимальные требования, которые предъявляются к любому компилятору .NET. Необходимо помнить, что CLS — это лишь часть тех возможностей, которые определены в CTS. Правилам CLS должны удовлетворять и инструментальные средства среды разра- ботки — если мы хотим обеспечить межъязыковое взаимодействие, они должны гене- рировать только такой код, который соответствует требованиям CLS. У каждого пра- вила CLS есть название (например, CLS Rule 6). Вот пример одного из самых важных правил — правило номер 1. Правило 1. Правила CLS относятся только к частям типа, предназначенным для взаимодействия за пределами сборки, в которой они определены. Из этого правила следует, что при реализации какого-либо типа можно сколько угодно нарушать правила CLS — это ни на что не повлияет. Например, можно создать приложение .NET, которое взаимодействует с внешним миром с помощью трех клас- сов, и в каждом из этих классов только одна функция. Правилам CLS в этом случае должны удовлетворять только три этих функции (область видимости, соглашения об именовании, типы параметров и т.д.). Во внутренней реализации этих функций, клас- сов или приложения в целом может быть сколько угодно отступлений от правил CLS.