
- •1)Принципы ооп (инкапсуляция, наследование, полиморфизм)
- •Формы полиморфизма Edit
- •2)Структура программы на с#
- •3)Встроенные типы данных. Типы-значения и ссылочные типы, упаковка и распаковка
- •4)Переменные и их инициализация, область видимости и время жизни переменных Проект Variables
- •Синтаксис объявления
- •Время жизни и область видимости переменных
- •Глобальные переменные уровня модуля.
- •Константы
- •5)Арифметические операторы, логические операторы
- •6)Приоритет операций, преобразование типов в выражениях
- •7)Оператор присваивания
- •Составные операторы присваивания
- •8)Операторы условный и выбора
- •Оператор if
- •Оператор switch
- •9)Операторы цикла
- •Цикл for
- •Цикл while
- •Цикл do. . . While
- •Цикл foreach
- •10)Операторы перехода
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •11)Массивы, создание и инициализация массивов, ступенчатые массивы
- •Инициализация массива
- •Неявно типизированные массивы
- •Определение массива объектов
- •Свойство Length
- •Двумерные массивы
- •Массивы трех и более измерений
- •Инициализация многомерных массивов
- •Применение свойства Length при обращении со ступенчатыми массивами
- •12)Классы и объекты, элементы класса
- •Общая форма определения класса
- •Данные-члены
- •Функции-члены
- •Переменные ссылочного типа и присваивание
- •Инициализаторы объектов
- •Методы, статические методы, параметры методов
- •Объявление методов
- •Возврат из метода и возврат значения
- •Использование параметров
- •14)Перегрузка методов
- •15)Конструкторы
- •16)Сборка мусора и деструкторы
- •Деструкторы
- •17)Перегрузки операторов
- •Перегрузка бинарных операторов
- •Перегрузка унарных операторов
- •Выполнение операций со встроенными в с# типами данных
- •Перегрузка операторов отношения и операторов true - false
- •Перегрузка операторов отношения
- •Перегрузка операторов true и false
- •Перегрузка логических операторов
- •Перегрузка укороченных логических операторов
- •Свойства
- •Автоматически реализуемые свойства
- •19)Индексаторы
- •Одномерные индексаторы
- •Многомерные индексаторы
- •20)Основы наследования
- •21)Конструкторы и наследование
- •23)Виртуальные методы
Свойство Length
Реализация в С# массивов в виде объектов дает целый ряд преимуществ. Одно из них заключается в том, что с каждым массивом связаносвойство Length, содержащее число элементов, из которых может состоять массив. Следовательно, у каждого массива имеется специальное свойство, позволяющее определить его длину.
Когда запрашивается длина многомерного массива, то возвращается общее число элементов, из которых может состоять массив. Благодаря наличию у массивов свойства Length операции с массивами во многих алгоритмах становятся более простыми, а значит, и более надежными. Давайте рассмотрим пример использования свойства Length:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] myArr = { 1, 2, 3, 4 };
for (int i = 0; i < myArr.Length; i++)
Console.WriteLine(myArr[i]);
Console.ReadLine();
}
}
}
Многомерным называется такой массив, который отличается двумя или более измерениями, причем доступ к каждому элементу такого массива осуществляется с помощью определенной комбинации двух или более индексов. Многомерный массив индексируется двумя и более целыми числами.
Двумерные массивы
Простейшей формой многомерного массива является двумерный массив. Местоположение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно представить в виде таблицы, на строки которой указывает один индекс, а на столбцы — другой. Пример объявления и инициализации двумерного массива показан ниже:
// Объявляем двумерный массив
int[,] myArr = new int[4, 5];
Random ran = new Random();
// Инициализируем данный массив
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
myArr[i, j] = ran.Next(1, 15);
Console.Write("{0}\t", myArr[i, j]);
}
Console.WriteLine();
}
Обратите особое внимание на способ объявления двумерного массива. Схематическое представление массива myArr показано ниже:
Если вам приходилось раньше программировать на С, С++ или Java, то будьте особенно внимательны, объявляя или организуя доступ к многомерным массивам в С#. В этих языках программирования размеры массива и индексы указываются в отдельных квадратных скобках, тогда как в С# они разделяются запятой.
Массивы трех и более измерений
В С# допускаются массивы трех и более измерений. Ниже приведена общая форма объявления многомерного массива:
тип[,...,] имя_массива = new тип[размер1, размер2, ... размеры];
Ниже приведен пример программы, использующей трехмерный массив:
int[,,] myArr = new int[5,5,5];
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
for (int k = 0; k < 5; k++)
myArr[i, j, k] = i + j + k;
Инициализация многомерных массивов
Для инициализации многомерного массива достаточно заключить в фигурные скобки список инициализаторов каждого его размера:
тип[,] имя_массива = {
{val, val, val, ..., val},
{ val, val, val, ..., val},
{val, val, val, ..., val}
};
где val обозначает инициализирующее значение, а каждый внутренний блок — отдельный ряд. Первое значение в каждом ряду сохраняется на первой позиции в массиве, второе значение — на второй позиции и т.д. Обратите внимание на то, что блоки инициализаторов разделяются запятыми, а после завершающей эти блоки закрывающей фигурной скобки ставится точка с запятой.
Ниже в качестве примера приведена общая форма инициализации двумерного массива:
int[,] myArr = {
{1,10},
{2,20},
{3,30},
{4,40}
};
Двумерный массив можно представить в виде таблицы, в которой длина каждой строки остается неизменной по всему массиву. Но в С# можно также создавать специальный тип двумерного массива, называемый ступенчатым массивом. Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Следовательно, ступенчатый массив может быть использован для составления таблицы из строк разной длины.
Ступенчатые массивы объявляются с помощью ряда квадратных скобок, в которых указывается их размерность. Например, для объявления двумерного ступенчатого массива служит следующая общая форма:
тип [][] имя массива = new тип[размер] [];
где размер обозначает число строк в массиве. Память для самих строк распределяется индивидуально, и поэтому длина строк может быть разной.
Давайте рассмотрим пример использования ступенчатого массива:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int i = 0;
// Объявляем ступенчатый массив
int[][] myArr = new int[4][];
myArr[0] = new int[4];
myArr[1] = new int[6];
myArr[2] = new int[3];
myArr[3] = new int[4];
// Инициализируем ступенчатый массив
for (; i < 4; i++)
{
myArr[0][i] = i;
Console.Write("{0}\t",myArr[0][i]);
}
Console.WriteLine();
for (i = 0; i < 6; i++)
{
myArr[1][i] = i;
Console.Write("{0}\t", myArr[1][i]);
}
Console.WriteLine();
for (i = 0; i < 3; i++)
{
myArr[2][i] = i;
Console.Write("{0}\t", myArr[2][i]);
}
Console.WriteLine();
for (i = 0; i < 4; i++)
{
myArr[3][i] = i;
Console.Write("{0}\t", myArr[3][i]);
}
Console.ReadLine();
}
}
}
Созданный массив в данном примере можно структурно представить в виде:
Теперь нетрудно понять, почему такие массивы называются ступенчатыми! После создания ступенчатого массива доступ к его элементам осуществляется по индексу, указываемому в отдельных квадратных скобках.
Ступенчатые массивы находят полезное применение не во всех, а лишь в некоторых случаях. Так, если требуется очень длинный двумерный массив, который заполняется не полностью, т.е. такой массив, в котором используются не все, а лишь отдельные его элементы, то для этой цели идеально подходит ступенчатый массив.