Конструктор – это синтаксически выделенный метод для создания объектов. Если мы говорим про обычные методы – они могут вызываться с любом порядке и если нам нужно как-то инициализировать объект перед вызовом методов мы можем сделать метод 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);”. Скобки по сути вызывают конструктор и передают ему необходимые аргументы.
Конструктор – это контракт объекта, он позволяет гарантировать что на момент вызова его методов будут разрешены зависимости и состояние объекта будет находится в корректной форме.