Учитывая, что мутабельные структуры обычно считаются злом (например, Why are mutable structs "evil"?), есть ли потенциальные преимущества, которые могли побудить разработчиков .NET framework сделать System.Windows.Point
& System.Windows.Vector
mutable?
Я хотел бы понять это, чтобы решить, имеет ли смысл делать мои собственные подобные структуры mutable (если вообще имеет смысл). Возможно, решение сделать Point
и Vector
mutable было просто ошибкой в суждении, но если была веская причина (например, преимущество в производительности), я хотел бы понять, в чем она заключалась.
Я знаю, что несколько раз спотыкался о реализацию метода 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
...так что, похоже, неизменяемость - хорошая идея просто для того, чтобы избежать путаницы, но опять же, возможно, в некоторых случаях она стоит этой потенциальной путаницы.