концептуальная проблема в наследуемости свойства actionscript-3 - PullRequest
0 голосов
/ 08 октября 2011

скажем, дочерний класс наследует класс Father, а класс Father наследует класс sparkA TextArea.теперь из файла mxml (в FLEX4) я создаю несколько объектов класса Child.Класс отца имеет несколько статических атрибутов, значения которых устанавливаются закрытыми методами, вызываемыми из конструктора.Теперь возникает вопрос: все эти статические атрибуты устанавливаются каждый раз, когда объекты дочернего класса создаются один за другим?

Если ответ положительный, то возможно ли, чтобы статические атрибуты класса отца устанавливались только один раз и не зависели?на количество созданных объектов класса Child.

Пожалуйста, предоставьте любые предложения или советы

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

Ответы [ 2 ]

0 голосов
/ 10 октября 2011

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

public class SomeObject {
   private const _someStaticMember : String;
   private const _someOtherStaticMember : SomeOtherObject;

   static {
       _someStaticMember = "foobar";
       _someOtherStaticMember = new SomeOtherObject();
   }

}
0 голосов
/ 10 октября 2011

Если вы устанавливаете статические переменные из конструктора объекта или методов, вызываемых из конструктора, то да, они будут устанавливаться каждый раз.Чтобы предотвратить это, просто проверьте, установлена ​​ли переменная.

public class Foo {

    public static var bar:Object;

    public Foo(value:Object) {
        if (!bar) {
            bar = value;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...