Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 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. Ввожу код на сайте, пишет:

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

 

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