Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 5:

Контролирующий код C#

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Аннотация: В данной лекции рассматривается управляемый (контролирующий) код C# на примере массивов и индексаторов, обеспечивающий безопасное выполнение приложения.

Массивы

Массив, это последовательность однотипных элементов, упакованная под одним именем. Эти данные легко отсортировать, перебрать и обрабатывать. Массив в C# представляет собой объект ссылочного типа, который хранится на управляемой куче, а ссылка на него помещается в стек потока. Создание массива представляет собой двухступенчатый процесс: сначала объявляется ссылочная переменная на массив, а затем для него выделяется память и переменной присваивается ссылка на эту память.

Одномерные массивы

Так для одномерного массива синтаксис создания будет таким

тип[] имя_массива = new тип[размер];

Например, зарезервировать память под 10 элементов целого типа можно так

int[] array = new int[10];

Адресация элементов внутри массива выполняется с помощью целочисленного индекса, нумерация которого начинается с нуля. Выход индекса за пределы границ компилятором не контролируется и обнаруживается средой CLR только на этапе выполнения с генерацией исключения IndexOutOfRangeException.

Если массив объявляется как поле класса, то все элементы по умолчанию приобретают ближайшее по типу значение (для числового - нуль, для строкового - пусто, для булева - false, для ссылочного - null ). Если массив объявляется внутри метода как локальная переменная, то его перед использованием нужно явно инициализировать.

Массив в C# - это тип, производный от класса System.Array, поэтому все массивы наследуют от этого класса фиксированный набор объектных свойств и методов. Кроме того, сам класс Array содержит ряд статических методов (уровня класса), позволяющих выполнять обработку массивов как объектов.

Одну и ту же ссылку на массив можно использовать многократно при создании нескольких совместимых с ее типом массивов. В таком случае адресация прежнего массива будет утеряна. Например

int[] array = new int[10];
............
array = new int[20];

Можно выполнять сразу и объявление и инициализацию массива, тогда создание массива и подсчет его размерности выполнит компилятор по списку инициализации. В этом случае ключевое слово new не нужно. Например

int[] array = { 1, 2, 3, 4, 5 };

Можно создать массив фиксированной размерности и сразу его инициализировать. Тогда размер списка инициализации должен строго соответствовать заказанной размерности массива. Например

int[] array = new int[5]{ 1, 2, 3, 4, 5 };

Допустим и такой синтаксис - без указания размерности, но с инициализацией

int[] array = new int[]{ 1, 2, 3, 4, 5 };

Можно вначале создать массив, а потом поэлементно присвоить ему значения. И тоже нужно следить, чтобы не выйти за пределы установленной размерности массива.

int[] array = new int[5];
for (int i = 0; i < array.Length; i++)    
  array[i] = i;

Многомерные массивы

Массивы большего числа измерений имеют синтаксис, схожий с одномерными массивами.

Приведем примеры

Двумерный целочисленный массив
// Файл Program.cs
using System;
    
class MyClass
{
    public MyClass()
    {
        // Настройка консоли
        Console.Title = "Двумерный массив 5x4";
        Console.ForegroundColor = ConsoleColor.White;
        Console.CursorVisible = false;
    
        // Работа с двумерным массивом
        const int ROWS = 5, COLUMNS = 4;// Границы
        int[,] array = new int[ROWS, COLUMNS];// Создание
        for (int count = 0; count < array.Length; count++)
            array[count / COLUMNS, count % COLUMNS] = count;// Наполнение
        for (int row = 0; row < ROWS; row++)// Перебор строк
        {
            for (int col = 0; col < COLUMNS; col++)// Перебор столбцов
            {
                string str = String.Format("a[{0},{1}]={2, -6}",
                    row, col, array[row, col]);
                Console.Write(str);
            }
            Console.WriteLine();// Новая строка
        }
    }
}
    
class Program
{
    static void Main()
    {
        new MyClass();// Чтобы сработал конструктор
        // Для задержки консольного окна
        Console.ReadLine();
    }
}

Размеры двумерного массива могут определяться компилятором автоматически по списку инициализации

// Файл Program.cs
using System;
    
class MyClass
{
    public MyClass()
    {
        // Настройка консоли
        Console.Title = "Двумерный массив со списком инициализации";
        Console.ForegroundColor = ConsoleColor.White;
        Console.CursorVisible = false;
    
        // Размерность двумерного массива по списку инициализации
        int[,] array = {
                        {0, 1, 2, 3},
                        {4, 5, 6, 7},
                        {8, 9, 10, 11},
                        {12, 13, 14, 15},
                        {16, 17, 18, 19}
                       };
            
        const int ROWS = 5, COLUMNS = 4;// Границы для печати
    
        for (int count = 0; count < array.Length; count++)
            array[count / COLUMNS, count % COLUMNS] = count;// Наполнение
        for (int row = 0; row < ROWS; row++)// Перебор строк
        {
            for (int col = 0; col < COLUMNS; col++)// Перебор столбцов
            {
                string str = String.Format("a[{0},{1}]={2, -6}",
                    row, col, array[row, col]);
                Console.Write(str);
            }
            Console.WriteLine();// Новая строка
        }
    }
}
    
class Program
{
    static void Main()
    {
        new MyClass();// Чтобы сработал конструктор
        // Для задержки консольного окна
        Console.ReadLine();
    }
}

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

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

 

Как активировать код?

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974