Просмотр полной версии : Глобальное свойство
Михаил Свинцов
29.02.2012, 14:08
Допустим у меня есть класс в котором хранятся ссылки на экземпляры других классов. Чтобы пользоваться этими ссылками надо в каждый класс в котором они хранятся написать
var ref = new Ref();.
А вопрос вот в чем можно ли как-то объявить эту переменную(ref) на уровне пакета чтоб не загромождать код этими строками(т.к. классов(небольших правда) будет около 50)????
public static var ref: Ref = new Ref(); И в любом месте можно обратиться, как имя_класс.ref. Если я вас правильно понял.
Zebestov
29.02.2012, 14:17
Можно в классе Ref пометить все ссылки как static и пользоваться ими из любого места:
Ref.someReference
Добавлено через 28 секунд
А еще есть синглтон.
Михаил Свинцов
29.02.2012, 14:22
у меня итак в Ref все экземпляры объявлены статическими(точнее переменные в которых они храняться), но не известно по какой причине я не могу обратиться к этим переменным из других классов(а я обращаюсь - Ref.primer) без приведенной в первом сообщении строки
Добавлено через 1 минуту
А еще есть синглтон
А это что такое??? можно поподробнее
Zebestov
29.02.2012, 14:29
у меня итак в Ref все экземпляры объявлены статическими..., но не известно по какой причине я не могу обратиться к этим переменным из других классов
Может ты просто забыл import?
А это что такое??? можно поподробнее
Птщь (http://ru.wikipedia.org/wiki/%D0%9E%D0%B4%D0%B8%D0%BD%D0%BE%D1%87%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0 %B0%D0%BD%D0%B8%D1%8F)#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80_.D0.BD.D0.B0_ActionScript.C2.A03)
Михаил Свинцов
29.02.2012, 14:33
а нужно делать импорт если все в одном пакете??
Zebestov
29.02.2012, 14:35
Нет. Но тогда остается загадкой, почему не получается обратиться к статическому полю класса указанным ранее образом. Код бы посмотреть. Твоего Ref, твоего обращения.
Михаил Свинцов
29.02.2012, 14:40
Вот Основной класс
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
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 минут
если я добавляю строку var ref = new Ref(); в основной класс тогда вместо undefined выводит [object Panel]
Естественно Вы же нигде ни разу не создали экземпляр класса, в конструкторе которого и инициализируются статические переменные. Либо где нибудь один раз напишите var ref = new Ref(); да хоть в Ref:
public static var instance:Ref = new Ref();Либо:
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
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()
{
}
}
}
Публичные поля ни к чему начинать с подчеркивания.
Михаил Свинцов
29.02.2012, 15:11
я знаю что так не надо делать, но мне легче отличать из-за _
Добавлено через 59 секунд
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at p::Glava0$iinit()[C:\Users\Михаил\Documents\biolog8\src\p\Glava0.as:34]
at p::Ref$cinit()
at global$init()[C:\Users\Михаил\Documents\biolog8\src\p\Ref.as:5]
at p::Application$iinit()[C:\Users\Михаил\Documents\biolog8\src\p\Application.as:11]
я все сделал как вы и сказали но возникла ошибка
Ну ошибка видимо в Glava0 на 34 строке. А, что там, никто понятия не имеет.
Zebestov
29.02.2012, 15:20
Чую обращение к stage в конструкторе )
Михаил Свинцов
29.02.2012, 15:22
неа я убрал все обращения к stage уже давно))))
Добавлено через 1 минуту
а там(как раз и назначение этих ссылок) переменная Ref._glav1 передается в конструктор как параметр. Я над этим тоже дума можно это или нет но остановился все таки на МОЖНО
Добавлено через 3 минуты
ch1 = new CreateButton("................................", 14, 0x0000ff, "Segoe Print",
true, false, 280, 40, 100, 100, TextFieldAutoSize.LEFT,
TextFormatAlign.LEFT, false, null, false, null, true,
Ref._glav1)
Добавлено через 4 минуты
а stage я убрал потому что я все равно ничего толкового от нее не дождался
Zebestov
29.02.2012, 15:27
Зачем же такое делать? Стоило ли делать ссылки статическими, чтобы потом передавать их в качестве аргументов? 0о
Михаил Свинцов
29.02.2012, 15:30
тогда как мне сделать
Zebestov
29.02.2012, 15:31
Ок. Полагаю, вопрос про статические поля/методы исчерпан. Остальное выходит за рамки как темы, так и, мне кажется, здравого смысла =)
тогда как мне сделать
Создавай новую тему с новым предметным вопросом.
Михаил Свинцов
29.02.2012, 15:34
да кстати я и сам забылся можно ли все таки как-нибудь объявить переменную на уровне пакета, на подобии _global.primer в AS1
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.