Герберт Шилдт - C# 4.0 полное руководство - 2011
- Название:C# 4.0 полное руководство - 2011
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0 полное руководство - 2011 краткое содержание
C# 4.0 полное руководство - 2011 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Модификатор параметра 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
Метод Get Parts () возвращает два фрагмента информации. Во-первых, целую часть исходного числового значения переменной п обычным образом с помощью оператора return. И во-вторых, дробную часть этого значения посредством параметра f гас типа out. Как показывает данный пример, используя модификатор параметра out, можно организовать возврат двух значений из одного и того же метода.
Разумеется, никаких ограничений на применение параметров out в одном методе не существует. С их помощью из метода можно возвратить сколько угодно фрагментов информации. Рассмотрим пример применения двух параметров out. В этом примере программы метод HasComFactor () выполняет две функции. Во-первых, он определяет общий множитель (кроме 1) для двух целых чисел, возвращая логическое значение true, если у них имеется общий множитель, а иначе — логическое значение false. И во-вторых,.он возвращает посредством параметров типа out наименьший и наибольший общий множитель двух чисел, если таковые обнаруживаются.
// Использовать два параметра типа out. using System; class Num {
/* Определить, имеется ли у числовых значений переменных х и v общий множитель. Если имеется, то * возвратить наименьший и наибольший множители посредством параметров типа out. */ public bool HasComFactor(int x, int y,
out int least, out int greatest) {
int i;
int max = x < у ? 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("Общий множитель у чисел 35 и 49 отсутствует.");
if(ob.HasComFactor(35, 51, out lcf, out gcf)) {
Console.WriteLine("Наименьший общий множитель " +
"чисел 35 и 51 равен " + lcf);
Console.WriteLine("Наибольший общий множитель " +
"чисел 35 и 51 равен " + gcf);
}
else
Console.WriteLine("Общий множитель у чисел 35 и 51 отсутствует.");
}
}
Обратите внимание на то, что значения присваиваются переменным lcf и gcf в методе Main ( ) до вызова метода HasComFactor () . Если бы параметры метода HasComFactor () были типа ref, а не out, это привело бы к ошибке. Данный метод возвращает логическое значение true или false, в зависимости от того, имеется ли общий множитель у двух целых чисел. Если он имеется, то посредством параметров типа out возвращаются наименьший и наибольший общий множитель этих чисел. Ниже приведен результат выполнения данной программы.
Наименьший общий множитель чисел 231 и 105 равен 3 Наибольший общий множитель чисел 231 и 105 равен 21 Общий множитель у чисел 35 и 51 отсутствует.
Использование модификаторов ref и out для ссылок на объекты
Применение модификаторов ref и out не ограничивается только передачей значений обычных типов. С их помощью можно также передавать ссылки на объекты. Если модификатор ref или out указывает на ссылку, то сама ссылка передается по ссылке. Это позволяет изменить в методе объект, на который указывает ссылка. Рассмотрим в качестве примера следующую программу, в которой ссылочные параметры типа ref служат для смены объектов, на которые указывают ссылки.
// Поменять местами две ссылки.
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 obi, ref RefSwap ob2) {
RefSwap t;
t = obi; obi = ob2; ob2 = t;
}
}
class RefSwapDemo { static void Main() {
RefSwap x = new RefSwap(1, 2);
RefSwap у = new RefSwap(3, 4);
Console.Write("x до вызова: ") ; x.Show ();
Console.Write("у до вызова: "); у.Show();
Console.WriteLine() ;
// Смена объектов, на которые ссылаются аргументы х и у. х.Swap (ref х, ref у);
Console.Write("х после вызова: "); х.Show();
Console.Write("у после вызова: ") ; у.Show ();
Читать дальшеИнтервал:
Закладка: