w tym poście omówimy przypadki użycia narzędzi, rozszerzeń i słów kluczowych. Implementuje V / S rozszerza v / S ze słowami kluczowymi w Dart.
wprowadzenie
Jeśli tworzysz aplikację Flutter, powinieneś widzieć wiele przypadków użycia implementacji, rozszerzeń i słów kluczowych. Dla kogoś, kto nigdy wcześniej nie pracował z Dart, różnica między tymi słowami kluczowymi nie jest oczywista.
w tym poście zagłębimy się w te słowa kluczowe, aby poszerzyć nasze zrozumienie trzepotania i Dart.
Implements służy do wymuszania zachowania poprzez interfejs
w OOP, interfejs jest czymś, co wymusza klasę deriving, aby zaimplementować zestaw publicznych pól i metod.
ale w przeciwieństwie do innych tradycyjnych języków programowania, takich jak C# i JAVA, Dart nie ma jawnych typów interfejsów. Każda klasa domyślnie definiuje swój własny interfejs złożony z publicznych pól i metod. Tak więc każda klasa może działać jako interfejs w Dart.
używamy słowa kluczowego implements do implementacji interfejsu. Ponadto klasa może zaimplementować wiele interfejsów.
w powyższym przykładzie Klasa D implementuje klasy A, B I C dlatego musi implementować publiczne metody i pola te zajęcia.
Ponadto, ponieważ Dart nie ma jawnych interfejsów, używamy klasy abstract jako interfejsu.
abstract class X { doX();} class Y implements X { @override doX() { // TODO: implement doX return null; }}
Extends służy do współdzielenia zachowania poprzez dziedziczenie
w OOP dziedziczenie oznacza współdzielenie zachowania między klasami. Nie możemy udostępniać funkcji za pomocą interfejsu. Tak więc, kiedy implementujemy klasę, nie możemy dzielić jej zachowania.
w powyższym przykładzie widać, że Klasa B musi dostarczyć własną implementację metody doA() jako zachowanie nie jest dzielone.
Jeśli chcesz udostępnić zachowanie między tymi dwiema klasami, powinieneś użyć słowa kluczowego extends.
class A { doA() { print('A'); }}class B extends A { }main() { var b = B(); b.doA();}
w powyższym przykładzie, ponieważ B rozszerza A, można wywołać metodę Doa() bezpośrednio z obiektu B.
w przeciwieństwie do implementacji wielu interfejsów, Dart obsługuje tylko pojedyncze dziedziczenie. Tak więc, nie można rozszerzyć z wielu klas.
class A { doA() { print('A'); }}class B { doB() { print('B'); }}// Not Allowed!class C extends A, B {}
Z is For Mixin
w OOP, mixin jest klasą, która zawiera metody do użycia przez inne klasy. W przeciwieństwie do interfejsu i metody dziedziczenia, mixin nie musi być klasą nadrzędną tych innych klas.
tak więc mixin ani nie narzuca ograniczenia użycia, ani nie wymusza ograniczenia typu.
Zwykle umieszczasz wspólne funkcje w mixinie. W Dart używamy mixin za pomocą słowa kluczowego with.
jak pokazano w powyższym przykładzie, implementacja pól mixin może zostać zastąpiona w razie potrzeby. Ponadto klasa może używać wielu mixinów.
kilka innych rzeczy do zapamiętania o Mixin
używanie klasy jako Mixin
w Dart, klasa może być również używana jako Mixin, jeśli klasa jest bez konstruktora. Na przykład poniższy kod jest prawidłowy.
class D { doD() { print('d'); }}class E with D {}main() { var e = E(); e.doD();}
ale ten poniżej jest nieprawidłowy, ponieważ klasa d deklaruje konstruktor.
class D { D() { } doD() { print('d'); }}class E with D {}
wymuszanie Mixin dla określonych typów
Możesz również wymusić Mixin, aby był użyteczny dla niektórych klas typów tylko za pomocą słowa kluczowego the on podczas definiowania mixin.
mixin Z on D { doZ() { }}class D { doD() { print('d'); }}//Can't do this!class E with Z {}//Can do this!class F extends D with Z {}
wnioski
w tym poście dowiedzieliśmy się o przypadkach użycia implementacji, rozszerzeń i słów kluczowych podczas tworzenia aplikacji Flutter / Dart.
implementuje v/S rozszerza v/S O
, aby podsumować użycie:
- implementuje do wymuszania zachowań.
- rozszerza do współdzielenia zachowań jednej klasy.
- Mixins do udostępniania zachowań z wielu typów wielokrotnego użytku.
dowiedz się więcej:
- funkcje języka Dart
- dowiedz się więcej