Да, BitmapData.rect, очевидно, является геттером, который создает новый прямоугольник при доступе.
Вы можете доказать это, сравнивая ссылки или исследуя адреса памяти:
Пример:
package
{
import flash.display.Sprite;
import flash.display.BitmapData;
import flash.geom.Rectangle;
public class BitmapDataRectTest extends Sprite
{
public function BitmapDataRectTest()
{
var bmp:BitmapData = new BitmapData(100, 100, true, 0);
trace(bmp.rect == bmp.rect); // false
var rect1:Rectangle = bmp.rect;
var rect2:Rectangle = bmp.rect;
trace("Place breakpoint here and look at rect1 and rect2 memory addresses");
// rect1 address on my pc: @6900f71
// rect2 address on my pc: @6900f41
}
}
}
РЕДАКТИРОВАТЬ Подобное поведение в нативных классах:
DisplayObject.transform
: возвращает новый экземпляр Transform при каждом доступе
Transform.colorTransform
: возвращает новый экземпляр ColorTransform при каждом доступе
DisplayObject.filters
: возвращает новый экземпляр Array при каждом доступе
- ... вы можете найти множество других случаев, когда вы получаете копию внутреннего объекта.
Во всех этих случаях классы защищают себя от взлома. Просто подумайте об этом следующим образом: когда класс использует агрегацию, он не может представить свои агрегированные экземпляры как есть, потому что в противном случае необходимо будет уведомлять основной класс об изменениях во внутренних объектах, когда они происходят. Это большая логика для обновления и проверки изменений в каждом поле каждого агрегированного экземпляра.