Другие языки программирования и технологии

В чем смысл конструктора в c#?

Допустим чем этот код отличается от кода снизу? на первом с конструктор на втором без

1)
lass Car
{
public double speed;
public double mass;
public Car(int x, int c)
{
speed = x;
mass = c;
}
}
class Program
{
static void Main(string[] args)
{
Car newCar = new Car(200,3000);

}
}

2) class Car
{
public double speed;
public double mass;

}
class Program
{
static void Main(string[] args)
{
Car newCar = new Car();
newCar.speed = 200;
newCar.mass = 3000;

}
}

Я лишь заметил, что с конструктором можно присвоить значение, если тип private. В чем тогда разница между private и public?
Смысл конструктора не только в краткости кода. Тут есть концептуальный смысл.

Конструктор гарантирует, что объект будет сразу создан в непротиворечивом состоянии. В твоём примере может требоваться, чтоб атрибуты speed и mass имели значение из определённого диапазона: не слишком большие и не слишком маленькие. При установке значения можно сделать проверку в set-методе свойства. Но без конструктора невозможно гарантировать, что оба поля будут инициализированы.

У объекта могут быть константные атрибуты, которые не должны меняться. Конструктор инициализирует их, и больше они не меняются. Их нельзя изменить, поскольку у внешнего кода нет возможности изменения этих атрибутов (это делается при помощи свойств или модификатора readonly).
В C# есть константные объекты, которые никогда не меняются, например строки. Содержимое строки может быть задано только при её создании конструктором (или статическим методом, выполняющим роль вспомогательного конструктора).

Смысл ООП не в том, чтоб писать что попало. Смысл в том, чтоб код был надёжным, был защищён от ошибок программиста.
Артур Шакуров
Артур Шакуров
58 065
Лучший ответ
С конструктором строить объект быстрее и удобнее. А без него придётся каждый раз тыкаться по одному.
N[
Nar [Kotik]
71 508
Во-первых, public поля в классе - нарушение принципа закрытости в ООП. Никогда так не делайте. Такие вещи всегда должны объявляться как свойства.
Во-вторых, если вам не обязательно задавать эти значения сразу, то конструктор с параметрами и не нужен.
В-третьих, в конструкторе вы всегда можете добавить проверку корректности переданных значений, чего во втором случае сделать нельзя.
В-четвёртых, это философский вопрос и зависит от вашего опыта и собственных взглядов на задачу. Возможно этот класс вообще стоит сделать абстрактным. Возможно объекты стоит создавать через фабрику. В общем тут скорее творчество, чем строгие правила.
Женя Орлов
Женя Орлов
14 410
С конструктором удобнее, меньше букв. Ты ленив и инфантилен, раз не ценишь свое время и силы.