⇒ Библиотека книг по компьютерным технологиям
⇒ ⇒ Разработка Windows-приложений на Microsoft Visual Basic .NET и Microsoft Visual C# .NET. Учебный курс MCAD/MCSD
⇒ ⇒ ⇒ Глава 1. Введение в .NET Framework
⇒ ⇒ ⇒ ⇒ Занятие 2. Библиотека базовых классов .NET
Читать далее: Применение типов .NET Framework в приложениях
Как говорилось ранее, в .NET Framework две разновидности типов: ссылочные типы (reference types) и типы значений (value types). Основное различие между ними заключается в способе доступа к переменным, объявленным с этими типами. Чтобы разобраться в сути этого различия, необходимо кратко пояснить основы динамического использования памяти.
Занимаемая приложением память складывается из двух основных компонентов: стека (stack) и кучи (heap). Стек — это область памяти, резервируемая для исполнения программы. Стек напоминает стопку тарелок: если нужна чистая тарелка, берут тарелку из стопки (то есть ту, которую положили последней). С переменными программы происходит тоже самое: при вызове функции все объявленные в ней переменные заталкиваются в стек (эта операция называется push
); если эта функция вызовет другую функцию, то все переменные, объявленные новой функцией тоже попадут в стек. Когда функция, вызванная последней, завершится, ее переменные выходят из области видимости (scope) программы и выталкиваются из стека (эта операция называется pop
); в результате память, занимаемая этими переменными, освобождается, и выполнение программы продолжается.
Куча — отдельная область памяти, резервируемая для создания объектов, которые предназначены для многократного использования. CLR выделяет в куче память под объекты и управляет утилизацией памяти, занятой неиспользуемыми объектами, посредством механизма под названием сбор мусора.
Примечание. Процедура сбор мусора обсуждается на занятии 6.
Память под экземпляры типов значений выделяется из стека. При выходе из области видимости переменной, объявленной с типом значения, переменная уничтожается, а занятая ей память освобождается. Для переменной ссылочного типа выделяются сразу две области памяти: в куче — под сам объект и в стеке — под переменную с указателем на этот объект. Когда функция обращается к такой переменной, та возвращает адрес объекта, на который она ссылается. Когда же переменная покидает область видимости, уничтожается указатель, но не сам объект. При наличии других ссылок на этот объект он сохраняется, а если все ссылки на объект уничтожены, то он становится добычей сборщика мусора (см. Занятие 6).
В качестве примеров типов значений можно привести элементарные типы данных: целочисленные (int
), булевы (bool
), символьные (char
) и т. п., а также структуры (struct
) и перечислимые типы (enum
), определяемые пользователем. Большинство ссылочных типов представлено классами. Кроме того, к ссылочным типам относятся интерфейсы, делегаты и массивы. Классы и структуры обсуждаются на занятии 3 этой главы, а остальные ссылочные типы и типы значений — в главе 3.
Примечание. Везде в этой книге, где в одном месте показаны примеры ключевых слов Visual Basic и Visual C#, первым приводится пример на Visual Basic, а за ним в скобках — пример на Visual C#.
Все книги представлены на сайте исключительно для ознакомления с содержанием. |