В чем смысл передачи аргумента в конструктор класса?

Вот рабочие примеры:

Передаем аргумент в конструктор класса
class MyClass
{
public MyClass(int number)
{
Console.WriteLine(number);
}
}

Передаем аргумент в метод
static void Main()
{
MyClass instance1 = new MyClass(1);
MyClass instance2 = new MyClass(2);
Console.ReadKey();
}


То же самое, но без конструктора
class MyClass
{
public void MyMethod(int number)
{
Console.WriteLine(number);
}
}

static void Main()
{
MyClass instance1 = new MyClass();
MyClass instance2 = new MyClass();
instance1.MyMethod(1);
instance1.MyMethod(2);
Console.ReadKey();
}


Зачем и когда нужно передавать аргумент в конструктор класса? Ведь всё тоже самое можно сделать с помощью обычного метода. (Конструктор тоже метод, но особенный - вызываемый автоматически.)
Да, с методом на 1 шаг больше. Но на мой взгляд, такой код выглядит более правильным.

Я достаточно редко вижу классы в который передают аргументы. Обычно конструктор в классе выполняет какие либо операции, которые должны быть всегда выполнены при создании экземпляра класса.
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
1. А зачем вам вообще инстанс класса, если можете просто передавать в статический метод нужные аргументы и получать нужный результат?
2. Аргументы в конструктор передаются чтобы провести инициализацию класса какими-то определенными обязательными данными без которых класс не сможет полноценно работать
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
sarapinit
@sarapinit
Точу водой камень
В конструкторе обычно передают зависимости класса. Например какой-то репозиторий/провайдер/сервис.
Собственно это происходит из-за использования принципа единственной ответственности. Мы дробим работу на кусочки, возможно для каких-то частей вводим абстракцию и несколько реализаций. А потом эти кусочки собираем вместе.
Теоретически можно передавать зависимости и в метод. Но есть 2 проблемы:
- когда зависимостей больше одной, это утомляет
- код вызывающий метод может ничего не знать об этих зависимостях
Ответ написан
@vabka Куратор тега C#
Токсичный
В вашем примере вообще нет ни одной причины использовать конструкторы.
Конструкторы нужны для инициализации объекта, а не выполнения действий.
Например в случае класса System.Collections.Generic.List мы можем передать в конструкторе начальное значение списка и его начальную вместительность.
Ответ написан
HemulGM
@HemulGM
Delphi Developer, сис. админ
class MyClass
{
  private int n;
  public MyClass(int number)
  {
    n = number;
  }
  public void MyMethod(int number)
  {
    Console.WriteLine(number + n);
  }
}

static void Main()
{
  MyClass instance1 = new MyClass(1);
  MyClass instance2 = new MyClass(2);
  instance1.MyMethod(1);
  instance2.MyMethod(1);
  Console.ReadKey();
}


Проверь код
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
НПК «Катрен» Новосибирск
от 90 000 ₽
WB—Tech Москва
от 140 000 до 160 000 ₽
от 3 500 до 4 000 $
06 мар. 2021, в 13:37
2000 руб./за проект
06 мар. 2021, в 13:18
600 руб./за проект