Сравнение ссылочного и структурного типов в C#

Автор: Topol Пятница, Июнь 8th, 2012 Нет комментариев

Рубрика: Программирование

Переменные и ссылочного, и структурного типа иначе называются объектами. Принцип их использования один и тот же. Разница лишь в том, что именно хранится в переменных – значение или ссылка на него.

Ссылочный тип данных в си шарп имеют экземпляры классов, массивов, делегатов и интерфейсов. Для их объявления используют соответствующие ключевые слова.Такие переменные называются ссылочными потому, что они хранят не само значение, а ссылку на ячейку памяти, содержащую значение. То есть, если присвоить переменной a некоторое значение, а потом записывать выражение b=a, то содержимое переменной a не копируется. Запись b=a лишь означает, что обе переменные ссылаются на одну и ту же область памяти. У этой области появляется два названия: a и b.

Для структурных типов переменных в си шарп справедливо, что при выполнении операции присваивания происходит последовательное побитовое копирование данных, проще говоря – копируется само значение. Структурный тип данных – это перечисления и структуры. Посмотрим на примере, как осуществляется присваивание для переменных структурного типа. Объявляем структуру:
struct mystruct
{
public int x, y;
}
В головной программе создаем объект структурного типа и присваиваем начальные значения переменным:
  mystruct ff = new mystruct ();
ff.x = 100;
ff.y = 100;
Теперь копируем значение в новый объект:
 mystruct ss = ff;
Если вывести на экран значения переменных, получится следующее: ff.x = 100;ff.y = 100;ss.x = 100;ss.y = 100. То есть значение было скопировано.
Попробуем внести изменения; присвоим переменным новые значения:
ff.x = 1; ff.y = 2; ss.x = 3; ss.y = 4;
Такие же значения мы увидим на экране.

Теперь, если в том же примере поменять ключевое слово struct на class, получится объект ссылочного типа. В этом случае, выводя на экран значения переменных после выражения mystruct ss = ff. Вы увидите те же значения, что и в первом случае: ff.x = 100;ff.y = 100;ss.x = 100;ss.y = 100. А вот после следующих изменений, в том выражении, где мы присваивали переменным числа от 1 до 4, получатся такие значения: ff.x = 3;ff.y = 4;ss.x = 3;ss.y = 4. Скопировалось не само значение, а лишь ссылка на него по x и y.

Источник: cisharp.com

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты