Главные конструкции программирования на С#: часть 2
В настоящей главе завершается обзор основных аспектов языка программирования С#, который был начат в главе 3. Первым делом мы рассмотрим детали манипулирования массивами с использованием синтаксиса C# и продемонстрируем функциональность, содержащуюся внутри связанного класса
System.Array
.
Далее мы выясним различные подробности, касающиеся построения методов, за счет исследования ключевых слов
out
,
ref
и
params
. В ходе дела мы объясним роль необязательных
и именованных параметров. Обсуждение темы методов завершится перегрузкой методов.
Затем будет показано, как создавать типы перечислений и структур, включая детальное исследование отличий между типами значений и ссылочными типами. В конце главы объясняется роль типов данных, допускающих
null
, и связанных с ними операций.
После освоения материала главы вы можете смело переходить к изучению объектно-ориентированных возможностей языка С#, рассмотрение которых начнется в главе 5.
Понятие массивов C#
Как вам уже наверняка известно, массив — это набор элементов данных, для доступа к которым применяется числовой индекс. Выражаясь более конкретно, массив представляет собой набор расположенных рядом элементов данных одного и того же типа (массив элементов
int
, массив элементов
string
, массив элементов
SportsCar
и т.д.). Объявлять, заполнять и получать доступ к массиву в языке C# довольно просто. В целях иллюстрации создайте новый проект консольного приложения по имени
FunWithArrays
, содержащий вспомогательный метод
SimpleArrays
:
Console.WriteLine("***** Fun with Arrays *****");
SimpleArrays;
Console.ReadLine;
static void SimpleArrays
{
Console.WriteLine("=> Simple Array Creation.");
// Создать и заполнить массив из 3 целых чисел.
int[] myInts = new int[3];
// Создать строковый массив из 100 элементов с индексами 0 - 99.
string[] booksOnDotNet = new string[100];
Console.WriteLine;
}
Внимательно взгляните на комментарии в коде. При объявлении массива C# с использованием подобного синтаксиса число, указанное в объявлении, обозначает общее количество элементов, а не верхнюю границу. Кроме того, нижняя граница в массиве всегда начинается с
0
. Таким образом, в результате записи
int[] myInts = new int[3]
получается массив, который содержит три элемента, проиндексированные по позициям
0
,
1
,
2
.
После определения переменной массива можно переходить к заполнению элементов от индекса к индексу, как показано ниже в модифицированном методе
SimpleArrays
:
static void SimpleArrays
{
Console.WriteLine("=> Simple Array Creation.");
//
Создать и заполнить массив из трех целочисленных значений.
int[] myInts = new int[3];
myInts[0] = 100;
myInts[1] = 200;
myInts[2] = 300;
// Вывести все значения.
foreach(int i in myInts)
{
Console.WriteLine(i);
}
Console.WriteLine;
}
На заметку! Имейте в виду, что если массив объявлен, но его элементы явно не заполнены по каждому индексу, то они получат стандартное значение для соответствующего типа данных (например, элементы массива
bool
будут установлены в
false
, а элементы массива
int
— в
0
).
Синтаксис инициализации массивов C#
В дополнение к заполнению массива элемент за элементом есть также возможность заполнять его с применением синтаксиса инициализации массивов. Для этого понадобится указать значения всех элементов массива в фигурных скобках (
{}
). Такой синтаксис удобен при создании массива известного размера, когда нужно быстро задать его начальные значения. Например, вот как выглядят альтернативные версии объявления массива:
static void ArrayInitialization
{
Console.WriteLine("=> Array Initialization.");
// Синтаксис инициализации массивов с использованием ключевого слова new.
string[] stringArray = new string[]
{ "one", "two", "three" };
Console.WriteLine("stringArray has {0} elements", stringArray.Length);
// Синтаксис инициализации массивов без использования ключевого слова new.
bool[] boolArray = { false, false, true };
Console.WriteLine("boolArray has {0} elements", boolArray.Length);
// Инициализация массива с применением ключевого слова new и указанием размера.
int[] intArray = new int[4] { 20, 22, 23, 0 };
Console.WriteLine("intArray has {0} elements", intArray.Length);
Console.WriteLine;
}
Обратите внимание, что в случае использования синтаксиса с фигурными скобками нет необходимости указывать размер массива (как видно на примере создания переменной
stringArray
), поскольку размер автоматически вычисляется на основе количества элементов внутри фигурных скобок. Кроме того, применять ключевое слово