Переменные ссылочного типа и присваивание



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Переменные ссылочного типа и присваивание



В операции присваивания переменные ссылочного типа действуют иначе, чем пе­ременные типа значения, например типа int. Когда одна переменная типа значения присваивается другой, ситуация оказывается довольно простой. Переменная, находя­щаяся в левой части оператора присваивания, получает копию значения переменной, находящейся в правой части этого оператора. Когда же одна переменная ссылки на объект присваивается другой, то ситуация несколько усложняется, поскольку такое присваивание приводит к тому, что переменная, находящаяся в левой части оператора присваивания, ссылается на тот же самый объект, на который ссылается переменная, находящаяся в правой части этого оператора. Сам же объект не копируется. В силу этого отличия присваивание переменных ссылочного типа может привести к несколь­ко неожиданным результатам. В качестве примера рассмотрим следующий фрагмент кода.

Building house1 = new Building();

Building house2 = house1;

На первый взгляд, переменные house1 и house2 ссылаются на совершенно разные объекты, но на самом деле это не так. Переменные housel и house2, напротив, ссы­лаются на один и тот же объект. Когда переменная housel присваивается переменой house2, то в конечном итоге переменная house2 просто ссылается на тот же самый объ­ект, что и переменная house1. Следовательно, этим объектом можно оперировать с по­мощью переменной house1 или house2. Например, после очередного присваивания

house1.Area = 2600;

оба метода WriteLine()

Console.WriteLine(housel.Area);

Console.WriteLine(house2.Area);

выводят одно и то же значение: 2600.

Несмотря на то что обе переменные, house1 и house2, ссылаются на один и тот же объект, они никак иначе не связаны друг с другом. Например, в результате следующей последовательности операций присваивания просто изменяется объект, на который ссылается переменная house2.

Building house1 = new Building();

Building house2 = house1;

Building house3 = new Building();

house2 = house3; // теперь обе переменные, house2 и house3,

// ссылаются на один и тот же объект.

После выполнения этой последовательности операций присваивания перемен­ная house2 ссылается на тот же самый объект, что и переменная house3. А ссылка на объект в переменной house1 не меняется.

Методы

Как пояснялось выше, переменные экземпляра и методы являются двумя основны­ми составляющими классов. До сих пор класс Building, рассматриваемый здесь в каче­стве примера, содержал только данные, но не методы. Хотя классы, содержащие только данные, вполне допустимы, у большинства классов должны быть также методы. Методы представляют собой подпрограммы, которые манипулируют данными, определенны­ми в классе, а во многих случаях они предоставляют доступ к этим данным. Как прави­ло, другие части программы взаимодействуют с классом посредством его методов.

Метод состоит из одного или нескольких операторов. В грамотно написанном коде C# каждый метод выполняет только одну функцию. У каждого метода имеется свое имя, по которому он вызывается. В общем, методу в качестве имени можно присвоить любой действительный идентификатор. Следует, однако, иметь в виду, что идентифи­катор Main() зарезервирован для метода, с которого начинается выполнение програм­мы. Кроме того, в качестве имен методов нельзя использовать ключевые слова С#.

Здесь методы именуются в соответствии с условными обозначениями, при­нятыми в литературе по С#. В частности, после имени метода следуют круглые скобки. Так, если методу присвоено имя GetVal, то в тексте книги он упоминается в следую­щем виде: GetVal(). Такая форма записи помогает отличать имена методов от имен переменных при чтении книги.

Ниже приведена общая форма определения метода:

доступ возращаемый_тип имя(список_параметров)

{

// тело метода

}

где доступ - это модификатор доступа, определяющий те части программы, из ко­торых может вызываться метод. Как пояснялось выше, указывать модификатор досту­па необязательно. Но если он отсутствует, то метод оказывается закрытым (private) в пределах того класса, в котором он объявляется. Мы будем пока что объявлять методы открытыми (public), чтобы вызывать их из любой другой части кода в программе. За­тем возращаемый_тип обозначает тип данных, возвращаемых методом. Этот тип должен быть действительным, в том числе и типом создаваемого класса. Если метод не возвра­щает значение, то в качестве возвращаемого для него следует указать тип void. Далее имя обозначает конкретное имя, присваиваемое методу. В качестве имени метода может служить любой допустимый идентификатор, не приводящий к конфликтам в текущей области объявлений. И наконец, список_параметров - это последовательность пар, со­стоящих из типа и идентификатора и разделенных запятыми. Параметры представляют собой переменные, получающие значение аргументов, передаваемых методу при его вы­зове. Если у метода отсутствуют параметры, то список параметров оказывается пустым.



Последнее изменение этой страницы: 2016-12-27; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.237.16.210 (0.011 с.)