программу.

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

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 obi = new MyClass(4, 5);

MyClass ob2 = new MyClass (6, 7);

Console.Write('obi: '); obi.Show ();

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

if(obi.SameAs(ob2))

Console.WriteLine('obi и ob2 имеют одинаковые значения.'); else

Console.WriteLine('obi и ob2 имеют разные значения.'); Console.WriteLine() ;

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

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

if(obi.SameAs(ob2) )

Console.WriteLine('obi и ob2 имеют одинаковые значения.'); else

Console.WriteLine('obi и ob2 имеют разные значения.');

}

}

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

obi: alpha: 4, beta: 5 ob2: alpha: 6, beta: 7

оЫ и ob2 имеют разные значения.

оЫ после копирования: alpha: 6, beta: 7 obi и оЬ2 имеют одинаковые значения.

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

Способы передачи аргументов методу

Как показывает приведенный выше пример, передача объекта методу по ссылке делается достаточно просто. Но в этом примере показаны не все нюансы данного процесса. В некоторых случаях последствия передачи объекта по ссылке будут отличаться от тех результатов, к которым приводит передача значения обычного типа. Для выяснения причин этих отличий рассмотрим два способа передачи аргументов методу.

Первым способом является вызов по значению. В этом случае значение аргумента копируется в формальный параметр метода. Следовательно, изменения, вносимые в параметр метода, не оказывают никакого влияния на аргумент, используемый для вызова. А вторым способом передачи аргумента является вызов по ссылке. В данном случае параметру метода передается ссылка на аргумент, а не значение аргумента. В методе эта ссылка используется для доступа к конкретному

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату