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

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

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

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

using System;namespace ConsoleApplication1{ class Class1 { static void P( int a, out int b ) { a = 44; b = 33; Console.WriteLine( "внутри метода {0} {1}", a, b ); } static void Main() { int a = 2, b; P( a, out b ); Console.WriteLine( "после вызова {0} {1}", a, b ); } }}

Листинг 5.5. Выходные параметры (html, txt)

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

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


Рис. 5.5. Передача методу скрытого параметра this

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

class Demo { double y; public Demo T() // метод возвращает ссылку на экземпляр { return this; } public void Sety( double y ) { this.y = y; // полю y присваивается значение параметра y } }