Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   [AS2.0] наследование static переменных (http://www.flasher.ru/forum/showthread.php?t=67079)

genius 23.07.2005 23:25

[AS2.0] наследование static переменных
 
есть класс game.visual.VisualObject

Код:

class game.visual.VisualObject {       
    private var instanceNum:Number;       
    static private var instanceCount:Number = 0;

    private function countInstance():Void {
            instanceNum = ++instanceCount;
            TRACE(Flashout.DEBUG + "instanceNum=" + instanceNum);           
    }
}

его наследуют 2 других класса, которые в конструкторе содержат вызов метода countInstance(). в итоге переменная instanceCount содержит количество всех экземпляров класса VisualObject.

мне же нужно, чтобы эта функция считала экземпляры конкретных классов (тех, которые наследуют VisualObject). как это можно сделать? возможно ли вообще? понятно, что если этот код вставить в код каждого класса - считать будет так как надо.

заранее спасибо.

Nirth 24.07.2005 00:52

насколько я понял вопрос, в дочерних классах, сделай вызов супер конструктора(super() )

Nirth 24.07.2005 01:01

вообще я бы сделал дополнительный класс
VOC (VisualObjectCounter) с методом addItem();
Код:

import game.visual.VisualObject;
class package.VOC {
private static var items:Array = new Array();

public static function addItem(item:VisualObject):Void {
items.push(item);
}

public static function getItem(index:Number):VisualObject{
return items[index];
}

pubcli static function getLength():Number {
return items.length
}
}

а в конструкторе VisualObject -
Код:

import package.VOC
class game.visual.VisualObject {       
    private var instanceNum:Number;       

    private function countInstance():Void {
VOC.addItem(this);         
    }
}

ну и в конструкторах дочерних классов
Код:

private function Constructor() {
super();
}


genius 24.07.2005 01:58

я опять неясно выражаюсь :)

смотри. есть SuperClass и SubClass (SubClass extends SuperClass). мне хотелось бы задать свойствами и методами SuperClass возможность для экземпляров SubClass считать себе подобных.

сейчас, когда я задаю переменную в SuperClass:

Код:

static private var instanceCount:Number;
при вызове конструктора

Код:

SubClass() {
instanceCount++;
}

instanceCount увеличивается для всех ПодКлассов SuperClass. мне же нужно, чтобы instanceCount была для каждого отдельного класса своя. но функциональность у неё должна быть абсолютно идентичная. я вот и думаю, как это сделать так, чтобы не пришлось глупо копировать один и тот же код в разные классы.

то есть мне нужно получить static функцию и переменные, которые при наследовании теряют связь с СуперКлассом.

ещё пример. есть класс VisualObject (некий объект на экране). есть ПодКлассы, которые реализуют конкретные объекты. так как объектов много, нужно их мувиклипы где-то размещать. для этого я ввожу свойство

Код:

class VisualObject {
static var private _mc_container:MovieClip;
}

дальше мне хочется, чтобы в каждом отдельном ПодКлассе это свойство было своё (опять нужен отрыв от СуперКласса).

как мне это сделать? неужели только copy/paste?

Nirth 24.07.2005 02:13

хм, не так тебя понял=) вроде только копи пэйст...я поделаю эксперименты когда освобожусь.

Nirth 24.07.2005 02:14

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

MaxLife 24.07.2005 15:15

А если каунтеры хранить в отдельном хэш-массиве, к элементам которого обращаться через typeof(this)?

genius 25.07.2005 15:01

2Nirth: я попробую написать...

2MaxLife: typeof на все классы показывает "Object" :(


Часовой пояс GMT +4, время: 11:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.