НЕКОТОРЫЕ АСПЕКТЫ РАБОТЫ С ЭЛЕМЕНТАМИ МАССИВОВ НА ЯЗЫКЕ C#

Статья опубликована в рамках: Международной научно-практической интернет-конференции «Актуальные проблемы методики обучения информатике в современной школе» (Россия, г.Москва, МПГУ,16 — 17 февраля 2016г.)

НЕКОТОРЫЕ АСПЕКТЫ РАБОТЫ С ЭЛЕМЕНТАМИ МАССИВОВ НА ЯЗЫКЕ C#

Тазетдинов Булат Ильгизович
кандидат физико-математических наук

Бирский филиал ФГБОУ ВО
«Башкирский 
государственный университет»
Россия, г.Бирск, e-mail: bulatbirsk@yandex.ru

Массив относится к ссылочным типам данных, то есть располагается в динамической области памяти, поэтому создание массива начинается с выделением памяти под его элементы. В качестве элементов могут выступать как значимые, так и ссылочные типы данных (в том числе массивы) [1].

Типы значения хранят свое содержимое в памяти, выделенное в стеке, при выходе переменной из области действия, в связи с завершением метода, где она была объявлена, значение удаляется из стека. Переменные же ссылочного типа хранят свои данные в другой области памяти, называемой кучей. Эта память освобождается только тогда, когда система сборки мусора C# позволяет определить, что она больше не нужна[2].

Описание массива имеет вид

int[] a = new int[20]; int[] f = new int[10];

Здесь описаны два массива, для массивов a и f выделена память под 20 и 10 элементов целого типа int соответственно. Массивы одного типа можно присвоить между собой, например: g = d;.

В результате происходит присваивание ссылок и массивы g и d ссылаются на одну и ту же ячейку памяти (кучу). В случае потребности копирования массива в C# можно поступить несколькими способами.

Поэлементное присваивание массива одного другому:

for (int i = 0; i < a.Length; i++)

            {  f[i] = a[i];  Console.Write(» » + f[i]); }

Здесь переменные значения копируются в стеке. Это весьма снижает производительность в случае больших массивов, поэтому желательно использовать весьма мощные встроенные методы и свойства базового класса Array. Здесь имеются весьма удобные методы Clone() и Copy() при работе со ссылочными типами. Метод Clone() создает неглубокую копию (shallow) массива. Иными словами, он создает новый массив, причем если элементы его относятся к типу значений, то все они копируются, а если массив содержит элементы ссылочного типа, то копируются ссылки на элементы [3]:

int[] s = (int[])d.Clone();

string[] str2 = (string[])str1.Clone();

здесь элементы массива d копируются в отдельную кучу массива s, в результате у нас имеется два отдельных массива, с одинаковыми по величине элементами. А элементы массива str2 копируют ссылки на свою кучу из кучи элементов массива str1. Метод Copy() копирует заданный диапазон элементов одного массива в другой [4]

Array.Copy(str6,0,str5,1,6);

где str6 –  массив, содержащий данные, которые требуется скопировать, далее 0 – целое, позиция в массиве str6, с которого начинается копирование, str5 –  массив, принимающий данные, 1 – целое, индекс в массиве str5, с которого начинается сохранение, 6 – целое копируемых элементов [4].

Отметим, что здесь рассмотрены не все способы работы с массивами. Экземпляры класса массива можно удалить из кучи сборщиком мусора GC.Collect(). В работе затронуты базовые и основные понятия, на которые следует обратить при обучении языку C#. Приведены простые и информативные примеры работы с элементами массива типа значения и ссылочного типов.

ЛИТЕРАТУРА

  1. Павловская Т.А. C#. Программирование на языке высокого уровня. Учебник для вузов. – СПб.: Питер, 2009. – 432 с.
  2. URL:https://msdn.microsoft.com/ru-ru/library/4d43ts61(v=vs.90).aspx
  3. URL:http://professorweb.ru/my/csharp/charp_theory/level4/4_4.php
  4. URL:https://msdn.microsoft.com/ru-ru/library/z50k9bft(v=vs.110).aspx

Отправить ответ

Уведомить о
avatar
Sort by:   newest | oldest | most voted
Т.Б. Захарова

Уважаемый Булат Ильгизович! Безусловно, что проблема, которую Вы ставите на обсуждение чрезвычайно актуальна — работа с массивами не является простой не только для школьников, но и для достаточно большого количества студентов.

М.Г. Победоносцева

Присоединяюсь к коллеге. Действительно сложная тема. Было бы интересно продолжить рассмотрение ее преподавания.

wpDiscuz