Довольно часто возникает необходимость в методах, которые сами формируют несколько величин, например, если в методе создаются объекты или инициализируются ресурсы. В этом случае становится неудобным ограничение параметров-ссылок: необходимость присваивания значения аргументу до вызова метода. Это ограничение снимает спецификатор 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 = у; / / полю у присваивается значение параметра у
}
}