i dette innlegget vil vi gå dekke brukstilfeller for redskaper, utvider og med søkeord. Implementerer v / s Utvider v / s med søkeord I Dart.
Innledning
hvis du utvikler Et Flutter-program, burde du ha sett mange brukssaker for redskaper, utvider og med søkeord. For noen som aldri har jobbet med Dart før, er forskjellen mellom disse søkeordene ikke åpenbar.
i dette innlegget vil vi gå i dybden om disse søkeordene for å utvide vår forståelse Av Flutter og Dart.
Implementerer Er For Å Tvinge Oppførsel Via Grensesnitt
I OOP er et grensesnitt noe som håndhever avledet klassen for å implementere en settliste over offentlige felt og metoder. Men I motsetning til andre tradisjonelle programmeringsspråk Som C# og JAVA, Har Dart ikke eksplisitte grensesnittyper. Hver klasse definerer som standard sitt eget grensesnitt som består av offentlige felt og metoder. Så, hver klasse kan fungere som et grensesnitt i Dart.
vi bruker implementerer søkeordet for å implementere et grensesnitt. En klasse kan også implementere flere grensesnitt.
i eksemplet ovenfor implementerer Klasse D klasser a, B og c derfor må den implementere de offentlige metodene og feltene av disse klassene.
Siden Dart Ikke har eksplisitte grensesnitt, bruker vi den abstrakte klassen som et grensesnitt.
abstract class X { doX();} class Y implements X { @override doX() { // TODO: implement doX return null; }}
Extends Er For Deling Av Atferd Via Arv
i oop innebærer arv deling av atferd mellom klasser. Vi kan ikke dele funksjoner med et grensesnitt. Sa nar vi implementerer en klasse, kan vi ikke dele det er oppforsel.
i eksemplet ovenfor kan du se at klasse B må gi sin egen implementering av doA () – metoden som oppførselen er ikke delt.
hvis du vil dele virkemåten på tvers av disse to klassene, bør du bruke søkeordet extends.
class A { doA() { print('A'); }}class B extends A { }main() { var b = B(); b.doA();}
i eksemplet ovenfor, siden B utvider A, kan du ringe doa () – metoden direkte fra B-objektet.
I Motsetning til å implementere flere grensesnitt, Støtter Dart bare enkelt arv. Så, du kan ikke strekke seg fra flere klasser.
class A { doA() { print('A'); }}class B { doB() { print('B'); }}// Not Allowed!class C extends A, B {}
Med Is For Mixin
i OOP er en mixin en klasse som inneholder metoder for bruk av andre klasser. I motsetning til grensesnittet og arv tilnærming, en mixin trenger ikke å være den overordnede klassen av de andre klassene.
så en mixin pålegger verken bruksbegrensning eller tvinger typebegrensning.
du vil vanligvis sette vanlige funksjoner inne i en mixin. I Dart bruker vi mixin ved å bruke med-søkeordet.
som vist i eksemplet ovenfor, kan implementering av mixin-felt overstyres om nødvendig. Videre kan en klasse bruke flere mixins.
Noen Flere Ting Å Merke Seg Om Mixin
Bruke En Klasse som En Mixin
I Dart kan en klasse også brukes som mixin hvis klassen er konstruktørfri. For eksempel er koden nedenfor gyldig.
class D { doD() { print('d'); }}class E with D {}main() { var e = E(); e.doD();}
men denne nedenfor er ugyldig fordi klasse D erklærer en konstruktør.
class D { D() { } doD() { print('d'); }}class E with D {}
Håndheving Mixin For Bestemte Typer
du kan også håndheve en mixin å være brukbar for visse typer klasser bare ved å bruke den på søkeord når du definerer 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 {}
Konklusjon
I dette innlegget lærte vi om brukstilfeller for redskaper, utvider og med søkeord når vi utviklet Flutter / Dart-applikasjoner.
Implementerer v / S Utvider v/S med
for å oppsummere bruk:
- Implementerer for å håndheve atferd.
- Utvider for deling atferd av enkelt klasse.
- Mixins for deling av atferd fra flere gjenbrukbare typer.
Lær Mer:
- Dart Språk funksjoner
- Lær Flagre