Читаем 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().

<p>Использование переменного числа аргументов</p>
Перейти на страницу:

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

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