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

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

<b>int[] [,] jagged = new int [ 3] [,];</b>

В следующей строке кода элементу массива jagged[0] присваивается ссылка на массив размерами 4x2.

<b>jagged[0] = new int [4, 2];</b>

А в приведенной ниже строке кода элементу массива jagged[0] [1,0] присваивается значение переменной i.

<b>jagged[0][1,0] = i;</b>

Присваивание ссылок на массивы

Присваивание значения одной переменной ссылки на массив другой переменной, по существу, означает, что обе переменные ссылаются на один и тот же массив, и в этом отношении массивы ничем не отличаются от любых других объектов. Такое присваивание не приводит ни к созданию копии массива, ни к копированию содержимого одного массива в другой. В качестве примера рассмотрим следующую программу.

<b>// Присваивание ссылок на массивы.</b>

<b>using System;</b>

<b>class AssignARef { </b>

<b>  static void Main() { int i;</b>

<b>    int[] numsl = new int [10]; </b>

<b>    int[] nums2 = new int [10];</b>

<b>    for(i=0; i &lt; 10; i++) numsl[i] = i;</b>

<b>    for(i=0; i &lt; 10; i++) nums2[i] = -i;</b>

<b>    Console.Write(&quot;Содержимое массива numsl: &quot;); </b>

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

<b>      Console.Write(numsl[i] + &quot; &quot;);</b>

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

<b>    Console.Write(&quot;Содержимое массива nums2: &quot;); </b>

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

<b>      Console.Write(nums2[i] + &quot; &quot;) ;</b>

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

<b>    nums2 = numsl; // теперь nums2 ссылается на numsl</b>

<b>    Console.Write(&quot;Содержимое массива nums2n&quot; + &quot;после присваивания: &quot;); </b>

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

<b>      Console.Write(nums2[i] + &quot; &quot;) ;</b>

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

<b>    // Далее оперировать массивом numsl посредством </b>

<b>    // переменной ссылки на массив nums2. nums2[3] = 99;</b>

<b>    Console.Write(&quot;Содержимое массива numsl после измененияn&quot; + </b>

<b>         &quot;посредством переменной nums2: &quot;); for (i=0; i &lt; 10; i++)</b>

<b>    Console.Write(numsl[i] + &quot; &quot;) ;</b>

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

<b>  }</b>

<b>}</b>

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

<b>Содержимое массива    numsl:    0 1 2 3 4 5 6 7 8 9</b>

<b>Содержимое массива    nums2:    0 -1 -2 -3 -4 -5 -6 -7 -8 -9</b>

<b>Содержимое массива    nums2</b>

<b>после присваивания: 0 1 2 3 4 5 6 7 8 9  </b>

<b>Содержимое массива numsl после изменения </b>

<b>посредством переменной nums2: 0 1 2 99 4 5 6 7 8 9</b>

Как видите, после присваивания переменной nums 2 значения переменной numsl обе переменные ссылки на массив ссылаются на один и тот же объект.

Применение свойства Length

Реализация в C# массивов в виде объектов дает целый ряд преимуществ. Одно из них заключается в том, что с каждым массивом связано свойство Length, содержащее число элементов, из которых может состоять массив. Следовательно, у каждого массива имеется специальное свойство, позволяющее определить его длину. Ниже приведен пример программы, в которой демонстрируется это свойство.

<b>// Использовать свойство Length массива.</b>

<b>using System;</b>

<b>class LengthDemo { </b>

<b>  s</b><b>tatic void Main() {</b>

<b>    int[] nums = new int[10];</b>

<b>    Console.WriteLine(&quot;Длина массива nums равна &quot; + nums.Length);</b>

<b>    // Использовать свойство Length для инициализации массива nums. </b>

<b>    for(int i=0; i &lt; nums.Length; i++) nums[i] = i * i;</b>

<b>    // А теперь воспользоваться свойством Length </b>

<b>    // для вывода содержимого массива nums.</b>

<b>    Console.Write(&quot;Содержимое массива nums: &quot;); </b>

<b>    for(int i=0; i &lt; nums.Length; i++)</b>

<b>      Console.Write(nums[i] + &quot; &quot;);</b>