Типы, характеризуемые значениями, ссылочные типы и оператор присваивания
Типы, характеризуемые значениями, ссылочные типы и оператор присваивания
Теперь изучите следующий метод Main() и рассмотрите его вывод, показанный на рис. 3.12.
static void Main(string[] args) {
Console.WriteLine("*** Типы, характеризуемые значением / Ссылочные типы ***");
Console.WriteLine('-› Создание p1");
MyPoint p1 = new MyPoint();
p1.x = 100;
p1.у = 100;
Console.WriteLine("-› Приcваивание p1 типу p2 ");
MyPoint p2 = p1;
// Это p1.
Console.WriteLine"p1.x = {0}", p1.x);
Console.WriteLine"p1.y = {0}", p1.y);
// Это р2.
Console.WriteLine("p2.x = {0}", p2.x);
Console.WriteLine("p2.у = {0}", p2.y);
// Изменение p2.x. Это НЕ влияет на p1.x.
Console.WriteLine("-› Замена значения p2.x на 900");
р2.х = 900;
// Новая печать.
Console.WriteLine("-› Это снова значения х… ");
Console.WriteLine("p1.x = {0}", p1.x);
Console.WriteLine("p2.x = {0}", р2.х);
Console ReadLine();
}

Рис. 3.12. Для типов, характеризуемых значениями, присваивание означает буквальное копирование каждого поля
Здесь создается переменная типа MyPoint (с именем p1), которая затем присваивается другой переменной типа MyPoint (р2). Ввиду того, что MyPoint является типом, характеризуемым значением, в результате в стеке будет две копии типа MyPoint, каждая из которых может обрабатываться независимо одна от другой. Поэтому, когда изменяется значение р2.х, значение p1.x остается прежним (точно так же, как в предыдущем примере с целочисленными данными).
Ссылочные типы (классы], наоборот, размещаются в управляемой динамически распределяемой памяти (managed heap). Эти объекты остаются в памяти до тех пор, пока сборщик мусора .NET не уничтожит их. По умолчанию в результате присваивания ссылочных типов создается новая ссылка на тот же объект в динамической памяти. Для иллюстрации давайте изменим определение типа MyPoint со структуры на класс.
// Классы всегда оказываются ссылочными типами,
class MyPoint { // ‹= Теперь это класс!
public int х, у;
}
Если выполнить программу теперь, то можно заметить изменения в ее поведении (рис. 3.13).

Рис. 3.13. Для ссылочных типов присваивание означает копирование ссылки
В данном случае имеется две ссылки на один и тот же объект в управляемой динамической памяти. Поэтому, если изменить значение x с помощью ссылки р2, то мы увидим, что p1.х укажет на измененное значение.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Оператор присваивания
Оператор присваивания Оператор присваивания – :=. Для удобства понимания записи алгоритмов его можно читать, например, так:X := … – пусть X
Оператор присваивания
Оператор присваивания x = … – пусть x будет…
R.3.6 Типы
R.3.6 Типы Существуют два вида типов: основные и
Оператор присваивания
Оператор присваивания Слева от оператора присваивания := указывается переменная или свойство объекта, а справа — некоторое значение или выражение. Тип значения или результат выражения должен соответствовать типу переменной или
Типы, характеризуемые значениями и содержащие ссылочные типы
Типы, характеризуемые значениями и содержащие ссылочные типы Теперь, когда вы чувствуете разницу между типами, характеризуемыми значением, и ссылочными типами, давайте рассмотрим более сложный пример. Предположим, что имеется следующий ссылочный тип (класс),
Типы, характеризуемые значениями, и ссылочные типы: заключительные замечания
Типы, характеризуемые значениями, и ссылочные типы: заключительные замечания Чтобы завершить обсуждение данной темы, изучите информацию табл. 3.8, в которой приводится краткая сводка основных отличий между типами, характеризуемыми значением, и ссылочными типами.Таблица
Оператор присваивания
Оператор присваивания Для класса CObject описан оператор присваивания. Он описан с ключевым словом private и не имеет реализации:private:void operator=(const CObject& src);Таким образом для классов, наследованных от CObject запрещается выполнение операции копирования по умолчанию. Если такая
Типы данных
Типы данных Многие языки программирования при объявлении переменной требуют указывать, какой тип данных будет ей присваиваться. Например, в языке Java кодint i = 15;объявит переменную целого типа int с именем i и присвоит ей значение 15. В этом случае тип данных ставится в
1.3 Типы и Описания
1.3 Типы и Описания Каждое имя и каждое выражение имеет тип, определяющий операции, которые могут над ними производиться. Например, описаниеint inch;определяет, что inch имеет тип int, то есть, inch является целой переменной.Описание – это оператор, который вводит имя в программе.
2.3 Типы
2.3 Типы Каждое имя (идентификатор) в С++ программе имеет ассоциированный с ним тип. Этот тип определяет, какие операции моно применять к имени (то есть к объекту, на который оно ссылается), и как эти операции интерпретируются. Например:int error number; float real(complex* p);Поскольку error_number
Файловые типы
Файловые типы Файл представляет собой последовательность элементов одного типа, хранящихся на диске. В PascalABC.NET имеется два типа файлов - двоичные и текстовые. Текстовые файлы хранят символы, разделенные на строки символами #13#10 (Windows) и символом #10 (Linux). Последовательность
Отображение на типы .NET
Отображение на типы .NET Стандартные типы PascalABC.NET реализуются типами библиотеки классов .NET. Далее приводится таблица соответствий стандартных типов PascalABC.NET и типов .NET. Тип PascalABC.NET Тип .NET int64 System.Int64 uint64 System.UInt64 integer, longint System.Int32 longword,
Оператор присваивания
Оператор присваивания Оператор присваивания имеет вид: переменная := выражение В качестве переменной может быть простая переменная, разыменованный указатель, переменная с индексами или компонент переменной типа запись. Символ := называется значком присваивания.