Модификатор параметра out подобен модификатору ref, за одним исключением: он служит только для передачи значения за пределы метода. Поэтому переменной, используемой в качестве параметра out, не нужно (да и бесполезно) присваивать какое-то значение. Более того, в методе параметр out считается неинициализированным, т.е. предполагается, что у него отсутствует первоначальное значение. Это означает, что значение должно быть присвоено данному параметру в методе до его завершения. Следовательно, после вызова метода параметр out будет содержать некоторое значение.
//использовать модификатор параметра 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);
|
|
}
}
//использовать два параметра типа out
using System;
class Num
{
/*определить, имеется ли у числовых значений переменных x и y
общий множитель. Если имеется, то возвратить наименьший и
наибольший множители песредством переметров типа Out. */
public bool HasComFactor(int x, int y, out int least, out int greatest)
{
int i;
int max=x<y?x:y;
bool first = true;
least=1;
greatest=1;
//найти наименьший и наибольший общий множитель.
for(i=2;i<=max/2+1;i++)
{
if(((y%i)==0)&((x%i)==0))
{
if(first)
{
least=i;
first=false;
}
greatest=i;
}
}
if(least!=1)return true;
else return false;
}
}
class DemoOut
{
static void Main()
{
Num ob = new Num();
int lcf, gcf;
if (ob.HasComFactor(231, 105, out lcf, out gcf))
{
Console.WriteLine("Наименьший общий множитель чисел 231 и 105 равен " + lcf);
Console.WriteLine("Наибольший общий множитель чисел 231 и 105 равен " + gcf);
}
else Console.WriteLine("Общий множитель у чисел 231 и 105 отсутствует.");
if (ob.HasComFactor(35, 51, out lcf, out gcf))
{
Console.WriteLine("Наименьший общий множитель чисел 35 и 51 равен " + lcf);
Console.WriteLine("Наибольший общий множитель чисел 35 и 51 равен " + gcf);
}
else Console.WriteLine("Общий множитель у чисел 35 и 51 отсутствует.");
}
}
Использование модификаторов ref и out для ссылок на объекты
//поменять местами две ссылки.
using System;
class RefSwap
{
int a, b;
public RefSwap(int i, int j)
{
a = i;
b = j;
}
public void Show()
{
Console.WriteLine("a: {0}, b: {1}", a, b);
}
//этот метод изменяет свои аргументы.
public void Swap(ref RefSwap ob1, ref RefSwap ob2)
{
RefSwap t;
t = ob1;
ob1 = ob2;
ob2 = t;
}
}
class RefSwapDemo
{
static void Main()
{
RefSwap x = new RefSwap(1, 2);
RefSwap y = new RefSwap(3, 4);
Console.Write("x до вызова: ");
x.Show();
Console.Write("y до вызова: ");
y.Show();
Console.WriteLine();
//смена обьектов, на которые ссылаются аргументы x и y.
x.Swap(ref x, ref y);
Console.Write("x после вызова: ");
x.Show();
Console.Write("y после вызова: ");
y.Show();
}
}