да и нет ... для [Event]
да ... но [Bindable]
- это не просто тег метаданных ... [Bindable]
(без аргументов !!) инструктирует компилятор генерировать код AS3, который сделает уверен, что PropertyChangeEvent
отправляется, если вы устанавливаете свойство (вы можете видеть, что если вы разрешите mxmlc сохранять сгенерированный код AS3) ...
также, для [Embed]
это не тот случай (за [Embed]
должна следовать переменная. Интерфейсы не могут иметь переменных) ... вы всегда сможете получить метаданные через flash.utils::describeType
... this является довольно противоречивым, так как некоторые теги метаданных действительно предоставляют только метаданные, скомпилированные в вывод, а некоторые метаданные инструктируют компилятор действительно предпринимать действия ... тем не менее, метаданные, предоставляемые некоторыми тегами, настолько интенсивно используются флексической средой, что они становятся языковая особенность в MXML (как [Event]
) ... но они не в AS3 ... однако AS3 представляет собой довольно близкое представление о том, что происходит на виртуальной машине, тогда как MXML и Flex Framework оба слабо связаны с ней .. Именно поэтому классы ActionScript и компоненты MXML очень ужасно взаимодействуют (вы могли заметить, что в MXML отсутствует концепция интерфейсов, потока выполнения (и, следовательно, времени), в то время как в AS3 нет концепции событий или привязок (которые являются «родными» в MXML, но построены на основе AS3 с использованием некоторых метаданных, и пакет flash.events
, выглядящий очень хорошо в MXML, но впечатляющим количеством вызовов и реализаций в AS3)) ...
то, что вы хотите, вероятно, не сработает ... лично я считаю, что недостатком является то, что интерфейсам разрешено иметь метаданные вообще ... почти все метаданные предназначены для использования во время выполнения ... во время выполнения, каждый объект имеет свой собственный класс, а интерфейсы второстепенны для самоанализа / отражения ...
Итак, вернемся к старой школьной фразе: интерфейс требует поведения, класс обеспечивает реализацию ... [Event(name="fooUpdate", type="com.acme.events.FooEvent")]
- это чистые метаданные ... а метаданные - это реализация в мире AS3, потому что это не требует, чтобы кто-либо что-либо делал (вы могли бы просто написать [Bar(foo="123")]
) ... это тег, помещаемый поверх класса, тогда и только тогда, когда у класса есть эта строка где-то в его реализации: this.dispatchEvent(new FooEvent(FooEvent.FOO_UPDATE));
... вы пытаетесь сказать, что любая реализация IFoozer
отправит FooEvent.FOO_UPDATE
... это гарантия, которую компилятор не может предоставить, потому что он не проверяет метаданные по сравнению с реализацией ...
надеюсь, что помогло ...