Показать сообщение отдельно
Старый 28.01.2017, 17:04
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 2  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
В массив записывается набор экземпляров класса Point, однако сам класс совсем не знает, какой именно класс участвует в этом процессе. Именно поэтому в классе массив Object, под тип которого можно привести абсолютно что угодно.
Код AS3:
ОбъектНекоегоКласса.какой-тоМетод () as Какой-тоТип; // вот как это работает ?
метод ОбъектНекоегоКласса возвращает какой-то объект. В данном случае это
Цитата:
public function getObject():Object
{
if ( counter > 0 )
return pool[ --counter ];
// если объекты закончились
// создаю объект и увеличивая длину массива
pool.unshift( new className() );
return pool[0];
}
Где
Цитата:
private var pool:Vector.<Object>;
Но при этом этот объект не является экземпляром Object, а является его потомком.
В этом случае мы можем привести его тип к его истинному типу, которым он был до записи в Vector.<Object>.

Почему Point?
Потому, что мы передаём его в конструктор тут
Цитата:
var pool:ObjectPool = new ObjectPool(Point, 20);
Затем он проходит сюда
Цитата:
public function ObjectPool(className:Class, length:uint = 1)
{
this.className = className;
pool = new Vector.<Object>(length);

var i:uint = counter = length;
//создадим начальный набор объектов
while( --i > -1 )
pool[i] = new className();
}
Это значит, что Pool создаёт набор экземпляров класса, который мы передаём его в конструктор, записывает его в типизированный массив Object, и при вытаскивании нужно привести тип к истинному.

Object используется потому, что он является предком всех существующих и создаваемых вами классов. Можно привести тип любого экземпляра класса к Object.

Добавлено через 1 час 8 минут
Цитата:
var _bit_map:Bitmap = _loader.content as Bitmap;
_loader.content имеет также неопределённый тип: Loader может загружать как изображения(Bitmap), звуки(Sound), так и другие swf(Sprite, MovieClip)
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 28.01.2017 в 17:15.