Создание массива объектов
Создадим динамический массив объектов, используя класс List<T>. Необходимо подключить пространство имен System.Collections.Generic:
using System.Collections.Generic;
Создадим список объектов родительского класса Robot:
List<Robot> robots = new List<Robot>();
Добавим объекты класса Robot со своими параметрами (имя, вес, координаты):
robots.Add(new Robot("Alex", 400, 10, 20));
robots.Add(new Robot("Bob", 600, 30, 40));
robots.Add(new Robot("John", 500, 50, 60));
robots.Add(new Robot("Josh", 700, 70, 80));
Получился список, каждый элемент которого — объект класса Robot. Это массив указателей, где каждый элемент указывает на объект в памяти.
// Класс Robot
public class Robot
{
public string Name { get; set; }
public int Weight { get; set; }
public int X { get; set; }
public int Y { get; set; }
public Robot(string name, int weight, int x, int y)
{
Name = name;
Weight = weight;
X = x;
Y = y;
}
}
Перебор элементов массива
Переберем элементы массива с помощью цикла foreach:
foreach (Robot robot in robots)
{
Console.WriteLine(robot.Name);
}
Переменная robot типа Robot последовательно принимает значения элементов списка. Оператор . используется для доступа к свойствам объекта. Предполагается, что в классе Robot есть публичное свойство Name.
Оператор as
Оператор as позволяет обрабатывать объект как объект другого класса, если существует наследование. Заменим класс Robot на класс Killer, наследник Robot, добавив в конструктор параметр — уровень жизни.
// Класс Killer
public class Killer : Robot
{
public int Health { get; set; }
public Killer(string name, int weight, int x, int y, int health) : base(name, weight, x, y)
{
Health = health;
}
public void Laser()
{
Console.WriteLine("Pew pew!");
}
}
Обработаем объект с именем «John» как объект класса Robot:
Robot newRobot = null;
if (robot.Name == "John")
{
newRobot = robot as Robot;
// Обработка newRobot как объекта класса Robot
}
Оператор as безопасно выполняет приведение типов. Если приведение невозможно, newRobot будет null.
Оператор is
Оператор is проверяет, принадлежит ли объект к определенному типу. Возвращает true или false:
if (robot is Robot)
{
Console.WriteLine("Объект является роботом");
}
if (robot is Killer)
{
Console.WriteLine("Объект является киллером");
}
Оператор is полезен для проверки типов объектов в условных операторах, повышая безопасность кода.
Изучены операторы is и as для проверки и преобразования типов объектов в C#. Создан массив указателей на объекты, используя List<T>, продемонстрирован перебор элементов и работа с объектами разных классов. Операторы is и as важны для работы с полиморфизмом и безопасного преобразования типов в C#.