Форум 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=176019)

Михаил Свинцов 29.02.2012 14:08

Глобальное свойство
 
Допустим у меня есть класс в котором хранятся ссылки на экземпляры других классов. Чтобы пользоваться этими ссылками надо в каждый класс в котором они хранятся написать
Код AS3:

var ref = new Ref();

.

А вопрос вот в чем можно ли как-то объявить эту переменную(ref) на уровне пакета чтоб не загромождать код этими строками(т.к. классов(небольших правда) будет около 50)????

Inet_PC 29.02.2012 14:17

Код AS3:

public static var ref: Ref = new Ref();

И в любом месте можно обратиться, как имя_класс.ref. Если я вас правильно понял.

Zebestov 29.02.2012 14:17

Можно в классе Ref пометить все ссылки как static и пользоваться ими из любого места:

Код AS3:

Ref.someReference

Добавлено через 28 секунд
А еще есть синглтон.

Михаил Свинцов 29.02.2012 14:22

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

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

А еще есть синглтон
А это что такое??? можно поподробнее

Zebestov 29.02.2012 14:29

Цитата:

Сообщение от Михаил Свинцов (Сообщение 1066176)
у меня итак в Ref все экземпляры объявлены статическими..., но не известно по какой причине я не могу обратиться к этим переменным из других классов

Может ты просто забыл import?

Цитата:

Сообщение от Михаил Свинцов (Сообщение 1066176)
А это что такое??? можно поподробнее

Птщь

Михаил Свинцов 29.02.2012 14:33

а нужно делать импорт если все в одном пакете??

Zebestov 29.02.2012 14:35

Нет. Но тогда остается загадкой, почему не получается обратиться к статическому полю класса указанным ранее образом. Код бы посмотреть. Твоего Ref, твоего обращения.

Михаил Свинцов 29.02.2012 14:40

Вот Основной класс
Код AS3:

package p {
        import flash.display.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
 
    public class Application extends MovieClip {
            public function Application() {
                        trace("Конструктор основного класса Application");
                        trace(Ref._panel);
 // Часть кода я выпустил т.к. он тут вообще не при чем.
            }
    }
}

Добавлено через 2 минуты
а вот сам Ref
Код AS3:

package p {
        import flash.display.*;
        import flash.display.Sprite;
 
        public class Ref extends Sprite {
                public static var _glav0;
                public static var _glav1;
                public static var _panel;
 
                public function Ref(){
                    _glav0 = new Glava0();
                    _glav1 = new Glava1();
                    _panel = new Panel();
                }
        }
}

Добавлено через 3 минуты
выводит кстати в аутпат вот это


Конструктор основного класса Application
undefined
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChild()
at p::Application$iinit()[C:\Users\Михаил\Documents\biolog8\src\p\Application.as:12]

Добавлено через 6 минут
если я добавляю строку
Код AS3:

var ref = new Ref();

в основной класс тогда вместо undefined выводит [object Panel]

Inet_PC 29.02.2012 14:51

Естественно Вы же нигде ни разу не создали экземпляр класса, в конструкторе которого и инициализируются статические переменные. Либо где нибудь один раз напишите
Код AS3:

var ref = new Ref();

да хоть в Ref:
Код AS3:

public static var instance:Ref = new Ref();

Либо:
Код AS3:

package p {
        import flash.display.*;
        import flash.display.Sprite;
 
        public class Ref extends Sprite {
                public static var _glav0= new Glava0();
                public static var _glav1 = new Glava1();
                public static var _panel = new Panel();
 
                public function Ref(){
 
                }
        }
}

И не помешает почитать чем отличается статическая переменная от не статической.

Zebestov 29.02.2012 14:56

Код AS3:

package p {
        public class Ref {
                public static var glav0:Glava0 = new Glava0();
                public static var glav1:Glava1 = new Glava1();
                public static var panel:Panel = new Panel();
 
                public function Ref()
                {
                }
        }
}

Публичные поля ни к чему начинать с подчеркивания.


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

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