Почему Rectangle.Size создает новые экземпляры при каждом вызове? - PullRequest
2 голосов
/ 27 августа 2011

При просмотре кода .NET Rectangle.Size возвращает new Size(Width, Height). Почему Microsoft выбрала этот шаблон? Лично я бы подумал, что Size будет храниться внутри структуры, а Rectangle.Width, например, вернет Size.Width. Это предотвратит создание новой структуры при каждом вызове свойства. Я предполагаю, что есть некоторые свойства неизменности, которые повлияли на это решение, но я не уверен, что.

Ответы [ 2 ]

4 голосов
/ 27 августа 2011

Size - это структура, поэтому она не создает новый объект в куче.Это создаст новую копию значения Size, что бы вы ни делали.

Я не вижу, что это будет иметь большое значение в любом случае, если честно.Учитывая, что свойства Width и Height для Size являются встроенными, я вижу, что не будет большого наказания за хранение Size, как вы предлагаете ... но в равной степени я вижу, что конструктор дляSize настолько тривиально, что JIT вполне может преобразовать свойство Rectangle.Size в почти точно такой же собственный код.

Так что я согласен, что это немного странное решение, ноЯ не думаю, что это кого-то сильно обидит.Возможно, это упрощает сериализацию или что-то в этом роде.

0 голосов
/ 29 августа 2011

Если вы всегда получаете ссылку на фактический размер, вы можете создать побочные эффекты при их изменении.Если вы хотите изменить их, вы должны использовать свойства или методы получения и установки объекта, которым вы хотите манипулировать.Если вы хотите использовать их для чего-то другого (расчет макета и т. Д.), Это наиболее правильное решение.

...