‫Und in diesem Video werden wir uns einige sehr wichtige Schnittstellen ansehen, die Sie
‫verstehen sollten, wenn Sie ein fortgeschrittener, erfahrener Entwickler werden.
‫Und das ist die AI-Enumerable-Schnittstelle sowie die AI-Enumerator-Schnittstelle.
‫OK, Sie sollten sich also mit den Schnittstellen vertraut machen, bevor Sie sich dieses Video ansehen, da sonst einige
‫der Konzepte für Sie möglicherweise keinen Sinn ergeben.
‫Daher empfehle ich wirklich, sich auch das Interface-Video anzusehen, das wir anbieten.
‫OK, die aufzählbare KI-Schnittstelle ist die beste Schnittstelle für viele Sammlungssynchronisationen und ihre Aufgabe besteht darin,
‫eine Möglichkeit zum Durchlaufen einer Sammlung bereitzustellen.
‫Aus diesem Grund können wir für jedes Gleitmittel eine Liste oder ein Wörterbuch durchgehen, da sie
‫von der unzähligen Schnittstelle der unzähligen Schnittstelle und dem einfachen Englisch erben.
‫Wenn eine Sammlungsklasse die erste Schnittstelle implementiert, wird sie verantwortlich und wir können
‫jedes Element darin einzeln zählen.
‫Es gibt also zwei verschiedene Versionen der aufzählbaren KI-Schnittstelle.
‫Eine davon ist, dass dies für generische Sammlungen funktioniert, bei denen Sie diese aufzählbaren offenen Klammern, die
‫schließende Klammer und dann die aufzählbare AI-Schnittstelle für nicht generische Sammlungen haben.
‫OK, Sie sollten also auch verstehen, was generische und nicht generische Sammlungen sind.
‫Sie haben gewisse Vor- und Nachteile, aber dazu habe ich auch ein Video.
‫Ich hoffe, du hast es dir angeschaut, bevor du dir dieses Video angesehen hast, denn sonst ist es etwas kompliziert.
‫OK, also diese beiden, die wir hier haben, schauen wir uns die an.
‫Da die generischen Kollektionen nach den nicht generischen Kollektionen eingeführt wurden, wird empfohlen, die generischen
‫Kollektionen zu verwenden.
‫Sie sind also im Grunde sozusagen eine verbesserte Version.
‫Wenn Sie also ein neues Projekt erstellen, wird empfohlen, die generische Version zu verwenden, da ich
‫für nicht generische Sammlungen aufzählen muss, Boxen und Boxen anwenden oder durchführen muss, was im Grunde
‫die Konvertierung von Objekttypen ist.
‫Und wir werden später erklären, wie Sie die AI Enumerable T-Schnittstelle oder die generische Sammlungsschnittstelle verwenden.
‫OK, wir werden nicht auf die nicht generische Sammlungsschnittstelle eingehen, da sie aufgrund des Boxens
‫und Unboxings nicht empfohlen wird, was einfach weniger effizient ist.
‫Schauen wir uns nun den Unterschied zwischen der KI-Aufzählung und dem KI-Enumerator an.
‫Die haben Sie vielleicht schon einmal gehört.
‫Die aufzählbare AI-Schnittstelle enthält also eine einzelne Methode, die Sie beim Implementieren dieser Schnittstelle implementieren
‫müssen.
‫Und das werden wir später in unserem speziellen Beispiel hier tun.
‫Es macht also etwas mehr Sinn.
‫Die Get-Enumerator-Methode ist also diejenige, die Sie implementieren müssen, und sie gibt ein AI-Enumerator-Objekt zurück.
‫OK, also diese Methode, die Sie implementieren müssen, wenn Sie eine aufzählbare AI für Ihre Klasse
‫verwenden möchten oder was Sie für Ihre Klasse implementieren möchten, benötigen Sie diese get-Enumerator-Methode, die dann
‫einen AI-Enumerator zurückgibt.
‫Also der AI-Enumerator.
‫Bietet die Möglichkeit, die Auflistung zu wiederholen, indem eine aktuelle Eigenschaft verfügbar gemacht wird, die auf das Objekt zeigt,
‫an dem wir uns derzeit in der Auflistung befinden.
‫OK, dies ist viel komplizierter, als es sein wird, wenn wir dies in unserem speziellen Beispiel tatsächlich ausführen.
‫OK, also werden wir ein Beispiel bauen, um vollständig zu verstehen, was das alles bedeutet.
‫Dies ist also nur, um Sie auf das vorzubereiten, was Sie erwarten können.
‫Okay, also fangen wir an.
‫Endlich weg von all dieser Theorie.
‫Schauen wir doch mal in die Praxis.
‫Lassen Sie uns also diese kleine Klasse namens Dog erstellen, und ich werde sie in dieselbe Datei einfügen, um die Dinge einfach zu
‫halten.
‫Also haben wir diese Klasse namens Dog mit einem Namen und wir haben diesen booleschen Namen ist nicht IDOC.
‫Wir werden also grundsätzlich prüfen, ob der Hund unartig ist oder nicht.
‫Und basierend darauf werden wir ihm Leckereien geben.
‫Okay, wenn er kein ungezogener Hund ist, bekommst du weniger Leckerlis, als wenn er ein guter Junge oder ein guter Hund ist.
‫OK, der Konstruktor hier setzt also im Grunde nur diese beiden Werte.
‫Wenn wir also ein Hundeobjekt erstellen, geben wir ihm einen Namen und einen booleschen Wert, egal ob der Hund oder nicht, Sie sind es
‫nicht.
‫Und dann haben wir diese Geschenk-Leckerei-Methode und diese wird im Grunde nur ausdrucken, dass der Hund Wuff gesagt hat.
‫Für jeden einzelnen, der dem Hund Leckerlis gibt, wird er sagen, OK, also im Grunde, wenn er ein guter Hund ist,
‫werden Sie Leckerlis bekommen und das zweimal.
‫Und wenn er ein böser Hund oder ein ungezogener Hund ist, bewegt er sich nur einmal, weil er weniger Leckerlis bekommt.
‫OK, jetzt haben wir diese Klasse Hund und können jetzt Hundeobjekte erstellen, also lassen Sie uns diese andere Klasse
‫haben.
‫Nehmen wir an, wir haben eine andere Klasse, die Hunde innerhalb einer Liste verwendet.
‫OK, wir haben also diese Hundeheimklasse.
‫Diese Hundeheimklasse wird also eine Liste von Hunden haben.
‫Daher müssen wir sicherstellen, dass dies mit generischen Systemsammlungen erfolgt, da list eine
‫generische Sammlung ist.
‫OK, hier oben sehen Sie, dass Sie dies jetzt mit generischen Systemsammlungen haben.
‫OK, nun, da wir dieses Hundeheim haben und wir diese Liste von Hunden im Konstrukteur dieses Hundeheims haben, ist
‫das einzige, was wir tun werden, die Liste dieses Hundes mit einer Reihe von Hunden zu initialisieren.
‫Wir haben also den Casper-Hund oder den Hund namens Casper.
‫Er ist kein ungezogener Hund, aber Siff ist ein ungezogener Hund oder Real ist nicht ungezogen und Pixel ist auch nicht ungezogen.
‫Fragen Sie mich also nicht, wie wir auf diese Namen kommen, aber so werden wir diese Hunde im Grunde
‫nennen.
‫Sie können diese ganze Anwendung natürlich noch viel komplexer gestalten.
‫Aber unsere Idee ist wirklich nur, diese Liste von Hunden zu verwenden, um durch das Hundeheim zu gehen, im Grunde durch das Hundeheim
‫zu gehen, und basierend darauf, ob ein Hund gut ist oder nicht oder ein ungezogener Hund oder nicht, werden wir es
‫tun gib ihm ein oder zwei Leckerlis.
‫Kommen wir nun zu unserer Hauptmethode, denn dort ist der Ausgangspunkt unserer Anwendung.
‫Und an dieser Stelle lassen Sie uns weitermachen und hier ein Hundeheim erstellen.
‫Gut.
‫Wir haben also dieses Hundeheim namens Shelter, und es wird ein neues Hundeheim.
‫Also initialisieren wir es auch gleich, damit wir dieses Shelter-Objekt verwenden können, da das Shelter-Objekt
‫eine Liste von Hunden enthält.
‫Rechts.
‫Was wir jetzt tun möchten, ist, die Liste zu durchlaufen und zu prüfen, ob wir ihnen Leckereien geben möchten oder
‫nicht.
‫Also lassen Sie uns für jedes Jahr so einen Doppeltipp erstellen, um ihn für uns vorzubereiten.
‫Was also werden wir durchmachen?
‫Nun, wir gehen durch einen Hund.
‫Und wir werden es Hund nennen, also wird jedes einzelne Element auf der Liste ein Hund sein und dann
‫wird die Sammlung, die wir durchgehen wollen, tatsächlich das Tierheim sein.
‫OK, jetzt haben wir ein kleines Problem. Sobald wir den Mauszeiger darüber bewegen, sagen wir, dass wir den Namen der Sammlung oder
‫des Arrays sehen, durch die iteriert werden soll.
‫Die for each-Anweisung kann jedoch nicht mit Variablen des Typs Hundehütte
‫arbeiten, da Hundehütte keine öffentliche Instanz- oder Erweiterungsdefinition für den Get-Enumerator enthält.
‫OK, da haben wir also diesen Get-Enumerator.
‫Was bedeutet das?
‫Nun, das bedeutet, dass wir die hier aufgezählte Schnittstelle für unser Hundeheim implementieren müssen, da dieses Hundeheim eine Liste
‫hat, die wir durchlaufen möchten.
‫Rechts.
‫Denn wenn man es sich ansieht, Tierheim, nun ja, unser Hundeheim, das ist das Tierheim, das wir durchlaufen wollen.
‫Und um es iterierbar zu machen, müssen wir das Aufzählbare hier implementieren.
‫Und welche Art von Objekten wollen wir aufzählen?
‫In unserem Fall werden es die Hunde sein.
‫Wir möchten also die Hunde im Hundeheim durchgehen können, weil wir diese
‫Hundeliste haben und sie hier im Hundeheim-Konstruktor initialisiert ist.
‫Und wir wollen sicherstellen, dass wir sie alle einfach durchgehen und etwas mit den Hunden machen können,
‫sie streicheln oder ihnen in unserem Fall ein Leckerli geben.
‫Sobald Sie dies implementieren und hier hochgehen, verschwindet der Fehler.
‫So plötzlich ist es in Ordnung, denn, na ja, unser Tierheim, das ein Hundeheim ist, folgt jetzt
‫den Anweisungen, die uns gerade gegeben wurden, dass es unzählige Jahre umsetzen muss.
‫Dies ist also die generische Aufzählung, weil wir diesen Hund genau hier haben, richtig, weil es nicht
‫dieser ist, es ist der mit dem Typ, den wir ihm geben.
‫Aber jetzt, sobald wir unseren Roboter haben, sehen wir, dass wir einen weiteren Fehler erhalten.
‫Es sagt, dass Hundeheim das Interface-Member I enumerable dog get enumerator und den unnumerable get enumerator nicht implementiert,
‫damit wir sie manuell dort einfügen können.
‫Aber das Schöne an der Verwendung eines I. D. ist, dass die ID eine Menge
‫Arbeit für uns erledigen kann. Sie können also auf potenzielle Korrekturen anzeigen klicken und dann auf Alle Mitglieder explizit implementieren klicken und dann
‫den Sammlungs-Namespace für uns hinzufügen und sich um das Hinzufügen dieser beiden Methoden kümmern wir oder diese beiden Mitglieder.
‫Sobald wir darauf klicken, sehen Sie, dass dieser Fehler verschwindet.
‫Und wenn wir weiter nach unten scrollen, werden Sie feststellen, dass wir jetzt einen I-Enumerator von
‫time dog und eine nicht generische I-Enumerator-Sammlung zurückgeben.
‫Also haben wir es jetzt nicht implementiert.
‫Deshalb haben wir diese euch hier nicht implementierte Ausnahme geworfen.
‫Das müssen wir hier also ändern.
‫Wir können jetzt implementieren, was mit der arget-Enumerator-Methode passieren soll, sobald sie so aufgerufen wird, um das Problem
‫zu beheben, was wir hier sagen werden, ist nur Return.
‫Hunde, unsere Hunde bekommen keinen Zähler einfach so.
‫Und das wird die Implementierung sein, denn unser Hundeheim implementiert jetzt die aufzählbare Schnittstelle und unsere Liste hier
‫ist tatsächlich, hey, wenn Sie mit der Maus darüber fahren, ist eine Liste eine generische Liste.
‫OK, und jetzt können wir diese kleinen Hunde nehmen und den Enumerator für jede einzelne Iteration erhalten, die unsere für
‫jede zwei durchlaufen wird.
‫Im Grunde wird es also zu einzelnen Hunden zurückkehren.
‫Und jetzt können wir den Hund tatsächlich in der richtigen Reihenfolge für jeden Loopier verwenden.
‫Das bedeutet im Grunde, dass wir jetzt prüfen können, ob der Hund nicht Nodi ist, also kein Hund, das
‫ist Mordy.
‫Wenn dies der Fall ist, heißt das im Grunde, wenn der Hund nicht unartig ist, nennen wir die
‫Methode Leckerli geben und geben ihm zwei Leckerlis.
‫Und ansonsten, wenn er unartig war, weil wir keine Leckereien geben können, wir Gespräche einfach zu sehr lieben,
‫werden wir ihnen nur eine Leckerei geben, OK, so.
‫Und zu diesem Zeitpunkt können wir unsere Anwendung nicht ausführen.
‫Und wir werden sehen, sagte Casper,
‫Wolf, zweimal, weil er ein guter Hund ist.
‫Gut.
‫Und so können Sie Ihre Klasse im Grunde dazu bringen, die Anweisungen zu befolgen oder aufzählbar zu implementieren, so
‫dass Sie beispielsweise eine Liste mit der for each-Schleife durchlaufen können, wie wir sie hier haben.
‫OK.
‫Nun fragen Sie sich vielleicht, warum wir nicht implementieren, um Enumerator mit dem Auge aufzählbar zu erhalten,
‫das nicht generisch ist?
‫Das liegt daran, dass wir kein nicht generisches Beispiel verwenden.
‫Und unser Hundeheim ist auch nicht allgemeiner, aber Sie müssen es nur implementieren, wenn Sie das Eye-Enumerable-Interface
‫verwenden, da wir sonst, wenn Sie es loswerden, hier wieder eine Warnung erhalten.
‫Sie sehen, dass hier tatsächlich ein Pfeil war, also müssen wir sicherstellen, dass wir diese Methode auch dort haben.
‫In Ordnung, das war's für dieses Video und das nächste Video, wir werden uns ein weiteres
‫Beispiel ansehen, bei dem wir das Auge ausnutzen, unzählige noch mehr.
‫Okay, das war nur eine kleine Einführung.
‫Ich weiß, dass dieses Thema ziemlich komplex und kompliziert ist, aber wir werden es noch ein wenig mehr nutzen.
‫Und jetzt übrigens nur kurz, nur eine Zusammenfassung hier.
‫Wann wird empfohlen, die Eye-Enumerable-Schnittstelle zu verwenden?
‫Nun, Sie sollten es verwenden, wenn Ihre Sammlung eine riesige Datenbanktabelle darstellt.
‫Sie möchten also nicht das Ganze in den Arbeitsspeicher kopieren und Leistungsprobleme in Ihrer Anwendung verursachen, weil die Datenbank
‫riesig sein könnte, oder?
‫Es könnte Millionen und Abermillionen von Einträgen haben.
‫Und Sie möchten nicht das Ganze laden müssen, um es zu durchlaufen, sondern Sie möchten
‫einfach so viel laden, wie Sie für den aktuellen Prozess benötigen, was auch immer Sie ausführen möchten.
‫Und wann sollten Sie die aufzählbare Schnittstelle nicht verwenden?
‫Nun, wenn Sie die Ergebnisse sofort benötigen und möglicherweise mutieren und die Objekte später zulassen, ist es in diesem
‫Fall besser, ein Array oder eine Liste zu verwenden.
‫Wenn Sie also später in der Lage sein möchten, Objekte zu mutieren oder hinzuzufügen und die Ergebnisse nicht sofort
‫benötigen, verwenden Sie ein Array oder eine Liste oder verwenden Sie auf andere Weise und ich aufzählen, weil es effizienter ist.
‫Alles klar, das war's für dieses Video.
‫Wir sehen uns im nächsten.