In Actionscript 3 Non posso dichiarare vars nelle interfacce. Non capisco. So che posso lavorare su questo definendo getter e setter, ma cosa succede se voglio solo una semplice proprietà pubblica? Di solito uso getter e setter se c'è qualcosa da fare quando imposto o ottengo una proprietà, ma cosa succede se voglio solo memorizzare un valore?Perché le proprietà non sono dichiarabili nelle interfacce
risposta
Non sono una programmazione actioscript, ma le interfacce (in java ad esempio) hanno lo scopo di definire il comportamento non stato, quindi le interfacce in jave dichiarano semplicemente metodi che la classe implementa l'interfaccia deve definire. Le proprietà (o la variabile di istanza) non sono in generale necessarie per definire il comportamento e non sono consentite nelle interfacce.
Puoi metterlo in questo modo: le interfacce esistono perché nella tua lingua non puoi ereditare da più classi di base astratte. Se AS3 ti avesse permesso di farlo, probabilmente non avrebbe "interfacce", ma "classi astratte pure".
In altre parole, l'implementazione della proprietà nella interfaccia nella propria interfaccia porterebbe a conflitti di nomi e da lì ad altri problemi di ereditarietà multipli (diamante).
Tuttavia, dovrebbe funzionare solo un getter o un setter senza implementazione.
public interface I { function get A():int; }
(non ho il compilatore AS3 a portata di mano)
la tua risposta è la soluzione giusta ... anche se sono completamente in disaccordo su ciò che dici delle interfacce ... l'ereditarietà è intrinsecamente cattiva ...: D ... no, sul serio ... il punto l'ereditarietà è CODE REUSE ... ma di solito è abusato per realizzare quali interfacce sono progettate per: descrivere un ruolo degli oggetti ... regola d'oro: le classi definiscono l'implementazione, il comportamento delle interfacce ... non usare le classi per richiedere un comportamento ... non scrivere someMethod (somePa ram: SomeClass), scrivere someMethod (someParam: SomeInterface) ... questo è molto più flessibile/estensibile e più pulito ... – back2dos
Ho cercato di evitare di fare una dichiarazione sull'eredità multipla che è buona o cattiva :) Solo sottolineato che se si dispone dell'implementazione delle proprietà in queste "interfacce", sarebbe necessario un meccanismo simile all'ereditarietà multipla quando il compilatore trova 2 interfacce con la stessa proprietà definita. – Vlagged
- 1. Implementazione delle proprietà dell'interfaccia nelle interfacce?
- 2. Le interfacce devono definire le proprietà?
- 3. Perché le interfacce non sono consentite come membri delle annotazioni?
- 4. Perché le parentesi sono necessarie nelle tuple?
- 5. Quando sono necessarie le interfacce?
- 6. Perché le variabili non sono locali nelle istruzioni case?
- 7. Le interfacce PHP hanno proprietà?
- 8. Come implementare le classi nidificate non statiche nelle interfacce?
- 9. Perché le interfacce sono in tipi di riferimento .Net?
- 10. Riferimento automatico nelle interfacce
- 11. Perché le proprietà di dipendenza sono "statiche"?
- 12. Perché JSON.stringify non visualizza le proprietà dell'oggetto che sono funzioni?
- 13. Argomenti ripetuti nelle interfacce
- 14. Elenco interfacce nelle interfacce in Go
- 15. Perché stiamo implementando le interfacce?
- 16. Perché implementiamo le interfacce in modo ricorsivo?
- 17. Possiamo aggiungere variabili e proprietà nelle interfacce in C# .NET?
- 18. Delphi Rtti: esplora le proprietà delle interfacce?
- 19. Utilizzo di generici nelle interfacce
- 20. Le proprietà dell'evento HammerJS non sono definite
- 21. Le interfacce a schede sono confuse?
- 22. Uso generici Java nelle interfacce
- 23. Perché le virgolette doppie e le barre retroverse non sono consentite nelle stringhe nello standard JSON?
- 24. Devo definire le interfacce nelle lingue Duck Typed?
- 25. Attributi/variabili membro nelle interfacce?
- 26. quali sono le interfacce più utilizzate in C#?
- 27. Il tipo giusto per le maniglie nelle interfacce C
- 28. Interfacce e proprietà
- 29. Interfacce e proprietà F #
- 30. PHP: Posso utilizzare i campi nelle interfacce?
Proprietà non sono le stesse variabili di istanza. –
+1 su quello ... in linea di principio ... perché questo non è veramente valido per AS3 ... c'è una distinzione tra proprietà (fornite da accessor) e variabili ... dall'esterno questo è completamente trasparente, essendo IDENTICO a livello sintattico ... ma efficacemente l'accesso alle proprietà significa che una chiamata e l'accesso variabile non ... le interfacce possono declare gli accessor delle proprietà, ma non le variabili ... questo non è al 100% coerente né ragionevole ... ma questa è la vita, credo ... :) – back2dos