Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Статический конструктор? (http://www.flasher.ru/forum/showthread.php?t=179844)

PlutDem 22.05.2012 23:08

Статический конструктор?
 
Здравствуйте, у меня есть класс с статической переменной в которой находится массив. У наследников этого класса будет разное содержимое этого массива. Как можно заполнить массив у наследников класса без вызова специальной инициализирующей функции? Да и просто если у родственных классов есть одинаковые статичные переменные, то как и назначит различные значения?
Код AS3:

public class SMClast{
 
    public static var allowedTypes:Vector.<Class> = new Vector.<Class>;
 
    public function SMClast() {
 
    }
 
}

Насколько я понимаю, так делать нельзя?
Код AS3:

public class DType extends SMClast{
 
    public static var allowedTypes:Vector.<Class> = new Vector.<Class>(Sth1,Sth2,Sth3);
 
    public function DType () {
 
    }
 
}


Korchy 22.05.2012 23:14

Статический элемент класса существует всегда. Соответственно и для класса-наследника он должен существовать без дополнительной переинициализации. Просто заполняете массив в наследнике и все.

HardCoder 22.05.2012 23:23

Цитата:

Сообщение от PlutDem (Сообщение 1080802)
класс с статической переменной в которой находится массив. У наследников этого класса будет разное содержимое этого массива.

Вам не кажется это глупостью?

Добавлено через 1 минуту
Цитата:

Сообщение от PlutDem (Сообщение 1080802)
Насколько я понимаю, так делать нельзя?
Код AS3:

public class DType extends SMClast{
 
    public static var allowedTypes:Vector.<Class> = new Vector.<Class>(Sth1,Sth2,Sth3);
 
    public function Mount() {
 
    }
 
}


Зато можно вот так:
Код AS3:

public class DType extends SMClast{
 
    public static var allowedTypes:Vector.<Class> = new <Class>[Sth1,Sth2,Sth3];
 
    public function Mount() {
 
    }
 
}


PlutDem 22.05.2012 23:25

А если не планируется создавать экземпляр класса или значение статической переменной нужно до создания объекта?

HardCoder 22.05.2012 23:28

Какого объекта? Статическая переменная - это переменная класса, а не экземпляра. Даже, не создавая объект DType, переменная allowedTypes сразу будет доступна:
Код AS3:

trace(DType.allowedTypes)


-De- 22.05.2012 23:28

Статика не наследуется. Если был класс А и была у него стат. переменная А.б, то у его наследника Б не будет автоматом стат. переменной Б.б.

Korchy 22.05.2012 23:34

Цитата:

Сообщение от -De- (Сообщение 1080809)
Статика не наследуется. Если был класс А и была у него стат. переменная А.б, то у его наследника Б не будет автоматом стат. переменной Б.б.

Действительно. Что-то я ступил совсем.

PlutDem 22.05.2012 23:41

Я аж не успеваю комменты редактировать:) Лучше уж, опиши задачу:
Есть несколько родственных классов и у них есть функция, которая проверяет передаваемый ей объект на принадлежность к одному из классов. Список этих классов у каждого класса свой и должен хранится в статическом свойстве этого класса.
Вот например, есть коробка в которую можно складывать только помидоры и молотки, а в другую коробку можно складывать только телефоны, цветы, бумагу и т.п. Нужно же где то хранить список того, что можно положить в коробку.

Korchy 22.05.2012 23:48

Так?
Код AS3:

        public class{
                public static var a:Array = new Array(0,1);
                public function A() {
                }
        }
 
        public class B extends A {
                public static var a:Array = new Array(2,3);
                public function B() {
                }
        }
 
trace(A.a[0]);
trace(A.a[1]);
trace(B.a[0]);
trace(B.a[1]);
 
0
1
2
3


GBee 22.05.2012 23:50

Цитата:

Нужно же где то хранить список того, что можно положить в коробку.
В отдельном классе? Коробка не должна "думать", что в нее кладут. Максимум она имеет пластырь с надписью.


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

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