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

var und dynamic

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
"var" und "dynamic" sind zwei wichtige Schlüsselworte, die häufig verwechselt werden – obwohl sie sich in der Funktionsweise stark unterscheiden.
06:56

Transkript

Zwischen Verfechtern und Feinden des var-Schlüsselwortes gibt es einen tiefen Graben und den probiere ich hier ein wenig zu schließen, indem ich manchen [...] beseitigen möchte. Das var-Schlüsselwort ist für uns sehr wichtig in Kombination mit Linq und deshalb sollten wir es dem Dynamic-Schlüsselwort gegenüberstellen. Das tun wir, indem ich zunächst einmal einen string anlege und dafür verwende ich jetzt statt der Bezeichnung string eben das Schlüsselwort var und dem gebe ich einen Namen. einString. Als nächstes weise ich diesen string der Variablen zu =“Dies ist ein String“; und schon sind wir fertig. Wir haben eine Variable mit der nichts gemacht wird. Wie funktioniert das Ganze? Statt das wir also den Typ einer Variable direkt schreiben, wird dieser Typ interpoliert auf Basis des zugewiesenen Wertes. Was beispielsweise nicht geht ist, dass man var nocheinString; schreibt, weil an der Stelle ja nicht entschieden werden kann, um was für einen Typ es sich handelt. Das funktioniert selbst dann nicht,wenn ich die Wertzuweisung "Später"; mache, denn der Typ einer Variablen muss zu dem Zeitpunkt feststehen, da sie angelegt wird und das ist definitiv nicht hier unten. Nun gibt es immer wieder die Fragen, naja im Grunde ist das noch nicht Typ-sicher und letztendlich passiert das doch alles erst zur Laufzeit. Nein, passiert es nicht. Tatsächlich passiert es zur Compile-Zeit, also die Zuordnung des entsprechenden Typs kann, wie man hier sieht, bereits zur Programmierzeit passieren, also wenn ich auf einen string zugreife, sehe ich alle möglichen Eigenschaften, die ein string hat, inklusive der Linq-Ausdrücke, die hier noch mit rumgeistern. Unter anderem sehen wir hier die Länge und auf die Länge können wir auch problemlos zugreifen und können diese abfragen. Var laenge = einsString.Lenght; Können wir alles mal ausführen und dann schauen wir mal, was in der Länge drin steht. Einen Schritt weiter und wir sehen, die Länge ist 19, also sind das 19 Zeichen, die hier oben drinstehen. Es funktioniert, alles kein Problem Jetzt schauen wir uns an, wie sich das beim Dynamic-Schlüsselwort verhält. Ich leg hier ebenfalls eine Variable mit dynamic an, und es sieht auf dem ersten Blick genauso aus, wie beim var-Schlüsselwort, aber interessant ist, beim Dynamic-Schlüsselwort, ich kann eine solche Variable auch zu einem späteren Zeitpunkt initialisieren. Schauen wir uns an, was dabei herauskommt, wenn wir die machen, dann erkennt er hier oben, dass das ein string ist und er erkennt hier unten, dass das ein dynamischer string ist, also der Inhalt von einem Dynamic-string ist auch ein dynamischer string. Soweit hat das Ganze funktioniert. Richtig interessant wird es aber erst, wenn wir bei Dynamic auf die Eigenschaften zugreifen. Denn da kommt nichts. In Visual Studio kann ich entscheiden, was für ein Typ ein Dynamic-string ist, einer der erst zur Laufzeit entsteht, wie wir gerade eben gesehen haben. Es liegt noch nicht zur Compile-Zeit fest, was der Inhalt ist. Wenn ich jetzt also an dieser Stelle Lenght schreibe, dann kann ich auch auf die Länge zugreifen, genauso wie ich das oben getan habe. Und ich werde auch die korrekte Länge erhalten. Aber diese Länge wird eben erst zur Laufzeit ermittelt und nicht zur Compile-Zeit. Wenn also Var für uns ein Platzhalter ist, so ist er in dem eigentlichen Quellcode überhaupt nicht mehr enthalten. Wir können auf Länge zugreifen und dort steht eine 22 drin. Und nun kommen wir zu dem Fall, weswegen man mit Dynamic äußerst vorsichtig sein sollte und was uns mit Var nicht passieren kann. Wenn ich hier statt Lenght zum Beispiel count eingebe, was ja im Grunde auch eine Property sein könnte, und hier oben Count angebe, dann bietet mir das Visual Studio für Count an der Stelle eine Methode an, diese kommt von Linq, aber wenn ich sie als Property verwenden möchte, dann zeigt mit das Visual Studio an, das geht nicht, denn es gibt diese Property überhaupt nicht. Bei Dynamic passiert das schon. Hier kann ich drauf zugreifen und merke erst zur Laufzeit, wenn eine Eigenschaft nicht vorhanden ist oder eine Funktion nicht vorhanden ist. Starten wir noch mal und mal sehen, ob er überhaupt bis hier herunter kommt, denn count ist ja kein [...] string, eigentlich müsste an dieser Stelle eine Exception geboten werden. Jetzt wurde eine Exception geschmissen und zwar eine RuntimeBinderException, weil eben festgestellt wurde, string enthält keine Definition für Count. Erst zur Laufzeit fällt dieser Fehler auf, weil wir das Objekt dynamisch gekennzeichnet haben. Und damit sehen Sie auch den Unterschied eben noch einmal zwischen Dynamic und zwischen var. Var ist nur ein Platzhalter für einen Typ, dieser ist im eigentlichen komplettierten Quellcode überhaupt nicht mehr enthalten, dadurch ergeben sich auch keine Geschwindigkeitsverluste. Dynamic hingegen sagt aus, dass es sich um ein dynamisch erzeugtes Objekt handelt, das erst zur Laufzeit ermittelt wird. Dynamic ist aus diesem Grund nicht Typ-sicher, var ist Typ-sicher und var verhält sich im Hintergrund eigentlich immer wie der Typ, der der Variablen zugewiesen wird bei der Initialisierung.

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!