In Actionscript 3 kann ich in Interfaces keine vars deklarieren. Ich verstehe es nicht. Ich weiß, dass ich das umgehen kann, indem ich Getter und Setter definiere, aber was ist, wenn ich nur eine einfache öffentliche Eigenschaft haben möchte? Normalerweise verwende ich Getter und Setter, wenn es etwas zu tun gibt, wenn ich eine Eigenschaft setze oder bekomme, aber was ist, wenn ich nur einen Wert speichern möchte?Warum Eigenschaften in Interfaces nicht deklarierbar sind
Antwort
Ich bin nicht eine Actioscript-Programmierung, aber Schnittstellen (in Java zum Beispiel) sind dazu bestimmt, Verhalten nicht Staat zu definieren, so Intrerefaces in Jave einfach Methoden deklarieren, die die Klasse die Implementierung der Schnittstelle definieren muss. Eigenschaften (oder Instanzvariable) sind im Allgemeinen nicht erforderlich, um Verhalten zu definieren, und in Schnittstellen sind sie nicht erlaubt.
Sie können es so sagen: Schnittstellen existieren, weil Sie in Ihrer Sprache nicht von mehreren abstrakten Basisklassen erben können. Wenn AS3 das erlaubt hätte, hätte es wahrscheinlich keine "Schnittstellen", sondern "reine abstrakte Klassen".
Mit anderen Worten, die Eigenschaften Implementierung in Ihrer Schnittstelle würde zu Namenskonflikten führen und von dort zu anderen Mehrfachvererbungsproblemen (Diamant).
Allerdings sollte nur ein Getter oder ein Setter ohne Implementierung funktionieren.
public interface I { function get A():int; }
(ich habe nicht die AS3-Compiler zur Hand haben)
Ihre Antwort ist die richtige Lösung ... obwohl ich völlig anderer Meinung bin über das, was Sie über Schnittstellen sagen ... Erbschaft ist von Natur aus schlecht ...: D ... nein, ernsthaft ... der Sinn von Vererbung ist CODE REUSE ... aber normalerweise wird es missbraucht, um zu erreichen, wofür Interfaces entworfen sind: Beschreibung einer Objekt-Rolle ... goldene Regel: Klassen definieren Implementierung, Interfaces-Verhalten ... verwenden keine Klassen, um Verhalten zu verlangen ... schreibe nicht someMethod (somePa ram: SomeClass), schreibe someMethod (someParam: SomeInterface) ... das ist viel flexibler/erweiterbar und sauberer ... – back2dos
Ich habe versucht, eine Aussage über Mehrfachvererbung zu vermeiden, die gut oder schlecht ist :) Nur darauf hingewiesen, dass Wenn Sie die Eigenschaftenimplementierung in diesen "Schnittstellen" haben, würde dies einen Mechanismus erfordern, der der Mehrfachvererbung ähnelt, wenn der Compiler zwei Schnittstellen mit derselben definierten Eigenschaft findet. – Vlagged
- 1. sind Eigenschaften in weiteren Eigenschaften
- 2. Eigenschaften sind nicht alphabetisch
- 3. Warum Interfaces in dynamischen/locker typisierten Sprachen?
- 4. Warum sind Validierungsdirektiven/-eigenschaften nicht auf Feld festgelegt?
- 5. Probleme in C# Interfaces
- 6. VB.NET Interfaces
- 7. Im * Constructor deklarierte Eigenschaften sind in Instanzen sichtbar. Warum?
- 8. Warum abstrakte Klassen und Interfaces erstellen?
- 9. Warum sind die Eigenschaften anonymer Typen in C# schreibgeschützt?
- 10. Interfaces Vererbung in C#
- 11. C#: Enums in Interfaces
- 12. Was sind "Eigenschaften" in Groovy?
- 13. Eigenschaften sind Null in Komponententest
- 14. Warum statische Eigenschaften nicht mit "->" zugänglich sind, aber mit "::" zugänglich sind?
- 15. Warum sind Referenzen reseatable in nicht C++
- 16. Sind C# -Eigenschaften tatsächlich Methoden?
- 17. Warum serialisiert JSON.string nicht nicht aufzählbare Eigenschaften?
- 18. Sind C# Inline-Eigenschaften?
- 19. Casting COM Interfaces
- 20. Interfaces und abstrakte Klassen in F #
- 21. Funktioniert xVal, wenn die Attribute auf Interfaces definiert sind?
- 22. Warum sind meine Eigenschaften get_ und set_ in einem AJAX-Steuerelement nicht verfügbar?
- 23. Sind Eigenschaften gut oder schlecht?
- 24. DOM-Eigenschaften/Methoden, die in jQuery nicht verfügbar sind?
- 25. Warum bewirkt die Animation benutzerdefinierter CALayer-Eigenschaften, dass andere Eigenschaften während der Animation null sind?
- 26. Sind Java-Eigenschaften effektiv veraltet?
- 27. Was sind die verschiedenen Eigenschaften in System.DirectoryServices.DirectorySearcher.PropertiesToLoad
- 28. Warum funktioniert der dynamische JDK-Proxy nur mit Interfaces?
- 29. Verwenden von Generics in Interfaces
- 30. Warum sind Aufzählungen nicht möglich?
Eigenschaften sind nicht die gleichen wie Instanzvariablen. –
+1 auf das ... im Prinzip ... weil dies nicht wirklich für AS3 gültig ist ... gibt es einen Unterschied zwischen Eigenschaften (von Accessoren bereitgestellt) und Variablen ... von außen ist dies völlig transparent, IDENTISCH auf syntaktischer Ebene ... aber effektiv bedeutet der Zugriff auf Eigenschaften einen Aufruf und Variablenzugriff nicht ... Interfaces können Property-Accessoren deklarieren, aber keine Variablen ... das ist nicht 100% ig konsistent oder vernünftig ... aber das ist Leben, denke ich ... :) – back2dos