2009-07-23 8 views
5

Dans Actionscript 3, je ne peux pas déclarer les variables dans les interfaces. Je ne comprends pas. Je sais que je peux contourner ce problème en définissant des getters et setters, mais si je veux juste une propriété publique simple? J'utilise habituellement des getters et des setters s'il y a quelque chose à faire quand je mets ou obtiens une propriété, mais que se passe-t-il si je veux simplement stocker une valeur?Pourquoi les propriétés ne sont pas déclarables dans les interfaces

Répondre

0

Je ne suis pas une programmation actioscript, mais les interfaces (en java par exemple) sont destinées à définir le comportement et non l'état, donc les intrerfaces déclarent simplement les méthodes que la classe implémente l'interface doit définir. Les propriétés (ou la variable d'instance) ne sont généralement pas nécessaires pour définir le comportement et sont interdites dans les interfaces.

+0

propriétés ne sont pas les mêmes que les variables d'instance. –

+1

+1 sur cela ... en principe ... parce que ce n'est pas vraiment valable pour AS3 ... il y a une distinction entre les propriétés (fournies par les accesseurs) et les variables ... de l'extérieur c'est complètement transparent, étant IDENTIQUE sur le niveau syntaxique ... mais effectivement l'accès à la propriété signifie un appel et l'accès variable ne ... interfaces peuvent refuser les accesseurs de propriété, mais pas les variables ... ce n'est pas 100% cohérent ni raisonnable ... mais c'est la vie, je suppose ... :) – back2dos

2

Vous pouvez le mettre comme ceci: les interfaces existent parce que dans votre langage vous ne pouvez pas hériter de plusieurs classes de base abstraites. Si AS3 vous aurait permis de le faire, il n'aurait probablement pas d '«interfaces», mais de «purs class abstraits». En d'autres termes, avoir des propriétés implémentation dans votre interface conduirait à des conflits de noms et de là à d'autres problèmes d'héritage multiple (diamant).

Cependant, avoir juste un getter ou un setter sans implémentation devrait fonctionner.

public interface I { function get A():int; } 

(je n'ai pas le compilateur AS3 à portée de main)

+1

votre réponse est la bonne solution ... même si je suis totalement en désaccord sur ce que vous dites sur les interfaces ... l'héritage est intrinsèquement mauvais ...: D ... non, sérieusement ... le point de l'héritage est CODE REUTILISER ... mais habituellement il est mal utilisé pour accomplir ce pour quoi les interfaces sont conçues: décrire un rôle d'objet ... règle d'or: les classes définissent l'implémentation, le comportement des interfaces ... n'utilisent pas les classes pour exiger le comportement ... N'écrivez pas someMethod (somePa ram: SomeClass), write someMethod (someParam: SomeInterface) ... c'est beaucoup plus flexible/extensible et plus propre ... – back2dos

+0

J'ai essayé d'éviter de faire une déclaration sur l'héritage multiple étant bon ou mauvais :) Seulement fait remarquer que Si vous avez implémenté des propriétés dans ces 'interfaces', cela nécessiterait un mécanisme similaire à l'héritage multiple lorsque le compilateur trouve 2 interfaces avec la même propriété définie. – Vlagged

Questions connexes