Почему System.Windows.Point и System.Windows.Vector mutable?

Учитывая, что мутабельные структуры обычно считаются злом (например, 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

...так что, похоже, неизменяемость - хорошая идея просто для того, чтобы избежать путаницы, но опять же, возможно, в некоторых случаях она стоит этой потенциальной путаницы.

16
задан Community 23 May 2017 в 10:28
поделиться