При створенні масиву, що складається з елементів посилального типу, пам'ять виділяється тільки під посилання на елементи, а самі елементи необхідно розмістити в хіпові явним чином. Як приклад створимо масив з об'єктів деякого класу Monster:
using System;
namespace ConsoleApplication1
{
class Monster
{
string name; // закриті поля
int health, ammo;
public Monster()
{
this.health = 100;
this.ammo = 100;
this.name = "Noname";
}
public Monster(string name)
: this()
{
this.name = name;
}
public Monster(int health, int ammo, string name)
{
this.health = health;
this.ammo = ammo;
this.name = name;
}
public int Health
{
get
{
return health;
}
set
{
if (value > 0) health = value;
else health = 0;
}
}
public int Ammo
{
get
{
return ammo;
}
set
{
if (value > 0) ammo = value;
else
ammo = 0;
}
}
public string Name
{
get
{
return name;
}
}
public void Passport()
{
Console.WriteLine("Monster {0} \t health = {1} ammo = {2}",
name, health, ammo);
}
}
class Classl
{
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 =
|
| ammo =
|
|
Monster
| Crazyl
| health =
|
| ammo =
|
|
Monster
| Crazy2
| health =
|
| ammo =
|
|
Monster
| Crazy3
| health =
|
| ammo =
|
|
Monster
| Crazy4
| health =
|
| ammo =
|
|
У операторові 1 виділяється п'ять елементів пам'яті під посилання на екземпляри класу Monster. Ці посилання заповнюються значенням null. У циклі 2 створюються п'ять об'єктів. Цикл 3 демонструє зручність застосування оператора foreach для роботи з масивом.