Программирование >>  Обработка исключительных ситуаций 

1 ... 34 35 36 [ 37 ] 38 39 40 ... 142


требуется изменить значение каких-либо передаваемых в него величин. В этих случаях используются параметры-ссылки.

Признаком параметра-ссылки является ключевое слово ref перед описанием параметра:

ref тип имя

Пример заголовка метода, имеющего один параметр-ссылку целого типа: void Р( ref int х )

При вызове метода в область параметров копируется не значение аргумента, а его адрес, и метод через него имеет доступ к ячейке, в которой хранится аргумент. Таким образом, параметры-ссылки передаются по адресу (чаще употребляется термин передача по ссылке ). Метод работает непосредственно с переменной из вызывающей функции и, следовательно, может ее изменить, поэтому если в методе требуется изменить значения параметров, они должны передаваться только по ссылке.

ВНИМАНИЕ-

При вызове метода на месте параметра-ссылки может находиться только ссылка на инициализированную переменную точно того же типа. Перед именем параметра указывается ключевое слово ref.

Исходные данные передавать в метод по ссылке не рекомендуется, чтобы исключить возможность их непреднамеренного изменения.

Проиллюстрируем передачу параметров-значений и параметров-ссылок на примере (листинг 5.4).

Листинг 5.4. Параметры-значения и параметры-ссылки using System;

namespace ConsoleApplicationi { class Classl

static void P( int a, ref int b ) {

a = 44; b = 33;

Console.WriteLine( внутри метода {0} {1} , a, b );

static void Main()

in t a = 2. b = 4;

Console.WriteLineC до вызова P( a, ref b );

Console.WriteLineC после вызова

{0} {1} , a, b ); {0} {!} , a, b ):



Результаты работы этой программы:

:;. вызовз 2 4

-утри метода 44 33 -еле вызова 2 33

Как видите, значение переменной а в функции Main не изменилось, поскольку пе-оеменная передавалась по значению, а значение переменной b изменилось потому, что она была передана по ссылке.

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

СОВЕТ-

Для простоты можно считать, что объекты всегда передаются по ссылке.

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

Выходные параметры

Довольно часто возникает необходимость в методах, которые формируют несколько величин, например, если в методе создаются объекты или инициализируются ресурсы. В этом случае становится неудобным ограничение параметров-ссылок: необходимость присваивания значения аргументу до вызова метода. Это ограничение снимает спецификатор out. Параметру, имеющему этот спецификатор, должно быть обязательно присвоено значение внутри метода, компилятор за этим следит. Зато в вызывающем коде можно ограничиться описанием переменной без инициализации.

Изменим описание второго параметра в листинге 5.4 так, чтобы он стал выходным (листинг 5.5).

Листинг 5.5. Выходные параметры ,sing System;

smespace ConsoleApplicationi class Classl

static void P( int a. out int b )

a = 44; b = 33:

Console.WriteLineC внутри метода {0} {1} . a, b );

static void MainO



Листинг 5.5 (продолжение)

int а = 2, Ь;

Р( a, out b ) :

Console.WriteLineC после вызова {0} {!} , a, b );

При вызове метода перед соответствующим параметром тоже указывается ключевое слово out.


СОВЕТ-

В списке параметров записывайте сначала все входные параметры, затем - все ссылки и выходные параметры. Давайте параметрам имена, по которым можно получить представление об их назначении.

Ключевое слово this

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

В явном виде параметр this применяется для того, чтобы возвратить из метода ссылку на вызвавший объект, а также для идентификации поля в случае, если его имя совпадает с именем параметра метода, например:

< class Demo

double у;

public Dno TO метод возвращает сстлку на экземпляр

У- return this;

Ц public void Sety( double у )

this.у = у; полю у присваивается значение параметра у

Конструкторы

Конструктор предназначен для инициализации объекта. Он вызывается автоматически при создании объекта класса с помощью операции new. Имя конструктора совпадает с именем класса. Ниже перечислены свойства конструкторов:

Конструктор не возвращает значение, даже типа void.



1 ... 34 35 36 [ 37 ] 38 39 40 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика