oui et non ... pour [Event]
oui ... mais [Bindable]
est pas seulement une balise de métadonnées ... [Bindable]
(sans arguments !!) indique au compilateur de générer du code AS3, qui fera en sorte un PropertyChangeEvent
est distribué si vous définissez la propriété (vous pouvez voir que si vous laissez le mxmlc garder le code AS3 généré) ...
aussi, pour [Embed]
ce n'est pas le cas ([Embed]
doit être suivi d'une variable.) les interfaces ne peuvent pas avoir de variables) ... vous serez toujours en mesure de récupérer les métadonnées à travers flash.utils::describeType
... ceci est assez incohérent, car certaines balises de métadonnées ne fournissent vraiment que des métadonnées compilées dans la sortie, et certaines métadonnées incite le compilateur à vraiment agir ... encore une fois, les métadonnées fournies par certaines balises sont si fortement utilisées par le framework flexible, elles deviennent une fonctionnalité de langage en MXML (comme [Event]
) ... mais elles ne sont pas en AS3 ... mais AS3 est une représentation assez proche de ce qui se passe sur la VM, alors que MXML et Flex Framework ne sont que vaguement liés ... c'est aussi pourquoi les classes ActionScript et les composants MXML interopèrent très horriblement (vous avez peut-être remarqué que MXML ne avoir le concept d'interfaces, flux d'exécution (et donc le temps), alors que AS3 n'a pas les concepts d'événements ou de liaisons (qui sont "natifs" en MXML, mais sont construits sur AS3, en utilisant des métadonnées, et le flash.events
paquet, en regardant très bien dans MXML, mais étant un nombre impressionnant d'appels et d'instanciations dans AS3)) ...
ce que vous voulez, sans doute pas Je pense personnellement, c'est plutôt une faille que les interfaces puissent avoir des métadonnées ... presque toutes les métadonnées sont utilisées à l'exécution ... à l'exécution, chaque objet a sa propre classe et ses interfaces sont secondaires pour l'introspection/réflexion ...
donc revenir à l'ancienne phrase de l'école: une interface exige un comportement, une classe fournit la mise en œuvre ... [Event(name="fooUpdate", type="com.acme.events.FooEvent")]
est métadonnées pur ... et les métadonnées est mise en œuvre dans le monde de AS3, car cela ne nécessite pas de faire quoi que ce soit (vous pouvez aussi écrire [Bar(foo="123")]
) ... c'est une balise à mettre en haut d'une classe, si et seulement si la classe a cette ligne quelque part dans son implémentation: this.dispatchEvent(new FooEvent(FooEvent.FOO_UPDATE));
. .. ce que vous essayez de dire est, toute implémentation IFoozer
transmettra les FooEvent.FOO_UPDATE
... c'est une garantie que le compilateur ne peut pas fournir, car il ne vérifie pas les métadonnées par rapport à la mise en œuvre ...
espoir qui a aidé ...