Читаем C# 4.0: полное руководство полностью

      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 ob1, ref RefSwap ob2) {

    RefSwap t;


    t = ob1;

    ob1 = 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() ;


    // Смена объектов, на которые ссылаются аргументы х и у.

    x.Swap (ref x, ref у);


    Console.Write("х после вызова: ");

    x.Show();


    Console.Write("у после вызова: ") ;

    у.Show();

  }

}


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


х до вызова: а: 1, b: 2

у до вызова: а: 3, b: 4


х после вызова: а: 3, b: 4

у после вызова: а: 1, b: 2


В данном примере в методе Swap() выполняется смена объектов, на которые ссылаются два его аргумента. До вызова метода Swap() аргумент х ссылается на объект, содержащий значения 1 и 2, тогда как аргумент у ссылается на объект, содержащий значения 3 и 4. А после вызова метода Swap() аргумент х ссылается на объект, содержащий значения 3 и 4, тогда как аргумент у ссылается на объект, содержащий значения 1 и 2. Если бы не параметры типа ref, то перестановка в методе Swap() не имела бы никаких последствий за пределами этого метода. Для того чтобы убедиться в этом, исключите параметры типа ref из метода Swap().


Использование переменного числа аргументов

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

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

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных