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

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

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

Листинг 4- Выходные параметры

using System;

namespace ConsoleApplication1

{ class Class1

{

static void P(int a, out int b)

{

а = 44; b = 33;

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

}

static void Main()

{

int a = 2, b;

Р(a, out b);

Соnsole.WriteLine("после вызова {0} {1}", a, b);

}

}

}

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

В списке параметров записывайте сначала все входные параметры, затем — все ссылки и выходные параметры.

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

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

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

class Demо

{

double у;

рublic Demo T() / / метод возвращает ссылку на экземпляр

{

гreturn this;

}

рublic void Sety(double у)

{

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

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: