Учитывая, что изменчивые структуры обычно считаются злыми (например, Почему изменчивые структуры "злые" ?), существуют потенциальные выгоды, которые могли бы побудить разработчиков .NET framework, чтобы сделать System.Windows.Point
и System.Windows.Vector
изменчивым?
Я хотел бы это понять, поэтому я могу решить, имеет ли смысл сделать мои собственные подобные структуры изменчивыми (если вообще когда-либо). Возможно, решение сделать Point
и Vector
изменчивым было просто ошибкой в оценке, но если есть веская причина (например, преимущество в производительности), я хотел бы понять, что это было.
Я знаю, что несколько раз наткнулся на реализацию метода Vector.Normalize()
, потому что он, неожиданно (!), не возвращает свежий Vector
. Он просто изменяет текущий вектор.
Я всегда думаю, что он должен работать следующим образом:
var vector = new Vector(7, 11);
var normalizedVector = vector.Normalize(); // Bzzz! Won't compile
Но он действительно работает следующим образом:
var vector = new Vector(7, 11);
vector.Normalize(); // This compiles, but now I've overwritten my original vector
... так что кажется, что неизменность - это хорошая идея, просто для того, чтобы избежать путаницы, но опять же, возможно, это стоит того, что потенциальная путаница в некоторых случаях.