При создании массива, состоящего из элементов ссылочного типа, память выделяется только под ссылки на элементы, а сами элементы необходимо разместить в хипе явным образом. В качестве примера создадим массив из объектов некоторого класса Monster:
using System;
namespace ConsoleApplication1
{
class Monster {... }
class Class1
{
static void Main()
{
Random rnd = new Random();
const int n = 5;
Monster[] stado = new Monster[n]; // 1
for (int i = 0; i < n; ++i) // 2
{
stado[i] = new Monster(rnd.Next(1, 100),
rnd.Next(1, 200), "Crazy" + i.ToString());
}
foreach (Monster x in stado) x.Passport(); // 3
}
}
}
Результат работы программы:
Monster Crazy0 health = 18 ammo = 94
Monster Crazy1 health = 85 ammo = 75
Monster Crazy2 health = 13 ammo =6
Monster Crazy3 health = 51 ammo = 104
Monster Crazy4 health = 68 ammo = 114
В программе для получения случайных значений использован стандартный класс Random, который описан далее в этой главе (см. с. 148). В операторе 1 выделяется пять ячеек памяти под ссылки на экземпляры класса Monster?, и эти ссылки заполняются значением null. В цикле 2 создаются пять объектов: операция new выделяет память в хипе необходимого для хранения полей объекта объема, а конструктор объекта заносит в эти поля соответствующие значения (выполняется версия конструктора с тремя параметрами). Цикл 3 демонстрирует удобство применения оператора foreach для работы с массивом.
|
|
Символы и строки
Обработка текстовой информации является, вероятно, одной из самых распространенных задач в современном программировании, и С# предоставляет для ее решения широкий набор средств: отдельные символы, массивы символов, изменяемые и неизменяемые строки и регулярные выражения.