Иллюстрированный самоучитель по Architecture .NET

Программирование на управляемом C++

  • Место C++ в мире .NET

    В каждой новой версии Visual C++ компания Microsoft расширяет возможности языка во многих направлениях. Visual C++ .NET не является исключением, поддерживая множество новых возможностей, для использования которых введены новые ключевые слова и атрибуты.
  • Использование расширений управляемого C++

    При разработке управляемого кода на Visual C++ используются несколько новых ключевых слов, а расширение компилятора C++, позволяющее создавать приложения для .NET, вызывается с помощью параметра /CLR (Компиляция для выполнения в общеязыковой среде).
  • Ваша первая программа на управляемом C++ .NET

    Хотя вы, почти наверняка, хорошо знакомы с C++, мы начнем с рассмотрения очень простого, но традиционного примера– программы HelloWorld (Привет, мир). В этом разделе мы расскажем, как написать, скомпилировать и запустить эту и другие программы.
  • Директива #using и оператор using

    Директива #using делает доступной для компилятора информацию о типах, содержащуюся в сборке. Сборка содержит метаданные (описание информации о типах) и код на промежуточном языке IL.
  • Стандартный ввод-вывод

    Класс System::Console (Система::Консоль) обеспечивает поддержку стандартного ввода-вывода. Метод ReadLine класса System::Console (Система::Консоль) считывает введенную с клавиатуры строку как текстовую.
  • Класс System::string (Система::Строка)

    Класс System::String (Система::Строка) инкапсулирует как управляемый объект строку символов Unicode. Класс String (Строка) определен в пространстве имен System (Системное пространство имен) и является стандартной частью .NET Framework. Тип String (Строка) представляет собой конечный (sealed) класс;
  • Класс System::Array (Система::Массив)

    В отличие от массивов в обычном C++, которые являются простым типом указателя, управляемые массивы являются полноценными управляемыми объектами, расположенными в динамически распределяемой области. System::Array (Система::Массив) – абстрактный класс, являющийся базовым для всех управляемых массивов. Для определения неуправляемых массивов можно использовать синтаксис обычного C++;
  • Программа Hotel (Гостиница)

    Теперь представим первую версию программы управления системой бронирования Гостиничных номеров, которую мы будем использовать и расширять в следующих главах. Обратите внимание, что класс Hotel (Гостиница) хранится не в сборке ЕХЕ, а в динамически подключаемой библиотеке (DLL).
  • Отображение C++ на спецификацию общего (универсального) языка (CLS) и .NET Framework. Типы данных C++ и общеязыковая среда выполнения CLR.

    C++ – мощный язык программирования, предоставляющий широкий выбор примитивных типов и позволяющий расширять возможности типов определением классов и интерфейсов. Однако одна из главных идей .NET – возможность создания кода на разных языках и объединение скомпилированного кода в интегрированное решение, работающее на основе общей платформы (общеязыковая среда выполнения CLR).
  • Типы данных C++ и .NET Framework

    С другой стороны, некоторым типам C++ соответствуют классы .NET Framework. Для примитивных типов, таких, как int и float (с плавающей точкой), соответствующие классы .NET являются оберточными (wrapping) или, как их еще называют, упаковочными (boxing).
  • Программирование на C++ для платформы .NET

    В этом разделе главы мы изучим основные аспекты создания кода на управляемом C++. В частности, будут рассмотрены все ключевые слова расширения управляемости C++, поддерживаемые Visual C++ .NET. Заметим, что это далеко не все ключевые слова Visual C++ 7.0, не определенные стандартом ANSI C++, – ведь мы концентрируем ваше внимание именно на расширении управляемости C++.
  • Управляемые и неуправляемые типы

    Управляемый тип – тип данных, инициализируемый (обычно с помощью оператора new (создать)) в управляемой динамически распределяемой области памяти, но ни в коем случае не в неуправляемой динамически распределяемой области памяти или стеке.
  • Управление сборкой мусора

    В документации по языкам .NET вы могли встречать описание метода Finalize (Завершить), используемого для освобождения ресурсов, не находящихся в управляемой динамически распределяемой области памяти, но созданных управляемыми объектами. Однако в C++ реализовывать данный метод не надо.
  • Типовая безопасность

    Программы, написанные на C++, не обладают свойством типовой безопасности. Программы же на управляемом C++ должны гарантированно обладать указанным свойством. Однако, из-за того, что программы C++ могут содержать неуправляемый код, они не обязательно обладают свойством типовой безопасности.
  • Типы значений

    Ключевое слово _value (значение) похоже на _nogc (без сборки мусора), поскольку оно используется для того, чтобы класс или структура не участвовали в сборке мусора. Это полезно для определения объектов в стеке, а не в управляемой динамически распределяемой области памяти.
  • Абстрактные типы

    Значение ключевого слова _abstract (абстрактный) очень похоже на значение ключевого слова abstract (абстрактный) в языке Java. Оно также напоминает о сложившейся традиции рассматривать класс C++, содержащий хотя бы одну чистую (pure) виртуальную функцию, как абстрактный.
  • Интерфейсы

    Ключевое слово _interface (интерфейс) технически не относится к расширению управляемости, так как его можно использовать и в управляемом, и в неуправляемом коде. Однако оно часто используется при создании управляемого кода, поэтому стоит остановиться для его рассмотрения.
  • Упаковка и распаковка примитивных типов данных

    Упаковка и распаковка – важная концепция программирования в .NET вне зависимости от того, какой именно язык программирования вы используете. Одно из самых важных преимуществ .NET – унифицированная система типов.
  • Делегаты

    Ключевое слово _delegate (делегат) используется для объявления класса-делегата, основанного на описании сигнатуры метода. Делегаты очень сходны с указателями на функции в обычном C++, с той лишь разницей, что делегат может указывать только на метод управляемого класса.
  • События

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

    Ключевое слово _property (свойство) используется для указания на то, что метод получения и/или установки реализует свойство управляемого класса.
  • Закрепление управляемых объектов

    Ключевое слово _pin (закрепить) указывает на то, что указатель на управляемый объект будет оставаться корректным (т.е. общеязыковая среда выполнения CLR не переместит Объект в памяти) на протяжении существования закрепленного указателя.
  • Конечные классы

    Ключевое слово _sealed (конечный) указывает на то, что класс или структуру нельзя использовать в качестве базового типа. Другими словами, в иерархии наследования этот класс или структура – терминальный тип. Ключевое слово _sealed (конечный) можно также применять к отдельному методу класса.
  • Управляемое приведение типов

    Ключевое слово _try_cast приводит к возникновению исключения System::InvalidCastException при попытке выполнить приведение типов, не поддерживаемое общеязыковой средой выполнения CLR. Это похоже на возникновение исключения bad_cast при выполнении оператора dynamic_cast в C++ и на исключение ClassCastException, возникающее при некорректном приведении типов в Java.
  • Определение ключевых слов в качестве идентификаторов

    Ключевое слово _identifier (идентификатор) позволяет использовать любое слово, включая и ключевое, в качестве идентификатора. Его можно использовать и для слов, не являющихся ключевыми, но это не дает никаких преимуществ, и потому является бессмысленным.
  • Обработка исключений

    Без сомнения, вы уже хорошо знакомы с механизмом исключений в стандартном C++, так что хорошо понимаете, как работают управляемые исключения.
  • Атрибуты C++. Резюме.

    Visual C++ .NET поддерживает использование атрибутов, позволяющих создавать обычный неуправляемый код, такой, как компоненты модели компонентных объектов Microsoft (COM), даже с меньшими усилиями, чем раньше.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.