Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ООП C#.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
14 Мб
Скачать
☆

Роль библиотек базовых классов

В дополнение к среде CLR и спецификациям CTS/CLS, платформа .NET предоставляет библиотеку базовых классов, которая доступна всем языкам программирования .NET. Эта библиотека не только инкапсулирует разнообразные примитивы, такие как потоки, файловый ввод-вывод, системы визуализации графики и механизмы взаимодействия с различными внешними устройствами, но также обеспечивает поддержку для многочисленных служб, требуемых большинством реальных приложений.

Рис. 1. Отношения между CLR, CTS, CLS и библиотеками базовых классов

Что привносит язык C#

Синтаксис языка программирования C# выглядит очень похожим на синтаксис языка Java. Однако называть C# клоном Java неправильно. В действительности и С#, и Java являются членами семейства языков программирования, основанного на С (куда также входят С, Objective С, C++), и потому они разделяют схожий синтаксис.

Вследствие того, что C# представляет собой гибрид из нескольких языков, он является таким же синтаксически чистым — если не чище — как и Java, почти столь же простым, как VB, и практически таким же мощным и гибким, как C++. Ниже приведен далеко не полный список ключевых особенностей языка С#.

  • Указатели использовать не требуется! В программах на C# обычно не возникает нужды в манипулировании указателями напрямую

  • Автоматическое управление памятью посредством сборки мусора. Учитывая это, ключевое слово delete в C# не поддерживается.

  • Формальные синтаксические конструкции для классов, интерфейсов, структур, перечислений и делегатов.

  • Аналогичная языку C++ возможность перегрузки операций для специальных типов без излишних сложностей

  • Возможность создания обобщенных типов и обобщенных членов. Используя обобщения, можно создавать очень эффективный и безопасный к типам код, который определяет множество заполнителей, указываемых во время взаимодействия с обобщенными элементами

  • Поддержка анонимных методов, которые позволяют предоставлять встраиваемую функцию везде, где требуется тип делегата.

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

  • Включение лямбда-операции (=>), которая еще больше упрощает работу с типами делегатов .NET.

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

Возможно, наиболее важный аспект, который следует знать о языке С#, заключается в том, что он порождает код, который может выполняться только в рамках исполняя ющей среды .NET (использовать C# для построения COM-сервера или неуправляемого приложения C/C++ не допускается). Выражаясь официально, для обозначения кода, ориентированного на исполняющую среду .NET, применяется термин управляемый код. Двоичный модуль, который содержит управляемый код, называется сборкой (сборки более подробно рассматриваются далее в этой главе). В противоположность этому, код, который не может обслуживаться непосредственно исполняющей средой .NET, называется неуправляемым кодом.

Обзор сборок .NET

Какой бы язык .NET не был выбран для программирования, важно понимать, что хотя двоичные модули .NET имеют то же самое файловое расширение, как и неуправляемые двоичные компоненты Windows (*.dll или *.ехе), внутренне они устроены совершенно по-другому. В частности, двоичные модули .NET содержат не специфические, а независимые от платформы инструкции на промежуточном языке (Intermediate Language — IL) и метаданные типов.

Относительно аббревиатуры IL уместно сказать несколько дополнительных слов. IL также известен как промежуточный язык Microsoft (Microsoft Intermediate Language — MSIL) или же общий промежуточный язык (Common Intermediate Language — CIL).

Рис. 2. Все .NET-компиляторы генерируют инструкции CIL и метаданные

На этом этапе может возникнуть вопрос о том, какую выгоду приносит компиляция исходного кода в CIL, а не напрямую в набор ориентированных на конкретную платформу инструкций. Одним из самых важных преимуществ такого подхода является языковая интеграция. Как уже можно было увидеть, все компиляторы .NET генерируют примерно одинаковые CIL-инструкции. Благодаря этому все языки могут взаимодействовать в рамках четко обозначенной двоичной “арены”. Более того, поскольку CIL не зависит от платформы, сама .NET Framework является независимой от платформы, предоставляя те же самые преимущества, к которым привыкли разработчики на Java (например, единую кодовую базу, способную работать в средах разных операционных систем). В действительности существует международный стандарт для языка C# и крупного подмножества платформы .NET, а также реализации для многих операционных систем, отличных от Windows

Из-за того, что сборки содержат CIL-инструкции, а не инструкции, специфичные для платформы, CIL-код перед использованием должен компилироваться на лету. Компонент, который отвечает за компиляцию CIL-кода в понятные процессору инструкции, называется оперативным (just-in-time — JIT) компилятором (иногда его называют Jitter). Исполняющая среда .NET использует JIT-компилятор в соответствии с целевым процессором и оптимизирует его для базовой платформы.