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
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.
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)
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
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
- 1. GetLocalValueEnumerator() Ne pas retourner toutes les propriétés
- 2. Pourquoi les descendants de TinterfacedObject ne sont-ils pas collectés?
- 3. Pourquoi les énumérations ne sont-elles pas itératives?
- 4. Agrégation UML lorsque les interfaces sont utilisées
- 5. Accéder aux interfaces des classes qui ne les implémentent pas?
- 6. Pourquoi webmin ne peut-il pas ouvrir les fichiers dans les répertoires qui ne sont pas exécutables dans le monde?
- 7. Mocking classes qui ne sont pas des interfaces
- 8. Pourquoi le composant BindingSource ne peut pas voir les propriétés héritées?
- 9. Android: Pourquoi ne pas utiliser les activités dans les onglets?
- 10. Les propriétés de la classe C# ne sont pas visibles dans Visual Basic 6.0
- 11. Les liens sIFR ne sont pas visibles
- 12. Les événements Global.asax ne sont pas déclenchés
- 13. Les sessions ColdFusion ne sont pas dépassées
- 14. Les variables d'instance ajoutées dans les rails d'aide ne sont pas disponibles dans les vues (modèles)?
- 15. méthodes constructeur dans les interfaces
- 16. Les pièces jointes ne sont pas jointes
- 17. Si les opérateurs Ascii sont définissables, pourquoi ne pas utiliser les symboles Unicode?
- 18. java.beans.Introspector getBeanInfo ne récupère pas les propriétés d'une superinterface
- 19. Propriétés de tronçon Autocreate pour les interfaces en C#?
- 20. nouveau mot dans les interfaces dans C#
- 21. Pourquoi les classes comme BindingList ou ObservableCollection ne sont-elles pas sûres pour les threads?
- 22. Pourquoi les hacks css ne sont pas corrigés par les développeurs d'agents?
- 23. Parent/relations d'enfants dans les interfaces
- 24. Rhino Mocks, Interfaces et propriétés
- 25. Pourquoi mon plugin Maven ne récupère-t-il pas les propriétés parentes?
- 26. Toutes les propriétés Entity ne sont pas chargées par EntityDataSource utilisé par FormView
- 27. ASP.Net MVC DefaultModelBinder ne lie pas les propriétés sur POST
- 28. Les propriétés «lourdes» ont-elles un poids, même si elles ne sont pas remplies?
- 29. Pourquoi les DIM ne sont-ils pas reformatés dans MS Access
- 30. Pourquoi les options de configuration ne sont-elles pas disponibles dans Visual Studio 2008?
propriétés ne sont pas les mêmes que les variables d'instance. –
+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