|
|
|||||
Помогите понять строчку кода
Привет всем, я тысячакратно извиняюсь за тупой вопрос.
Ребят скажите как понять приведение типа такого характера: Дабы больше разъяснить, выкладываю весь код с одного сайта (возможно некоторые побывали там )): public final class ObjectPool { private var pool:Vector.<Object>; private var counter:uint; private var className:Class; 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(); } public function getObject():Object { if ( counter > 0 ) return pool[ --counter ]; // если объекты закончились // создаю объект и увеличивая длину массива pool.unshift( new className() ); return pool[0]; } public function releaseObject(value:Object):void { pool[ counter++ ] = value; } // необязательный метод для тестирования public function toString():String { return "Pool of " + className + " count = " + counter + "/" + pool.length; } } var pool:ObjectPool = new ObjectPool(Point, 20); trace(pool); trace("---------"); for (var i:int = 0, p:Point; i < 40; i++) { p = pool.getObject() as Point; // как здесь это работает ??? p.x = Math.random() * 400; if(p.x > 300) pool.releaseObject(p); trace( pool.toString() ); } ОбъектНекоегоКласса.какой-тоМетод () as Какой-тоТип; // вот как это работает ? или же: var _bit_map:Bitmap = _loader.content as Bitmap; // ? |
|
||||||
В массив записывается набор экземпляров класса Point, однако сам класс совсем не знает, какой именно класс участвует в этом процессе. Именно поэтому в классе массив Object, под тип которого можно привести абсолютно что угодно.
метод ОбъектНекоегоКласса возвращает какой-то объект. В данном случае это Цитата:
Цитата:
В этом случае мы можем привести его тип к его истинному типу, которым он был до записи в Vector.<Object>. Почему Point? Потому, что мы передаём его в конструктор тут Цитата:
Цитата:
Object используется потому, что он является предком всех существующих и создаваемых вами классов. Можно привести тип любого экземпляра класса к Object. Добавлено через 1 час 8 минут Цитата:
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 28.01.2017 в 17:15. |
|
|||||
так, ага...
Цитата:
|
|
|||||
Возможны оба варианта. Зависит от того, что импортировать перед этим кодом
var pool:ObjectPool = new ObjectPool(Point, 20); trace(pool); trace("---------"); for (var i:int = 0, p:Point; i < 40; i++) { p = pool.getObject() as Point; // как здесь это работает ??? p.x = Math.random() * 400; if(p.x > 300) pool.releaseObject(p); trace( pool.toString() ); } import com.zackscript.tools.Point; var pool:ObjectPool = new ObjectPool(Point, 20); trace(pool); trace("---------"); for (var i:int = 0, p:Point; i < 40; i++) { p = pool.getObject() as Point; // как здесь это работает ??? p.x = Math.random() * 400; if(p.x > 300) pool.releaseObject(p); trace( pool.toString() ); } import flash.geom.Point; var pool:ObjectPool = new ObjectPool(Point, 20); trace(pool); trace("---------"); for (var i:int = 0, p:Point; i < 40; i++) { p = pool.getObject() as Point; // как здесь это работает ??? p.x = Math.random() * 400; if(p.x > 300) pool.releaseObject(p); trace( pool.toString() ); }
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 28.01.2017 в 18:26. |
|
|||||
Так ну теперь кое-что стало понятно, вот тут: pool[i] = new className(); он пока ни знает какой объект класса создает , так...
А здесь: p = pool.getObject() as Point; - заставляет вернуть в место Object тип Point (мой/пользовательский) |
|
|||||
Нет, он возвращает Object, который на самом деле Point, и этим
вы говорите машине исполнения, что возвращаемый объект на самом деле не Object, а его потомок, и вы хотите использовать его как Point(вызывать методы и свойства Point у этого объекта). Всё это написано в документации, товарищ.
__________________
There is no thing in this world that is not simple. |
|
|||||
Спасибо товарищ ) теперь ясно.
Цитата:
|
|
|||||
Цитата:
http://help.adobe.com/ru_RU/ActionSc...0204-7f8a.html Немного недописано, действительно, что оператор на самом деле делает. Но я точно помню, что где-то читал, либо в книге Колина Мука, либо в документации)
__________________
There is no thing in this world that is not simple. |
|
|||||
public var myArray:Array = ["one", "two", "three"]; trace(myArray as Array); // one,two,three trace(myArray as Number); // null trace(myArray as int); // null Хотя много раз видел этот пример. Добавлено через 35 минут ZackMercury, ещё один вопрос , если тип возвращаемого объект я присвою заранее то и не нужно приведение ? p.s. возможности тестирования пока нет ) |
|
|||||
тогда
__________________
There is no thing in this world that is not simple. |
Часовой пояс GMT +4, время: 06:54. |
|
« Предыдущая тема | Следующая тема » |
|
|