i det här inlägget kommer vi att täcka användningsfall för redskap, utökar och med nyckelord. Implementerar v / S utökar v / S med nyckelord i Dart.
introduktion
om du utvecklar en Flutter-applikation borde du ha sett många användningsfall för redskap, utökningar och med nyckelord. För någon som aldrig har arbetat med Dart tidigare är skillnaden mellan dessa nyckelord inte uppenbar.
i det här inlägget kommer vi att gå in på djupet om dessa sökord för att utöka vår förståelse av fladder och Dart.
implementerar är för att tvinga beteende via gränssnitt
i OOP är ett gränssnitt något som upprätthåller den härledande klassen för att implementera en uppsättning lista över offentliga fält och metoder.
men till skillnad från andra traditionella programmeringsspråk som C# och JAVA har Dart inte uttryckliga gränssnittstyper. Varje klass definierar som standard sitt eget gränssnitt som består av offentliga fält och metoder. Så, varje klass kan fungera som ett gränssnitt i Dart.
vi använder nyckelordet redskap för att implementera ett gränssnitt. En klass kan också implementera flera gränssnitt.
i exemplet ovan implementerar klass D klasserna A, B och C därför måste den implementera de offentliga metoderna och fälten av dessa klasser.
dessutom, eftersom Dart inte har explicita gränssnitt, använder vi den abstrakta klassen som ett gränssnitt.
abstract class X { doX();} class Y implements X { @override doX() { // TODO: implement doX return null; }}
Extends är för att dela beteende via arv
i OOP innebär arv delning av beteende mellan klasser. Vi kan inte dela funktioner med ett gränssnitt. Så, när vi genomför en klass, vi kan inte dela det beteende.
i exemplet ovan kan du se att klass B måste tillhandahålla sin egen implementering av doA () – metoden som beteendet delas inte.
Om du vill dela beteendet mellan dessa två klasser bör du använda sökordet extends.
class A { doA() { print('A'); }}class B extends A { }main() { var b = B(); b.doA();}
i exemplet ovan, eftersom B utökar A, kan du ringa Doa () – metoden direkt från B: S objekt.
Till skillnad från att implementera flera gränssnitt stöder Dart bara ett enda arv. Så, du kan inte sträcka sig från flera klasser.
class A { doA() { print('A'); }}class B { doB() { print('B'); }}// Not Allowed!class C extends A, B {}
med är för Mixin
i OOP är en mixin en klass som innehåller metoder för användning av andra klasser. Till skillnad från gränssnittet och arvsmetoden behöver en mixin inte vara förälderklassen för de andra klasserna.
så en mixin varken ålägger användningsbegränsning eller tvingar typbegränsning.
du lägger vanligtvis vanliga funktioner i en mixin. I Dart använder vi mixin genom att använda med nyckelordet.
som visas i exemplet ovan kan implementering av mixin-fält åsidosättas om det behövs. Dessutom kan en klass använda flera mixins.
några fler saker att notera Om Mixin
använda en klass som Mixin
I Dart kan en klass också användas som mixin om klassen är konstruktörfri. Till exempel är koden nedan giltig.
class D { doD() { print('d'); }}class E with D {}main() { var e = E(); e.doD();}
men den här nedan är ogiltig eftersom klass D förklarar en konstruktör.
class D { D() { } doD() { print('d'); }}class E with D {}
genomdriva Mixin för specifika typer
Du kan också genomdriva en mixin för att vara användbar för vissa typer klasser endast genom att använda på nyckelordet när du definierar 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 {}
slutsats
i det här inlägget lärde vi oss om användningsfall för redskap, utökar och med nyckelord när vi utvecklar Flutter/Dart-applikationer.
implementerar v / S utökar v/s med
för att sammanfatta användning:
- implementerar för att upprätthålla beteenden.
- sträcker sig för att dela beteenden i en klass.
- Mixins för att dela beteenden från flera återanvändbara typer.
Läs Mer:
- Dart språkfunktioner
- lär Flutter