Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

LINQ Grundkurs

Extension Methods

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Mit Erweiterungsmethoden können Typen um Funktionalität angereichert werden, ohne deren Kapselung aufzubrechen.
05:55

Transkript

ExtensionMethods beziehungsweise Erweiterungsmethoden sind Methoden, die einen vorhandenen Typ erweitern. Sie sind für Linq sehr wichtig und sie können auch selbst geschrieben werden. Wie wichtig zeige ich Ihnen an dieser Stelle beziehungsweise wie Sie aussehen, und ich zeige Ihnen natürlich auch, wie Sie sie benutzen können und selbst erstellen können. Schauen wir uns diesen string an. Das Interessante an diesem string ist, dass er eben nicht nur eine Zeichenkette ist sondern das er auch eine Liste ist. Listen können von uns über Linq verarbeitet werden, das heißt, wenn ich zunächst erst einmal nur die Methoden aufrufe, die mir der string bietet, dann habe ich hier schon eine ganze Menge Möglichkeiten, um einen string zu verändert. Unter anderem könnte ich hier zum Beispiel auch sagen, ToCharArray und damit wird eben aus einem string ein Array von Chars, von Zeichen. Wenn ich using System.Linq habe ich die Möglichkeiten, noch auf weitaus mehr Funktionen zuzugreifen. Zum Beispiel kann ich mir den letzten Buchstaben oder den letzten Buchstaben beziehungsweise einen Default-Wert zurückgeben lassen, wenn der nicht vorhanden ist. Sie sehen das, bei diesen Methoden sind solche Pfeile davor. Diese Pfeile sagen aus, dass es sich dabei um ExtensionMethods handelt. Und diese ExtensionMethods wiederum sind definiert in System.Linq. Das heißt, sie sind nicht dort definiert, wo der Typ ausprogrammiert wurde, den sie erweitern. Und genau das ist mit der ExtensionMethod gemeint. Es sind Methoden, die vorhandene Typen und Funktionalität erweitern, ohne dessen eigene Kapselung zu brechen. Wie das funktioniert, sehen wir uns jetzt an, indem wir den string einmal erweitern, also die string-Klasse, denn was mich nervt, ist wenn ich prüfen möchte, ob in einem solchen string kein Wert drin ist, dann muss ich meistens if (string.IsNullOrEmpty(s)) aufrufen. Das liest sich irgendwie ein bisschen eigenartig. Mir wäre es viel lieber, wenn ich fragen könnte, hat denn der string einen Wert. Also beispielsweise if (s.HasValue()) und genau dafür legen wir uns jetzt eine ExtensionMethod an, diese ExtensionMethods sind immer in einer Klasse zusammengefasst, in aller Regel sind die Paddons dafür oder die Namensgebungs- Paddons so, dass man den Namen der zu erweiternden Klasse angibt, und dann als Zusatz Extensions daran schreibt. ExtensionMethods wie dieses HasValue sind zunächst public, ebenfalls static und sie können einen beliebigen Rückgabewert haben, in meinem Fall also bool. Nun müssen wir noch den Namen angeben, HasValue() und ich spare mir zunächst die Parameterliste. Dann wird alles rein theoretisch kompiliert, gebe ich noch einen Standardwert zurück, sagen wir einfach mal false. Das ändern wir auch gleich. So richtig funktioniert das Ganze noch nicht, denn wir haben diese statische Methode noch nicht mit der string-Klasse verheiratet. Irgendwie müssen wir das bekannt machen. Und dieses Bekanntmachen passiert über den (this ) Operator in der Parameterliste der Methode. Hier müssen wir angeben, dass es auf und da gebe ich dann entsprechend value an. Sie sehen schon, das Visual Studio weist mich darauf hin, dass solche ExtensionMethods, also durch das this hat er es als ExtensionMethod erkannt, diese müssen immer auch in statischen Klassen definiert sein. Jetzt bereits funktioniert meine ExtensionMethod, obwohl ich noch gar keine Logik implementiert habe. Sie sehen aber, diese wird angewendet auf einen Typen string, auf eine Variable vom Typ string, und jetzt ist hier die Logik nicht mehr allzu schwierig, da kann man auch sagen, return string.IsNullOrEmpty(value); und das ganze negieren wir, damit ist die Logik ausprogrammiert. Sie sehen, eine ExtensionMethod zu schreiben, ist gar nicht so schwer. Sie können diese Bibliotheksklassen überall in Ihrem Quellcode anlegen, das ist ein kleiner Nachteil, also es kann durchaus sein, dass für einen Typen mehrere solcher Klassen bestehen und dass man dann eventuell Funktionalität auch überschreibt, da muss man ein wenig aufpassen und ein weiteres Problem mit ExtensionMethods ist, dadurch dass sie statisch sind und dass sie auch in statischen Klassen definiert sind, sind sie sehr schlecht testbar. Sie sind deshalb schlecht testbar, weil man natürlich an dieser Stelle die Logik nur mithilfe der entsprechenden Daten aufrufen kann. Man kann die eigentliche Logik dieser Methode schwer aus der Logik des zu betrachtenden Typs herauslösen, aber das sind alles Informationen die Sie an der Stelle nicht weiter kümmern sollen. Für Sie sollte nur wichtig sein, setzen Sie ExtensionMethods mit Bedacht ein. Sie haben also gesehen, wie ExtensionMethods verwendet werden können und wie Sie sie in Visual Studio erkennen.

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!