Конструкторы

Конструктор – это синтаксически выделенный метод для создания объектов. Если мы говорим про обычные методы – они могут вызываться с любом порядке и если нам нужно как-то инициализировать объект перед вызовом методов мы можем сделать метод Init. Но к сожалению никто не обязан его вызывать, и вообще необходимость его вызова может быть не очевидной из-за чего в программе может появится ряд неприятных ошибок.

Если нам нужно инициализировать объект мы можем воспользоваться конструктор. Он вызывается первым в момент создания объекта. Он как и метод может принимать параметры.

Если возвращаться к примеру с танком мы можем сказать, что при создание танка нам обязательно нужно указать его скорость и начальную координату.

Фрагмент 1.42

class Program
{
    private static void Main(string[] args)
    {
        Tank tank1 = new Tank(10, 0);

        tank1.MoveRight();
        tank1.MoveRight();

        Console.WriteLine(tank1.GetPositionX()); //20
    }
}

class Tank
{
    public int Speed;
    private int _positionX;

    public Tank(int speed, int positionX)
    {
        Speed = speed;
        _positionX = positionX;
    }

    public void MoveLeft()
    {
        _positionX -= Speed;

        if (_positionX < 0)
            _positionX = 0;
    }

    public void MoveRight()
    {
        _positionX += Speed;

        if (_positionX > 100)
            _positionX = 100;
    }

    public int GetPositionX()
    {
        return _positionX;
    }
}

Как вы видите по этому фрагменту мы добавили странный метод в класс Tank. Он называется точно также и при этом не возвращает никакого значения.

А используем мы конструктор при использование оператора new. Как вы видите у нас есть следующая строка “Tank tank1 = new Tank(10, 0);”. Скобки по сути вызывают конструктор и передают ему необходимые аргументы.

Конструктор – это контракт объекта, он позволяет гарантировать что на момент вызова его методов будут разрешены зависимости и состояние объекта будет находится в корректной форме.

Если вы нашли ошибку, пожалуйста выделите её и нажмите Ctrl+Enter.


Leave a Reply

Your email address will not be published. Required fields are marked *