Поскольку Force
определяется как класс (class Force
), когда вы получаете копию из Словаря, вы просто получаете ссылку на экземпляр Force - тот же экземпляр Force, который хранится в Словаре.Внесение изменений в члены в этой ссылке будет отражено во всей вашей программе, которая его использует.
Единственный вариант здесь - создать новый экземпляр.Это то, что вы делаете во втором случае.
Однако, если Сила - это не что иное, как Позиция и Вектор, я бы подумал сделать эту структуру вместо класса.Структуры всегда копируются по значению, а не по ссылке, что приведет к тому, что ваш исходный код будет работать так, как вы ожидаете.Однако если есть что-то большее, класс все равно может быть лучшим вариантом, и в этом случае второй вариант является наилучшим потенциальным решением.
Однако вы можете сократить его, добавив новый конструктор, который принялСила в качестве аргумента, и скопировал Положение + Vecotr.Это позволило бы вам написать:
Force f1 = new Force(Player.JetsDict["RearRight"]);
f1.Position = Vector2.Transform(f1.Position, Matrix.CreateRotationZ(Player.Rotation));