Создание экземпляра класса, который реализует интерфейс на основе имени класса? - PullRequest
0 голосов
/ 17 февраля 2011

Есть ли способ создать экземпляр класса, который реализует интерфейс на основе имени класса?

Я пытаюсь:

var ClassReference:Object = getDefinitionByName("movement.OuterSpaceMovement") as IMovement;
var m:IMovement = new ClassReference as IMovement;
trace("startup..." + m);

-Но я получаю сообщение об ошибке ReferenceError: Ошибка # 1065 (OuterSpaceMovement) не определена.

У меня есть несколько классов, которые реализуют один и тот же интерфейс (IMovement), но мне нужно иметь возможность генерировать новые экземпляры этих классов и затем передавать эти экземпляры как тип данных (тип данных IMovement) другим классам ...

Итак, я попробовал:

var ClassReference:Class = getDefinitionByName("OuterSpaceMovement") as Class;
var m:IMovement = new ClassReference() as IMovement;

и это, похоже, не работает ... но следующее

var m:IMovement = new OuterSpaceMovement();

делает ??

1 Ответ

1 голос
/ 17 февраля 2011

Ваш ClassReference должен иметь тип Class, поэтому:

var ClassReference:Class = getDefinitionByName("movement.OuterSpaceMovement") as Class;
var m:IMovement = new ClassReference() as IMovement;

Это должно работать, если только нет проблемы с определением класса (оно должно быть включено в сборку, поэтому вам нужно хотя бы один раз импортировать OuterSpaceMovement где-нибудь в вашей программе или явно включить его в настройки сборки или параметры компилятора ).

И, конечно, OuterSpaceMovement должен реализовывать IMovement. ;)

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