Добавить в цитаты Настройки чтения

Страница 90 из 502

<b>      ch = stk2.Pop();</b>

<b>      Console.Write(ch);</b>

<b>    }</b>

<b>    Console.WriteLine(&quot;n&quot;);</b>

<b>    // Поместить 5 символов в стек.</b>

<b>    Console.WriteLine(&quot;Поместить 5 символов в стек stk3.&quot;); </b>

<b>    for(i=0; i &lt; 5; i++)</b>

<b>      stk3.Push((char) ('A' + i)) ;</b>

<b>    Console.WriteLine(&quot;Емкость стека stk3: &quot; + stk3.Capacity()); </b>

<b>    Console.WriteLine(&quot;Количество объектов в стеке stk3: &quot; </b>

<b>          + stk3.GetNum());</b>

<b>  }</b>

<b>}</b>

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

<b>Поместить символы А-J в стек stk1.</b>

<b>Стек stk1 заполнен.</b>

<b>Содержимое стека stk1: JIHGFEDCBA </b>

<b>Стек stk1 пуст.</b>

<b>Вновь поместить символы А-J в стек stk1.</b>

<b>А теперь извлечь символы из стека stk1 </b>

<b>и поместить их в стек stk2.</b>

<b>Содержимое стека stk2: ABCDEFGHIJ</b>

<b>Поместить 5 символов в стек stk3.</b>

<b>Емкость стека stk3: 10 </b>

<b>Количество объектов в стеке stk3: 5</b>

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

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

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

<b>using System;</b>

<b>class MyClass { </b>

<b>  int alpha, beta;</b>

<b>  public MyClass(int i, int j) { </b>

<b>    alpha = i; </b>

<b>    beta = j;</b>

<b>}</b>

<b>  // Возвратить значение true, если параметр ob </b>

<b>  // имеет те же значения, что и вызывающий объект, </b>

<b>  public bool SameAs(MyClass ob) {</b>

<b>    if ((ob.alpha == alpha) &amp; (ob.beta == beta)) </b>

<b>      return true; </b>

<b>    else </b>

<b>      return false;</b>

<b>  }</b>

<b>  // Сделать копию объекта ob. </b>

<b>  public void Copy(MyClass ob) { </b>

<b>    alpha = ob.alpha; </b>

<b>    beta = ob.beta;</b>

<b>  }</b>

<b>  public void Show() {</b>

<b>    Console.WriteLine(&quot;alpha: {0}, beta: {1}&quot;, alpha, beta);</b>

<b>  }</b>

<b>}</b>

<b>class PassOb {</b>

<b>  static void Main() {</b>

<b>    MyClass ob1 = new MyClass(4, 5);</b>

<b>    MyClass ob2 = new MyClass(6, 7);</b>

<b>    Console.Write(&quot;ob1: &quot;); </b>

<b>    ob1.Show();</b>

<b>    Console.Write(&quot;ob2: &quot;); </b>

<b>    ob2.Show();</b>

<b>    if(ob1.SameAs(ob2))</b>

<b>      Console.WriteLine(&quot;ob1 и ob2 имеют одинаковые значения.&quot;); </b>

<b>    else</b>

<b>      Console.WriteLine(&quot;ob1 и ob2 имеют разные значения.&quot;); </b>

<b>    Console.WriteLine() ;</b>

<b>    // А теперь сделать объект ob1 копией объекта ob2. </b>

<b>    ob1.Copy(ob2);</b>

<b>    Console.Write(&quot;ob1 после копирования: &quot;); </b>

<b>    ob1.Show();</b>

<b>    if(ob1.SameAs(ob2) )</b>

<b>      Console.WriteLine(&quot;ob1 и ob2 имеют одинаковые значения.&quot;); </b>

<b>    else</b>