Скачать презентацию Visual C в среде NET Лекция 6 1 Скачать презентацию Visual C в среде NET Лекция 6 1

Лекция 6(CLI).pptx

  • Количество слайдов: 15

Visual C++ в среде. NET Лекция 6 1 Visual C++ в среде. NET Лекция 6 1

Архитектура. NET Framework Microsoft Visual Basic. NET C++ C# Microsoft JScript® … Framework Class Архитектура. NET Framework Microsoft Visual Basic. NET C++ C# Microsoft JScript® … Framework Class Library Common Language Runtime Windows Visual Studio®. NET Common Language Specification LINUX 2

Типы в CLR Основой платформы. NET Framework является среда CLR (Common Language Runtime). А Типы в CLR Основой платформы. NET Framework является среда CLR (Common Language Runtime). А в основе этой среды лежит общая система типов (Common Type System, CTS). Любой тип в CLR — производный от фундаментального системного типа System. Object. Это обстоятельство отличает CLR от ≪классической≫ среды разработки на C++, где типы (базовые, такие как int. long и char) определяют в основном способ размещения в памяти. Типы CLR имеют в своем распоряжении возможности System. Object. 3

Пример описания переменной Equals определяет, равен ли данный экземпляр указанному объекту; Get. Type возвращает Пример описания переменной Equals определяет, равен ли данный экземпляр указанному объекту; Get. Type возвращает тип экземпляра в период выполнения; To. String преобразует значение в эквивалентное строковое представление; Finalize позволяет объекту освободить ресурсы и выполнить прочие операции очистки до того, как им займется сборщик мусора; Memberwise. Clone выполняет неполное копирование экземпляра CLR-типа. 4

Почему изменился C++ Разработчики традиционного C++ должны сами следить за использованием ресурсов и предотвращать Почему изменился C++ Разработчики традиционного C++ должны сами следить за использованием ресурсов и предотвращать утечку памяти. . NET освобождает их от этой заботы и берет сбор мусора на себя. Выявив объекты, подлежащие удалению, сборщик перемещает остальные объекты вниз кучи, освобождая место наверху. Сборщик мусора сам обновляет ссылки на оставшиеся, но перемещенные объекты. После возобновления работы приложение не заметит этих перемещений. Такая память получила название управляемой кучи (managed heap). Язык С++ не является языком. NET платформы и не создаёт управляемого кода и управляемых данных. Все данные являются неуправляемыми и хранятся в стеке или неуправляемой куче. 5

Управляемый С++ Язык C++. NET (Managed С++) - это С++, в который были добавлены Управляемый С++ Язык C++. NET (Managed С++) - это С++, в который были добавлены специальные ключевые слова. Их называют управляемым расширением (managed extension). Например, классы, помеченные ключевым словом __gc, считаются управляемыми и их объекты будут помещены посредством оператора new в память, называемую управляемой кучей (managed heap). Сборщик мусора GC (garbage collector) удаляет из управляемой кучи данные, которые больше не нужны. Неуправляемые данные (unmanaged data) находятся в стеке или размещаются с помощью оператора new в неуправляемой куче (unmanaged heap или heap), из которой удаляются с помощью оператора delete. Программисты могут в пределах одного программного кода разделить данные на управляемые и неуправляемые. 6

Язык C++/CLI является дальнейшим развитием языка C++. NET. Изменения произошли не только в языке, Язык C++/CLI является дальнейшим развитием языка C++. NET. Изменения произошли не только в языке, но и в реализации. Исчезли введённые в языке C++. NET ключе- вые слова, начинающиеся с двух подчёркиваний - __gc, __delegate, __event, __value и другие. Введены другие слова, связанные с управляемым кодом (без подчёркивания). Например, вместо ключевого слова __gc теперь перед управляемым классом ставится ref, вместо двух слов __gc new используется одно слово gcnew. Теперь управляемый указатель (дескриптор отслеживания или просто дескриптор) начинается с символа ^(handle), а не с символа *(pointer), как было в языке C++. NET. 7

Ссылочные типы и типы значения Структуры и классы в С++/CLI могут быть управляемыми (ссылочного Ссылочные типы и типы значения Структуры и классы в С++/CLI могут быть управляемыми (ссылочного типа) и типа значения. Для управляемых типов используются пары слов ref class (ref struct), для типов значений – value class (value struct). Базовые типы int, char, bool, double, float и другие являются типами значениями. 8

Пример объявления классов #include Пример объявления классов #include "stdafx. h" using namespace System; value class Vclass { // Класс Vclass имеет тип-значение private: int x; public: void Set (int v. X) {x= v. X; } void Show ( ) {System: : Console: : Write. Line("x= "+ x. To. String()); } }; ref class Mclass { // Класс Mclass имеет управляемый тип private: int x; public: void Set (int v. X) {x= v. X; } void Show ( ) {System: : Console: : Write. Line("x= " + x. To. String()); } }; 9

Пример использования классов int main() { // Создать объект в стеке Vclass V; V. Пример использования классов int main() { // Создать объект в стеке Vclass V; V. Set (1); V. Show(); // Создать объект в неуправляемой куче Vclass *p. V= new Vclass() ; p. V -> Set(2); p. V -> Show(); // Создать объект в управляемой куче Mclass ^p. M= gcnew Mclass(); p. M -> Set(3); p. M -> Show(); return 0; } 10

Массивы в C++/CLI В C++/CLI можно создавать массивы, которые размещаются в управляемой куче. Синтаксис Массивы в C++/CLI В C++/CLI можно создавать массивы, которые размещаются в управляемой куче. Синтаксис объявления такого массива следующий: [qualifiers] array<[qualifiers]type 1[, dimension]>^ var = gcnew array(val[, val. . . ]) Где: dimension – размерность массива. По умолчанию – 1, максимальная – 32; type 1 – тип переменной; type 2 – тип значений инициализации; val – количество элементов массива; qualifiers – класс памяти (mutable, volatile, const, extern, static); var – имя переменной. 11

Пример двумерного массива объектов #define ARRAY_SIZE 2 ref class My. Class { public: int Пример двумерного массива объектов #define ARRAY_SIZE 2 ref class My. Class { public: int m_i; }; … int i, j; array< My. Class^, 2 >^ X = gcnew array< My. Class^, 2 >(ARRAY_SIZE, ARRAY_SIZE); for (i = 0 ; i < ARRAY_SIZE ; i++) for (j = 0 ; j < ARRAY_SIZE ; j++) { X[i, j] = gcnew My. Class; X[i, j] -> m_i = i; } 12

Свойства В C++/CLI появился новый тип данных свойства. Свойство, описанное в классе, позволяет безопасно Свойства В C++/CLI появился новый тип данных свойства. Свойство, описанное в классе, позволяет безопасно использовать связанную с ним закрытую обычную или ссылочную переменную, устанавливая или получая её значение. Свойство приписывает этой переменной имя свойства. В дальнейшем ссылка к переменной осуществляется через имя свойства. При использовании свойства автоматически выполняются функции set и get, которые устанавливают или получают значение переменной свойства, позволяя при этом осуществлять её контроль или выполнять с ней какие-либо действия. Эти функции определяются при описании свойства. 13

Создание свойства property тип имя-свойства { void set (тип value) { код реализации set, Создание свойства property тип имя-свойства { void set (тип value) { код реализации set, использующий параметр value и переменную или ссылку свойства } тип get () { код реализации get, возвращающий значение переменной или ссылки свойства } } При необходимости можно описать свойство только с одной функцией. Свойство должно иметь доступ public, иначе оно не применимо к объекту. 14

Пример создания и использования свойства ref class CPlane{ // Класс, содержащий описание свойства private: Пример создания и использования свойства ref class CPlane{ // Класс, содержащий описание свойства private: lnt a. Speed; // Закрытая переменная свойства Speed public: // Описание свойства Speed property int Speed { void set (int v. Prop) // Установить значение свойства {a. Speed= v. Prop; } int get() // Возвратить значение свойства {return a. Speed; }> } }; void main ( ){ CPlane ^p= gcnew CPlane; // Создать объект p -> Speed= 600; // Присвоить значение Console: : Write. Line (p -> Speed); // Получить значение и выдать } 15