Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Передача объектов методам по ссылке C# Полное руководство Герберт Шилдт

Передача объектов методам по ссылке C# Полное руководство Герберт Шилдт

В приведенных до сих пор примерах программ при указании параметров, передаваемых методам, использовались типы значений, например int или double. Но в методах можно также использовать параметры ссылочного типа, что не только правильно, но и весьма распространено в ООП. Подобным образом объекты могут передаваться методам по ссылке. В качестве примера рассмотрим следующую программу:

// Пример передачи объектов методам по ссылке.

using System;

class MyClass {
   int alpha, beta;

   public MyClass(int i, int j) {
      alpha = i;
      beta = j ;
   }

   // Возвратить значение true, если параметр ob
   // имеет те же значения, что и вызывающий объект.
   public bool SameAs(MyClass ob) {
      if((ob.alpha == alpha) & (ob.beta == beta))
         return true;
      else return false;
   }

   // Сделать копию объекта ob.
   public void Copy(MyClass ob) {
      alpha = ob.alpha;
      beta = ob.beta;
   }

   public void Show() {
      Console.WriteLine("alpha: {0}, beta: {1}", alpha, beta);
   }
}

class PassOb {
   static void Main() {
      MyClass ob2 = new MyClass (4, 5) ;
      MyClass ob2 = new MyClass (6, 7);

      Console.Write("ob1: ");
      ob1.Show();

      Console.Write("ob2: ");
      ob2.Show();

      if(ob1.SameAs(ob2))
         Console.WriteLine("ob1 и ob2 имеют одинаковые значения.");
      else
      Console.WriteLine("ob1 и ob2 имеют разные значения.");
      
      Console.WriteLine();

      //А теперь сделать объект ob1 копией объекта ob2.
      ob1.Copy(ob2);

      Console.Write("ob1 после копирования: ");
      ob1.Show();

      if(obi.SameAs(ob2))
         Console.WriteLine("ob1 и ob2 имеют одинаковые значения.");
      else
         Console.WriteLine("obi и ob2 имеют разные значения.");
   }
}


Выполнение этой программы дает следующий результат:
   ob1: alpha: 4, beta: 5
   ob2: alpha: 6, beta: 7
   ob1 и оb2 имеют разные значения.

   оb1 после копирования: alpha: 6, beta: 7
   ob1 и оb2 имеют одинаковые значения.

Каждый из методов SameAs () и Сору () в приведенной выше программе получает ссылку на объект типа MyClass в качестве аргумента. Метод SameAs () сравнивает значения переменных экземпляра alpha и beta в вызывающем объекте со значениями аналогичных переменных в объекте, передаваемом посредством параметра ob. Данный метод возвращает логическое значение true только в том случае, если'оба объекта имеют одинаковые значения этих переменных экземпляра. А метод Сору () присваивает значения переменных alpha и beta из объекта, передаваемого по ссылке посредством параметра ob, переменным alpha и beta из вызывающего объекта. Как показывает данный пример, с точки зрения синтаксиса объекты передаются методам по ссылке таким же образом, как и значения обычных типов.