C# для новичков: операторы is и as, массивы объектов

Создание массива объектов

Создадим динамический массив объектов, используя класс 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#.

Что будем искать? Например,программа