Допустим чем этот код отличается от кода снизу? на первом с конструктор на втором без
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?
Другие языки программирования и технологии
В чем смысл конструктора в c#?
Смысл конструктора не только в краткости кода. Тут есть концептуальный смысл.
Конструктор гарантирует, что объект будет сразу создан в непротиворечивом состоянии. В твоём примере может требоваться, чтоб атрибуты speed и mass имели значение из определённого диапазона: не слишком большие и не слишком маленькие. При установке значения можно сделать проверку в set-методе свойства. Но без конструктора невозможно гарантировать, что оба поля будут инициализированы.
У объекта могут быть константные атрибуты, которые не должны меняться. Конструктор инициализирует их, и больше они не меняются. Их нельзя изменить, поскольку у внешнего кода нет возможности изменения этих атрибутов (это делается при помощи свойств или модификатора readonly).
В C# есть константные объекты, которые никогда не меняются, например строки. Содержимое строки может быть задано только при её создании конструктором (или статическим методом, выполняющим роль вспомогательного конструктора).
Смысл ООП не в том, чтоб писать что попало. Смысл в том, чтоб код был надёжным, был защищён от ошибок программиста.
Конструктор гарантирует, что объект будет сразу создан в непротиворечивом состоянии. В твоём примере может требоваться, чтоб атрибуты speed и mass имели значение из определённого диапазона: не слишком большие и не слишком маленькие. При установке значения можно сделать проверку в set-методе свойства. Но без конструктора невозможно гарантировать, что оба поля будут инициализированы.
У объекта могут быть константные атрибуты, которые не должны меняться. Конструктор инициализирует их, и больше они не меняются. Их нельзя изменить, поскольку у внешнего кода нет возможности изменения этих атрибутов (это делается при помощи свойств или модификатора readonly).
В C# есть константные объекты, которые никогда не меняются, например строки. Содержимое строки может быть задано только при её создании конструктором (или статическим методом, выполняющим роль вспомогательного конструктора).
Смысл ООП не в том, чтоб писать что попало. Смысл в том, чтоб код был надёжным, был защищён от ошибок программиста.
С конструктором строить объект быстрее и удобнее. А без него придётся каждый раз тыкаться по одному.
Во-первых, public поля в классе - нарушение принципа закрытости в ООП. Никогда так не делайте. Такие вещи всегда должны объявляться как свойства.
Во-вторых, если вам не обязательно задавать эти значения сразу, то конструктор с параметрами и не нужен.
В-третьих, в конструкторе вы всегда можете добавить проверку корректности переданных значений, чего во втором случае сделать нельзя.
В-четвёртых, это философский вопрос и зависит от вашего опыта и собственных взглядов на задачу. Возможно этот класс вообще стоит сделать абстрактным. Возможно объекты стоит создавать через фабрику. В общем тут скорее творчество, чем строгие правила.
Во-вторых, если вам не обязательно задавать эти значения сразу, то конструктор с параметрами и не нужен.
В-третьих, в конструкторе вы всегда можете добавить проверку корректности переданных значений, чего во втором случае сделать нельзя.
В-четвёртых, это философский вопрос и зависит от вашего опыта и собственных взглядов на задачу. Возможно этот класс вообще стоит сделать абстрактным. Возможно объекты стоит создавать через фабрику. В общем тут скорее творчество, чем строгие правила.
С конструктором удобнее, меньше букв. Ты ленив и инфантилен, раз не ценишь свое время и силы.
Денис Артюковский
(
Похожие вопросы
- Зачем нужен конструктор в c#?
- Тупые вопросы по C#) Конструкторы, set, get.
- Не работает конструктор в коде C++!
- хотел бы знать мнение специалистов, какой конструктор сайтов лучше всего подходит для создания сайтов?
- Какой самый простой и лучший Конструктор Веб Сайтов - !Только не онлайн!
- Конструктор визиток, подскажите, какой выбрать?
- Интернет-магазин на конструкторе сайтов онлайн - стоит ли делать?
- Есть ли смысл изучать С++ или стоит окончательно перейти на C# ?
- помогите новичку! Конструкторы в С++! я тока учусь и нифига не понял в конструкторах! объясните пожалуста!
- Конструктор сайтов на подобие wix.com