Programming: C#


Учебник по C#
4.1 Различия между объектными типами и типами значения



  Источник:

Как уже упоминалось, в C# есть, помимо прочих, два класса типов: объектные типы (reference types) и типы значения (value types). Их отличие заключается в том, что переменные типа значения содержат сами по себе все данные, в то время как переменные ссылочных типов лишь ссылаются на некоторое значение.

То есть, с типами значения все просто - переменные таких типов хранят сами данные, все как обычно. А ссылочные типы ведут себя иначе - при создании нового объекта такого типа сам объект создается в специальном пуле, а переменная представляет всего лишь ссылку на него:

class MyClass
{
    ...
}
MyClass a = new MyClass();

Если мы далее присваиваем другой переменной значение только что созданной, для нее не создается нового объекта, она просто ссылается на существующий:

MyClass b = a;

При этом все изменения объекта, которые производятся через b отражаются и на a. Также значения ссылок a и b можно изменять - при этом они перестают ссылаться на текущий объект и ссылаются на новый (или не ссылаются ни на что - имеют значение null). Если возникает ситуация, что все ссылки на объект изменили свои значения и на объект больше никто не ссылается, то он становится "бесхозным" - и удаляется.

a = null;
b = null;

Поясним еще одним примером:

class Sample
{
    public int field;
}
...
int i, j;
i = 3;
j = i;
// Выведет: i = 3, j = 3
Console.WriteLine("i = {0}, j = {1}", i, j);
i = 2;
// Выведет: i = 2, j = 3
Console.WriteLine("i = {0}, j = {1}", i, j);
Sample a = new Sample();
a.field = 1;
Sample b = a;
// Выведет a.field = 1, b.field = 1
Console.WriteLine("a.field = {0}, b.field = {1}", a.field, b.field);
a.field = 2;
// Выведет a.field = 2, b.field = 2
Console.WriteLine("a.field = {0}, b.field = {1}", a.field, b.field);
    

Впрочем, при вызове метода можно передать значение типа значения по ссылке - для этого используется модификатор ref.

Назад | Вперёд






При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

© 2005
 

Hosted by uCoz