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

Модификатор параметра 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();

}

}


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



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