@estry

Где лучше создавать экземпляр класса C#?

Привет. В методе нужно создавать экземпляр класса и возвращать его из метода. Подскажите где лучше его создать, в методе или поле класса.
Так?
class Cars
{	
	public Engine CreateEngine()
	{
		Engine engine = new Engine();
		
		return engine;
	}
}


Или вот так?
class Cars
{	
	Engine engine = new Engine();
	
	public Engine CreateEngine()
	{
		
		
		return engine;
	}
}
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 4
hePPer
@hePPer
в ваших примерах нет разницы где создавать - т.к. там разное поведение.
в первом случае на запрос двигателя будет создаваться новый каждый раз, а во втором - возвращаться один и тот же.
Ответ написан
@yuopi
C# developer
Первый жизнеспособный, если только к двигателю больше никакой метод в классе Car не будет обращаться.

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

class Cars 
{
      private Engine _engine;

      public Engine Engine => _engine;  //если нужен доступ к Engine из другого класса

      public void CreateEngine() 
      {
            _engine = new Engine();
      }
}
Ответ написан
Комментировать
DmitryITWorksMakarov
@DmitryITWorksMakarov
Машина не создаёт двигатели, двигатели создаёт завод.

Но если абстрагироваться от смысла и названий, то оба варианта могут существовать:

В первом варианте мы создаём каждый раз новый объект. Например, это может быть метод для парсинга строк и создания на основе этих строк разных объектов. Что-то типа: Node ParseNode(string textNode);

Во втором случае объект выдаваемый методом создаётся при создании класса. В этом случае мы имеем что-то подобное паттерну Singleton (Одиночка). У нас есть один объект, эксплуатация которого затратна по ресурсам (например, долго создаётся, или требует много памяти, или требует отдельное сетевое соединение), но в целом для работы остального кода достаточно и одного этого объекта. Мы каким-то способом этот объект создаём и затем всем кому надо отдаём один и тот же объект.
Ответ написан
DanielMcRon
@DanielMcRon
C# && Unity
Если нужно создавать и возвращать, то первый
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы