Использовать структуру или класс? - C#
Формулировка задачи:
Здравствуйте, что лучше использовать если нужно хранить позицию и вращение 2d объекта?
Несколько наблюдений:
Нужно иметь возможность ссылаться на трансформацию объекта, поэтому структура, передающаяся по значению, не подходит.
Передавая данные в методы в которых не предполагается менять изначальную трансформацию объекта, лучше использовать структуру так как она гарантированное передается по значению.
Структура, в целом, производительнее.
Вариант №1: Использовать для трансформации класс. Когда необходимо получить копию трансформации использовать самописный метод .Clone(). Здесь очень велика вероятность просто забыть клонировать объект, и таким образом изменить оригинальные данные.
Вариант №2: Использовать для трансформации структуру. Не нужно вручную клонировать, плюс к производительности, но нельзя передать значение по ссылке. То есть можно, но придется значения паковать и вместо красивого
получится
Есть ли еще варианты?
public Transform ShapeTransform; ... ShapeTransform.Position
public ITransformable ShapeTransform; ... ShapeTransform.Transform.Position
Решение задачи: «Использовать структуру или класс?»
textual
Листинг программы
interface ITransformable
{
Transform Transform { get; set; }
}
struct Transform
{
private Vector Position;
public float Rotation;
}
class Shape : ITransformable
{
public Transform Transform { get; set; }
}
class Physics
{
public Vector Velocity;
public ITransformable TransformableObject;
public void Update()
{
var transform = TransformableObject.Transform;
transform.Position += Velocity;
TransformableObject.Transform = transform;
}
}