Введение в теорию программирования. Объектно-ориентированный подход


Основные понятия языка программирования C# - часть 4


Каждый такой файл имеет расширение .CS (в нашем примере файлы названы FileName1.cs, FileName2.cs и FileName3.cs).

Любой файл с исходным текстом на языке программирования C# может как содержать пространства имен, так и не содержать их (в нашем примере файл FileName2.cs включает три пространства имен, A, B и C, а FileName1.cs и FileName3.cs не содержат пространств имен).

Наконец, каждое пространство имен может как содержать описание классов (одного или нескольких), так и не содержать (в нашем примере пространство имен B содержит три описания трех классов (X, Y и Z), а пространства имен А и С не содержат ни одного описания классов).

Ранее в ходе лекций уже обсуждались механизмы boxing и unboxing, реализованные в различных средах разработки программного обеспечения Microsoft .NET. Напомним, что эти механизмы используются для преобразования типов выражений языков программирования из ссылочных в типы-значения и обратно.

Таблица 15.2. Сопоставление ссылочных типов и типов-значений.

 Типы-значенияСсылочные типыПеременная содержитПеременная хранитсяЗначение по умолчниюОператор присваиванияПример
значениессылку на значение
в стекев куче
0, false, ‘\0’ null
копирует значениекопирует ссылку
int i = 25;
int j = i;
i [25]
j [25]
string s = "John"
string sl = s;
s [ ]
[John]
sl [ ]

Рассмотрим более подробно реализацию двух основных семейств типов данных, а именно, ссылочных типов и типов-значений, применительно к языку программирования C#. Для определенности возьмем случай одного из простейших объектов языка программирования C#, а именно, переменной.

В соответствии с названиями, переменная в случае применения типов-значений содержит собственно значение, а при использовании ссылочных типов – не само значение, а лишь ссылку (указатель) на него.

Местом хранения переменной, определенной как тип-значение, является стек, а определенной как ссылочный тип – "куча" (последнее необходимо для динамического выделения и освобождения памяти для хранения переменной произвольным образом).

Значением, которым переменная инициализируется по умолчанию (необходимость выполнения этого требования диктуется идеологией безопасности Microsoft .NET) в случае определения посредством типа-значения является 0 (для целого или вещественного типа данных), false (для логического типа данных), ‘\0’(для строкового типа данных), а в случае определения посредством ссылочного типа – значение пустой ссылки null.

При выполнении оператора присваивания в случае переменной-значения копируется значение, а в случае переменной-ссылки – ссылка.

Приведенный пример иллюстрирует различия в реализации типов-ссылок и значений (см. табл. 15.2).




Начало  Назад  Вперед



Книжный магазин