Имитация внутреннего ctor в ActionScript? - PullRequest
1 голос
/ 22 июля 2009

В ActionScript все конструкторы должны быть открытыми. Однако иногда невозможно разрешить пользователю создавать новый экземпляр класса (поскольку класс может быть привязан к физическим системным ресурсам, сетевым сокетам и т. Д.).

Кто-нибудь знает, есть ли способ сделать класс не создаваемым в ActionScript? По сути, я стремлюсь к следующему:

public class SomeClass
{
    internal function SomeClass():void { }
    . . .
}

Полагаю, я мог бы обойти это, определив интерфейс и реализовав его во внутреннем классе, но мне это просто не подходит:

internal class ClassImpl implements ISomeClass
{
    . . . 
}

Предложения

Ответы [ 2 ]

1 голос
/ 22 июля 2009

Да, аргумент безопасности ...:)

это хорошее начало, но с простым числом, оно будет выдавать только ошибки времени выполнения, если вы передадите числа (плюс есть вероятность, что 1/2 ^ 64 вы угадаете правильное число ...: D) ... используйте это, если вы также хотите иметь ошибки времени компиляции (одна глупость в том, что вы просто не можете установить тип, который не может иметь значение NULL, поэтому null всегда будет допустимым аргументом):

package  {
    public class Test {
        public function Test(enforcer:TestEnforcer) {
            if (enforcer == null) throw "haha, good try ... but, no! :P";
        }
        public static function create():Test {
            //do your cheks here
            return new Test(TestEnforcer.enf);
        }
    }   
}
class TestEnforcer {
    public function TestEnforcer() { }
    public static const enf:TestEnforcer = new TestEnforcer();
}

другой подход состоит в том, чтобы создать открытый интерфейс MyPrivateConstrClass и закрытый / внутренний класс MyPrivateConstrClassImpl и иметь другую функцию, которая будет создавать экземпляр MyPrivateConstrClassImpl, но пусть возвращаемое значение этой функции будет иметь тип MyPrivateConstrClass. .. это немного излишне, но 100% компиляция и безопасность во время выполнения ...

Greetz

back2dos

1 голос
/ 22 июля 2009

Вот решение, где необходимо магическое число , чтобы конструктор работал. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...