W Actionscript 3 nie mogę zadeklarować vars w interfejsach. Nie rozumiem tego. Wiem, że mogę tego dokonać, definiując moduły pobierające i ustawiające, ale co, jeśli po prostu chcę mieć prostą własność publiczną? Zwykle używam modułów pobierających i ustawiających, jeśli jest coś do zrobienia, gdy ustawiam lub otrzymuję właściwość, ale co jeśli chcę tylko zapisać wartość?Dlaczego właściwości nie są deklarowane w interfejsach
Odpowiedz
Nie jestem programowaniem aktorskim, ale interfejsy (na przykład w java) mają definiować zachowanie, a nie stan, więc intrerfaces w jave po prostu deklarują metody, które klasa implementująca interfejs musi zdefiniować. Właściwości (lub zmienna instancji) nie są na ogół konieczne do zdefiniowania zachowania i są niedozwolone w interfejsach.
Można to ująć w następujący sposób: istnieją interfejsy, ponieważ w Twoim języku nie można dziedziczyć po wielu abstrakcyjnych klasach podstawowych. Jeśli AS3 pozwoliłoby ci to zrobić, prawdopodobnie nie miałby "interfejsów", ale "czystych abstrakcyjnych klas".
Innymi słowy, posiadanie właściwości implementacji w interfejsie prowadziłoby do konfliktów nazw, a stamtąd do innych problemów z wielokrotnym dziedziczeniem (diament).
Jednak posiadanie tylko chwytaka lub setera bez implementacji powinno zadziałać.
public interface I { function get A():int; }
(nie mam kompilatora AS3 pod ręką)
twoja odpowiedź jest właściwym rozwiązaniem ... mimo że całkowicie nie zgadzam się co mówisz o interfejsach ... dziedziczenie jest z natury złe ...: D ... nie, poważnie ... punkt dziedziczenie to CODE REUSE ... ale zwykle jest niewłaściwie używane, aby osiągnąć to, do czego są przeznaczone interfejsy: opisujące rolę obiektów ... złota reguła: klasy definiują implementację, zachowania interfejsów ... nie używają klas, aby wymagać zachowania ... nie pisz jakiejś metody (somePa ram: SomeClass), napisz jakiś Metod (niektóreParam: SomeInterface) ... to jest znacznie bardziej elastyczne/rozszerzalne i czyściejsze ... – back2dos
Starałem się unikać stwierdzenia, że wiele dziedziczenia jest dobre lub złe :) Podkreślono tylko, że jeśli masz implementację właściwości w tych "interfejsach", to wymaga to mechanizmu podobnego do dziedziczenia wielokrotnego, gdy kompilator znajdzie 2 interfejsy o tej samej właściwości zdefiniowanej. – Vlagged
- 1. Implementowanie właściwości interfejsu w interfejsach?
- 2. Dlaczego właściwości przechowywane w klasach nie są obsługiwane w klasach?
- 3. Dlaczego słabe właściwości NSString nie są wydawane w systemie iOS?
- 4. Dlaczego moje właściwości CSS są nadpisywane/ignorowane?
- 5. Dziedziczenie w interfejsach kolekcji java
- 6. konkretne metody w interfejsach Java1.8
- 7. Dlaczego właściwości anonimowych typów są w C# tylko do odczytu?
- 8. Dlaczego właściwości statyczne nie są dostępne przez "->", ale są dostępne przez "::"?
- 9. Mybatis - Dziedziczone właściwości nie są mapowane
- 10. Dlaczego komórki numeryczne nie mają właściwości .Characters()?
- 11. Adnotacje na interfejsach?
- 12. PHP: Czy mogę używać pól w interfejsach?
- 13. statyczny typ powrotu w interfejsach PHP 7
- 14. Dlaczego iteratory nie są kopiowalne?
- 15. Dlaczego JSON.stringify właściwości obiektu wyświetlanego, które są funkcjami?
- 16. Dlaczego właściwości PropertyInfo SetValue i GetValue są takie wolne?
- 17. Dlaczego nie można dodać obserwatorów właściwości do leniwych właściwości?
- 18. Właściwy typ dla uchwytów w interfejsach C
- 19. Wyświetlanie interfejsów w interfejsach w Go
- 20. Dlaczego natywne właściwości typów danych nie są wyświetlane w ich odpowiednich prototypach?
- 21. właściwości zdarzeń HammerJS są niezdefiniowane
- 22. Dlaczego MongoDB nie zapisuje moich właściwości
- 23. Dlaczego funkcja UINavigationController nie ma właściwości rootViewController?
- 24. Obj-C Właściwości protokołu nie są realizowane w klasie zgodnego
- 25. Zastąp deklarowane kodowanie podczas usuwania z JAXB
- 26. Dlaczego animowanie niestandardowych właściwości CALayer powoduje, że inne właściwości są zerowe podczas animacji?
- 27. UDP-Broadcast na wszystkich interfejsach
- 28. Czy można używać dziedziczenia w interfejsach AIDL?
- 29. Co to są "właściwości" w Groovy?
- 30. Jakie są przypadki użycia właściwości inline Kotlin?
Properties nie są takie same jak zmienne instancji. –
+1 na to ... co do zasady ... ponieważ nie jest tak naprawdę dla AS3 ... istnieje rozróżnienie między właściwościami (dostarczonymi przez akcesorów) i zmiennymi ... Z zewnątrz jest to całkowicie przezroczyste, bycie IDENTYCZNYM na poziomie składni ... ale skutecznie dostęp do właściwości oznacza wywołanie, a dostęp zmienny nie ... interfejsy mogą deklamować właściwości, ale nie zmienne ... to nie jest w 100% spójne ani rozsądne ... ale takie jest życie, tak myślę ... :) – back2dos