Иногда ссылочный параметр требуется использовать для получения значения из метода, а не для передачи ему значения. Допустим, что имеется метод, выполняющий некоторую функцию, например, открытие сетевого сокета и возврат кода успешного или неудачного завершения данной операции в качестве ссылочного параметра. В этом случае методу не передается никакой информации, но в то же время он должен возвратить определенную информацию. Главная трудность при этом состоит в том, что параметр типаrefдолжен быть инициализирован определенным значением до вызова метода. Следовательно, чтобы воспользоваться параметром типаref,придется задать для аргумента фиктивное значение и тем самым преодолеть данное ограничение. Правда, в C# имеется более подходящий вариант выхода из подобного затруднения — воспользоваться модификатором параметраout.

Модификатор параметраoutподобен модификаторуref,за одним исключением: он служит только для передачи значения за пределы метода. Поэтому переменной, используемой в качестве параметраout,не нужно (да и бесполезно) присваивать какое-то значение. Более того, в методе параметрoutсчитаетсянеинициализированным, т.е. предполагается, что у него отсутствует первоначальное значение. Это означает, что значение должно быть присвоено данному параметру в методедоего завершения. Следовательно, после вызова метода параметрoutбудет содержать некоторое значение.

Ниже приведен пример применения модификатора параметраout.В этом примере программы для разделения числа с плавающей точкой на целую и дробную части используется методGetParts() из классаDecompose.Обратите внимание на то, как возвращается каждая часть исходного числа.

// Использовать модификатор параметра out.

using System;

class Decompose {

/* Разделить числовое значение с плавающей точкой на целую и дробную части. */ public int GetParts(double n, out double frac) { int whole;

whole = (int) n;

frac = n - whole; // передать дробную часть числа через параметр frac return whole;    // возвратить целую часть числа

}

}

class UseOut {

static void Main() {

Decompose ob = new Decompose(); int i; double f;

i = ob.GetParts(10.125, out f) ;

Console.WriteLine("Целая часть числа равна " + i);

Console.WriteLine("Дробная часть числа равна " + f);

}

}

Выполнение этой программы дает следующий результат.

Целая часть числа равна 10 Дробная часть числа равна 0.125

Перейти на страницу:

Похожие книги