logo search
C#, 320 стр

Еще раз о двух семантиках присваивания

В заключение разговора о ссылочных и развернутых типах построим класс CPoint, являющийся полным аналогом структуры Point. Не буду приводить описание этого класса - надеюсь, оно достаточно понятно. Ограничусь примером, в котором аналогичные действия выполняются над объектами, принадлежащими структуре Point и классу CPoint:

public void TestTwoSemantics()

{

Console.WriteLine("Структуры: присваивание

развернутого типа!");

Point pt1 = new Point(3,5), pt2;

pt2 = pt1;

Console.WriteLine ("pt1: " + pt1);

Console.WriteLine ("pt2=pt1: " + pt2);

pt1.X +=10;

Console.WriteLine ("pt1.X =pt1.X +10: " + pt1);

Console.WriteLine ("pt2: " + pt2);

Console.WriteLine("Классы: присваивание ссылочного типа!");

CPoint cpt1 = new CPoint(3,5), cpt2;

cpt2 = cpt1;

Console.WriteLine ("cpt1: " + cpt1);

Console.WriteLine ("cpt2=cpt1: " + cpt2);

cpt1.X +=10;

Console.WriteLine ("cpt1.X =cpt1.X +10: " + cpt1);

Console.WriteLine ("cpt2: " + cpt2);

}

Результаты вычислений показаны на рис. 17.2.

Рис. 17.2.  Две семантики присваивания

Действия над объектами Point и CPoint выполняются аналогичные а результаты получаются разные: в конце вычислений pt1 и pt2 различны, а cpt1 и cpt2 совпадают.