Найти тему

На этом вопросе валятся все джуниоры на C#

Оглавление

Если вы хотите пройти успешно собеседование, то вам стоит понимать ответ на этот вопрос. Выбор некачественного обучающего материала, который не поставит вам навык по данной теме, может стоить вам вкусного рабочего места.

Entity & Value Object

Есть два типа объектов которые в первую очередь различаются семантически:

  • Entity - определяется уникальным идентификатором. Обычно это класс и его обобьет размещается в куче. Классический пример - пользователь. Даже если двух пользователей зовут одинаково - это будут разные объекты и они не будут равны.
  • Value Object - объекты этого типа определяются через свои значения и могут располагаться на стеке. Например две точки одинаковы если имеют одинаковый x и y.

Если бы точка была бы entity то представьте ситуацию: игроку мы присвоили позицию портала возрождения. Далее мы передвинули игрока, и опа, передвинулся и портал. Это произошло из-за того, что портал и игрок ссылаются на одну и ту же точку, и если ее изменил игрок то и у портала изменится позиция (точка в пространстве).

Пример кода

Представим код:

int a = 0;
int b = a;
b += 5;
Console.WriteLine(a);

В данном случае с чем мы имеем дело? С типом значения (value object) и в консоли как не странно мы получим 0.

А что в этом случае?

int[] a = {1, 2, 3};
int[] b = a;
b[0] += 5;
Console.WriteLine(a[0]);

А что будет в этом? В этом случае мы имеем дело с ссылочным типом (Entity) и в консоли увидим 6 так, как обе переменным ссылаются на один и тот же массив.