LINQ Grundkurs

Anonyme Methoden

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Anonyme Methoden dienen dazu, Funktionalität bereit zu stellen ohne gleich eine Member-Methode innerhalb einer Klasse anlegen zu müssen.
06:18

Transkript

Anonyme Methoden sind sehr wichtig für LINQ. Warum, sehen wir an diesem Beispiel. In diesem Beispiel habe ich eine Klasse, die hat eine Methode, und die Methode wiederum instanziiert eine andere Klasse und nutzt deren Methode. In der Methode wiederum werden Zahlen angezeigt, je nachdem ob sie einem bestimmten Vergleichswert entsprechen oder nicht. Mehr muss man zuerst nicht wissen. Ganz interessant ist für uns bloß der Umstand zuerst, dass eine solche Methode, also Zeige beispielsweise, an einen bestimmten Typ gekoppelt ist, also Zahlen. Das Gleiche ist hier mit MachWas und EineKlasse gegeben. Wir haben in C# keine Möglichkeit, Funktionen zu definieren, die nicht zu einem Typ gehören, außer es sind anonyme Funktionen beziehungsweise Lambda-Ausdrücke. Wie man die verwendet, sehen wir, wenn wir jetzt einmal in unsere Zahlen-Klasse hineingehen. Denn diese ist eher ungünstig aufgebaut, damit dass die Check-Methode ein fester Instanz-Member unserer Zahlen-Klasse ist. Eigentlich wollen wir sowas austauschbar halten. Also, statt dass wir Check als Methode hier angeben, definieren wir uns eine Property. Diese Property hat einen bestimmten Namen, den behalte ich mal bei, Check. Und über diesen Platzhalter, über diese Variable kann später auf die Funktion zugegriffen werden. Jetzt müssen wir aber noch sagen: Wie soll eine solche Funktion aussehen? Das machen über einen generischen Typ. Es gibt diverse generische Typen. Der, der aber am häufigsten in solchen Fällen verwendet wird, das ist die Funktion beziehungsweise Func. Func hat insgesamt 17 Überladungen. Im einfachsten Fall definiert man nur den Rückgabewert. Mit jeder weiteren Überladung kommt dann ein Übergabeparameter hinzu. Also, zum Beispiel könnte ich hier zwei Parameter übergeben, drei Parameter, halt bis zu 16 Parameter kann man auf die Weise definieren. In meinem Fall habe ich ein bool als Rückgabewert. Und ich habe ein int als Übergabewert. Jetzt habe ich die gleiche Methodensignatur definiert für meine Property, wie sie auch meine Methode selbst hat. Ich kann mir das an dieser Stelle also zuerst sparen. Und es wird hier oben nicht zu einem Fehler kommen. Check wird diesmal nicht als Methode verwendet, sondern als Property. Das Ganze würde jetzt natürlich fehlschlagen, weil ich muss dieses Check ja irgendwo noch setzen. Das passiert in EineKlasse. Ich nehme diese Instanz, die Property. Und jetzt weise ich ihr eine Funktion zu. Das wiederum mache ich durch einen Lambda-Ausdruck. Dieser Lambda-Ausdruck führt zu einer Methode, die selbst auch keinen Namen hat, sondern nur dem Muster entspricht, das wir für Check vorgegeben haben. Wir haben gesagt, das hat einen Parameter, der übergeben wird. Also schreibe ich hier x. x ist der Parameter, den diese Methode erhält. Mehr muss ich an der Stelle zuerst nicht schreiben. Jetzt kann ich den Methoden-Body anlegen, den Körper, und dieser sagt dann zum Beispiel, x muss ungleich 1 sein. Damit habe ich die gleiche Funktion definiert, die ich vorher als Check in meiner Zahlen-Klasse hatte. Bloß dass diese diesmal anonym definiert ist und dadurch austauschbar gehalten wird. Ich könnte das noch weiter machen. Hätte sie jetzt zum Beispiel mehrere Parameter, würde ich diese in der entsprechenden Reihenfolge hier hineinschreiben, und könnte sie dann hier hinten entsprechend verwenden. Und es gibt noch die Möglichkeit, dass man auf mehr als einer Zeile schreibt. Dann muss man geschweifte Klammern nutzen. Das Ganze sieht dann in etwa so aus. Hier sehen wir auch eine Besonderheit: Sobald wir den Body ausschreiben, müssen wir auch einen return-Wert angeben. Wenn wir die einfache Schreibweise verwenden, wird automatisch erkannt, dass das Ergebnis dieses Ausdrucks als Rückgabewert verwendet wird. Es gibt neben dieser Form der Lambda-Ausdrücke noch eine weitere Form, beziehungsweise noch weitere Typen. Denn Func ist ein recht allgemeiner Typ. Man könnte außerdem die Action verwenden. Eine Action ist dabei eine Methode, die keinen Rückgabewert hat. Im einfachsten Fall hat sie auch keinen Übergabeparameter. Für jeden weiteren Fall können wir an dieser Stelle wieder entsprechende Eingabeparameter angeben, zum Beispiel int, string, und so weiter und so fort. Eine besondere Form außerdem ist das Predicate. Das Predicate entspricht im Grunde genau dem, was wir mit Check machen wollen. Und zwar, es erhält nur einen Parameter und hat als Rückgabewert immer bool. Das heißt, ich könnte diese Func, die ich hier habe, auch problemlos in Predicate umschreiben. Müsste dann an der Stelle das bool wegnehmen, und ich hätte keine Veränderung. Diese Form von übergebenen Funktionen wird sehr ausgiebig bei LINQ verwendet, zum Beispiel für select-Anweisungen, where-Anweisungen und so weiter. Sie haben jetzt also gesehen, was anonyme Methoden sind. Sie haben Lambda-Ausdrücke in ihren Grundzügen kennengelernt. Und wie Sie das Ganze dann einsetzen, das sehen Sie in den entsprechenden Befehlen von LINQ.

LINQ Grundkurs

Lernen Sie die LINQ-Operationen kennen und erstellen Sie praktische Abfragen direkt in C# und .NET.

2 Std. 10 min (26 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:24.10.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!