So verwendest du die erweiterten C#-Sprachfunktionen | Mark Farragher | Skillshare

Playback Speed


  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

So verwendest du die erweiterten C#-Sprachfunktionen

teacher avatar Mark Farragher, Microsoft Certified Trainer

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Eine Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Eine Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

18 Einheiten (2h 15m)
    • 1. C# language features

      2:19
    • 2. Course introduction

      6:28
    • 3. The null coalescing operator

      9:27
    • 4. Soft typecasts

      7:42
    • 5. Auto properties

      9:08
    • 6. Three useful string methods

      5:49
    • 7. The using statement

      15:26
    • 8. Object and collection initializers

      7:47
    • 9. LINQ query expressions

      10:20
    • 10. The yield return statement

      6:46
    • 11. Extension methods

      10:06
    • 12. Lambda expressions

      9:31
    • 13. The null conditional operator

      14:56
    • 14. Auto property initialisers

      5:42
    • 15. Declaration expressions

      3:36
    • 16. Expression-bodied functions and properties

      5:18
    • 17. Await in catch and finally

      3:27
    • 18. Course recap

      1:41
  • --
  • Beginner level
  • Intermediate level
  • Advanced level
  • All levels

Community Generated

The level is determined by a majority opinion of students who have reviewed this class. The teacher's recommendation is shown until at least 5 student responses are collected.

287

Students

--

Projects

Über diesen Kurs

ac3755ca

In diesem Kurs werde ich dir ein paar sehr coole und erweiterte to beibringen.

Kannst du erklären, was die Rückmeldung macht? Was ist die Vorteile von the und die the Und was ist eine Funktion mit der Gesichtsfunktion und den Ausdrücken der what's

Wenn du diese Funktionen nicht erfährst, gib dir vielleicht zu viele Code ein, die der don't für dich automatisch herstellen kann. Dies wird dir verzögert und die Qualität deiner Codes reduziert.

Lass mich dir helfen!

In diesem Kurs zeige ich dir einige erweiterte Leistungsmerkmale der of Du lernst alles über die null die coalescing operator, coalescing und vieles mehr! Und ich werde dir auch einige sehr coole neuen Sprachfunktionen, die in C# Version 6 eingeführt wurden.

Am Ende des Kurses wirst du in fortgeschrittenen C#-, und dies wird dir helfen, bessere, saubere und cleaner Code zu schreiben.

Warum du diesen Kurs machst?

Du solltest diesen Kurs machen, wenn du Anfänger:in oder Fortgeschrittene entwickelst und erweiterte Funktionen der a erlernen möchtest. Das kann vielleicht eine Herausforderung erscheinen, aber alle meine Vorträge sind sehr einfach, und ich erkläre alles gut. Du wirst dir nicht Schwierigkeiten geben, dir mitzumachen.

Oder du bereitest dich vielleicht auf ein Vorstellungsgespräch vorbereiten? Das Wissen in diesem Kurs wird dir helfen, dich auf Fragen zu vorbereiten, die sie dir anwenden könnten.

Meet Your Teacher

Teacher Profile Image

Mark Farragher

Microsoft Certified Trainer

Teacher

Mark Farragher is a blogger, investor, serial entrepreneur, and the author of 11 successful Udemy courses. He has been a Founder and CTO, and has launched two startups in the Netherlands. Mark became a Microsoft Certified Trainer in 2005. Today he uses his extensive knowledge to help tech professionals with their leadership, communication, and technical skills.

See full profile

Kursbewertungen

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%
Bewertungsarchiv

Im Oktober 2018 haben wir unser Bewertungssystem aktualisiert, um das Verfahren unserer Feedback-Erhebung zu verbessern. Nachfolgend die Bewertungen, die vor diesem Update verfasst wurden.

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen bei Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. C# -Sprachfunktionen: Lassen Sie mich Ihnen eine Frage stellen. Möchten Sie ein C-scharfer Experte werden? Ich meine, die C-scharfe Sprache ist ziemlich cool. Aber wenn Sie die Sprache in der Schule oder im Kurs lernen, dann sind Sie nur die einzigen gelernt, die Grundlagen. Sie haben nicht wirklich die Machtmerkmale der Sprache gelernt. Also, was ich versuche, in diesem Kurs zu tun ist, lehren Sie ein paar von wirklich cool erweiterte Funktionen von der C scharfe Sprache. So zum Beispiel wir zum Beispieleinen Blick auf Erweiterungsmethoden werfen. Wir werden einen Blick auf die Rendite Statements werfen. Hast du eine Ahnung, was du zurückgeben wirst und wie du es benutzen sollst? Ich werde es dir beibringen. Wir werden einen Blick auf Link-Ausdrücke werfen. Wir werden einen Blick auf die Null-bedingten Operatoren werfen. Wir werden einen Blick auf einige erweiterte Funktionen werfen, die in der C-scharfen Version sechs eingeführt wurden . Also, zum Beispiel, wir werden einen Blick auf alle Eigenschaften initialisieren Stunden werfen, also werde ich Eigenschaften sagen, die Sie initialisieren. Wir werden einen Blick auf Deklarationskörper werfen, Ausdrücke. Also Ausdrücke, die als Londoner Funktion ausgeschrieben wurden, die Sie verwendet haben, um eine Methode zu initialisieren, die so wirklich coole Sachen sind. Am Ende dieses Kurses werden Sie auf dem Laufenden sein mit etwa 15 fortgeschrittenen Siehe Shoaib Sprachfunktionen, die Sie verwenden können , um Ihre eigenen Sees oder c scharfe Quellaufrufe zu verbessern. Es wird Ihnen helfen, weniger Mantel zu schreiben, weil viele dieser Funktionen automatisiert eine Menge von handgeschriebenen Code, den Sie in der Vergangenheit auf dieses Wissen schreiben müssen, wird Ihnen helfen, ein besserer Entwickler zu werden . Sind Sie also daran interessiert, ein C-scharfer Experte zu werden? Dann ist dies der Kurs für Sie. Also habe ich diesen Kurs für Junior-Meteor- oder Senior-Entwickler erstellt. Es spielt keine Rolle, welche Ebene Sie haben, die ihr Wissen von der C scharfen Sprache auf die nächste Ebene auf diesem Wissen zu bringen wollen , wird wirklich nützlich für Sie in Ihrer Karriere sein, wenn Ihre nächste Förderung Sie ist oder wenn Sie sich bewerben für einen Job. Also danke, dass Sie zugehört haben. Ich hoffe, dass ich dich im Kurs sehen werde 2. Einführung in den Kurs: Hallo. Willkommen zu diesem Kurs. Würzen Sie Ihren C-scharfen Mantel mit erweiterten Sprachfunktionen. In diesem Kurs werde ich Ihnen eine Liste von Sehr cool und fortgeschrittene C. Sharp Sprachfunktionen beibringen . Hier ist die Szene über C. Sharp. Microsofts hat diese Sprache im Jahr 2002 vor mehr als 14 Jahren veröffentlicht. Zu der Zeit war C Sharp wenig mehr als eine Variante aus Java mit einem etwas leistungsfähigeren Feature-Sets . Aber im Laufe der Jahre hat sich die Sprache enorm weiterentwickelt und reift zu ihrer gegenwärtigen Inkarnation. In der Version sechs heute ist C Sharp sowohl stark Ameisen, dynamisch typisierte Objekte,Tanten dynamisch typisierte Objekte, , komponentenorientiert, generischer Imperativ, deklarativ auf funktionale Programmiersprache Das ist ziemlich ein Bissen. Andi. Es treibt den Punkt nach Hause, dass C Sharp eine Multi-Paradigmen-Programmiersprache ist. Es enthält Features aus mehr als einem Programmierparadigma. Hier ist eine kurze Liste. C Sharp ist objektorientiert. C. Sharp ist auch deklarativ, weil es Attribute unterstützt. Aber C Sharp ist auch funktional, weil es Link auf Lunda-Ausdrücken auf D. C unterstützt . Sharp ist dynamisch Typen, weil es dynamische Variablen unterstützt. C Sharp ist vollgepackt mit Funktionen auf. Es ist ganz normal, seit Jahren Wörter mit der Sprache zu haben, ohne jemals eine bestimmte Funktion zu berühren . In meinem Fall kann ich ehrlich sagen, dass ich die dynamischen Keywords nie in meinen Projekten verwendet habe. Trotz meiner jahrzehntelangen Erfahrung mit C Sharp auf. Genau das hat mir die Inspiration gegeben, diesen Kurs zu machen. Wäre es nicht toll, wenn wir alle coolen und nützlichen Features von C scharfen Gruppen zusammen in einem praktischen Kurs hätten? Und so werde ich Ihnen in diesem Kurs 10 beibringen. Sehr cool, weniger bekannt auf fortgeschrittenen Power-Funktionen außerhalb der Küstensprache. Ich werde Ihnen auch einen schönen Überblick über die neuen Funktionen geben, die Microsoft Inversion sechs aus der C-scharfen Sprache eingeführt hat . Ich werde jeden Abschnitt mit einem Überblick beginnen, was Sie lernen werden, und ich werde den Abschnitt mit einer Zusammenfassung über das kurze Quiz beenden, mit dem Sie Ihr Wissen testen können . Wenn Sie scheitern, die Quizstadt zu kümmern ist nur wieder lesen Sie die entsprechende Vorlesung auf, dann versuchen Sie es erneut. Und wenn dir etwas unklar ist, dann kannst du dich frei erreichen, als mich zu kontaktieren. Ich beantworte gerne alle Fragen, die Sie haben. Am Ende des Kurses haben Sie ein solides Verständnis von vielen fortgeschrittenen sehen Kurzsprache-Features, und er wird völlig auf dem neuesten Stand sein auf alle neuen Funktionen, die Microsoft Inversion sechs eingeführt . Okay, jetzt fragst du dich vielleicht, auf wen ist dieser Typ? Was weiß er über C Sharp? Nun, hallo, mein Name ist Mark Finegar. Lassen Sie mich Ihnen etwas über meinen Hintergrund erzählen. Ich habe Physik an der Universität Utrecht in den Niederlanden studiert. Nach dem Abschluss begann ich meine Karriere bei einer kleinen I T Firma namens Vision. Ich hatte eine tolle Zeit und arbeitete mich bis zum Projektmanager, und ich wurde enge Freundschaft mit der Firma Art Director. In den zweitausenden Jahren haben wir uns entschieden, unser eigenes Unternehmen mit dem Namen Design State zu gründen. Hier ist also ein Gruppenfoto von drei Jahren später. Wir sind in nur drei Jahren auf 12 Personen angewachsen und haben an allen möglichen coolen Projekten gearbeitet. Zum Beispiel hier ist ein Videotelefon, das wir für niederländischen Internet-Millionär bauen, hallte Vincent. Wir programmierten das Gerät in C-scharfen Mantel, der auf den Punktnetz-Kompakten lief. Regenarbeit auf einem kompakten Smartphone. Leider ging Design State Bust im Jahr 2003, aber ich arbeitete weiter an coolen Projekten. Hier ist ein Supermarkt-Regal, an dem ich gearbeitet habe. Die coole Sache an diesem Regal ist, dass es eingebaut hat, oder wenn ich d Antennen, so könnte es senden. Als Produkte auf seinem platziert wurden, programmierte ich das Ganze in C Sharp und einem Speedo. Als nächstes ich mich 2007 wieder mit meinem ehemaligen Geschäftspartner zusammen und gründeten eine neue Firma namens First Focus. Also hier ist noch ein cooles Projekt, das wir zusammen gemacht haben. Dies ist eine E-Commerce-Website. Es ist ein Ei, ein Tachonetz. Wet Forms Projekte auf sie läuft auf einer Wolke von Lena-Servern. Wir gingen live vor ein paar Jahren auf wir spektakuläre Ergebnisse erzielen. Die Website enthält 100.000 Produkte in über 7000 Kategorien. Es hat Lebensfacetten. Navigation auf Daten rendert Seiten in Sekundenbruchteilen. Also da hast du es. Ich benutze C scharf seit mindestens 14 Jahren. Ich habe an einigen sehr coolen Projekten gearbeitet und ich liebe es, meine C scharfe Erfahrung mit dir zu teilen . Meine I T Karriere ist jetzt über 20 Jahre alt. In dieser Zeit fing ich an, Tech-Unternehmen. Ich meine eine CDO viermal, und ich habe seit fünf Jahren in Klassenzimmern unterrichtet, und ich habe an vielen, vielen großartigen Projekten gearbeitet, die Hughes C Sharp in etwas unkonventionellen Umgebungen. Jetzt habe ich den Punkt erreicht, an dem ich alles, was wohlhabend ist, mit dir teilen möchte. Online-Kurse machen macht eine Menge Spaß, und ich mag es wirklich, ein virtueller Lehrer zu sein. Ich liebe die Idee, sich mit Menschen auf der ganzen Welt zu verbinden, also danke nochmals für die Teilnahme an diesem Kurs. Lasst uns anfangen. 3. Der null: Okay, fangen wir mit unserer Liste an. Coole C Sharp Sprachfunktionen. Das erste Feature, über das ich sprechen möchte, ist der sogenannte kein Koaleszenzoperator auf diesem kleinen Operator ist wirklich nützlich, wenn wir es mit Kälte wie diesem zu tun haben. Also habe ich hier eine String-Variable namens Name, die ich eine Art tapfer mit wertvollen zugewiesen habe . Aber wenn dieser Wert tatsächlich nein ist , möchte ich, dass die Namensvariable stattdessen eine leere Zeichenfolge enthält. Dies ist nützlich, wenn der verbleibende Kult die Namensvariable verwendet, ohne jedes Mal auf keine Werte zu überprüfen . Um fair zu sein, es ist nichts falsch daran, an vielen Stellen in Ihrem Code nach keinen Werten zu suchen. Aber manchmal kommt die Anzahl der Schecks, die Sie tun müssen, außer Kontrolle. Tante Innocently bequemer, stattdessen mit einer leeren Schnur zu arbeiten. Also haben wir dieses Schnipsel von Kälte, das oft in C-scharfen Projekten auftaucht. Eine Möglichkeit, die Erkältungen zu vereinfachen, ist die Verwendung der Kurve. Jeder Operator, den Sie wahrscheinlich gesehen haben, isst den Operator mit der Frage . Arbeite am Dickdarm. Wenn ich diese Snippets neu Faktor, um den Gerberie-Operator zu verwenden, bekomme ich die folgenden Ergebnisse. Ich muss so 1000 Mal in meinen Projekten kalt getippt haben. Der Turn Arriaga Belüfter gibt entweder den Wert oder eine leere Zeichenfolge zurück, wenn der Wert nicht so genau das gleiche Verhalten, das vorher ist. Aber jetzt haben wir die S-Anweisungen auf Alert-Code ist schön auf der gleichen Zeile verloren, aber Sie können diesen Kult noch weiter vereinfachen. Der No-Coalescing-Operator hat den Null-Check eingebaut, so dass Sie den Code einfach so schreiben können . Hinter den Kulissen ist es immer noch der gleiche Mantel der Scheck für Nein. Geben Sie dann entweder den Wert oder eine leere Zeichenfolge zurück. Aber mit diesem Operator kann ich den Code super kompakt ausschreiben. Also hier, auf eine Reihe von coolen Dingen, die Sie mit diesem Operator tun können. zunächst Lassen Sie unszunächsteinen Blick auf bemerkenswerte Typen werfen. Ich kann einen Codeausschnitt wie diesen mit einem bemerkenswerten Interview-Giebel aufsetzen. Also habe ich eine kennenswerte Interviewvariable namens Nummer , von der ich sagte zu wissen, dass dies vollkommen gültig ist, weil es unerkennbare Ganzzahl ist, es kann nicht Nein sein , Aber jetzt schaue mir die zweite Zeile an, die ich ein normales Interview zur Verfügung stelle, aufgerufene Ergebnisse am. Ich gebe ihm die Nummer zu. Also, was passiert? Eine normale Ganzzahl darf keine Werte enthalten. Der Compiler wird sich weigern, diesen Kult zu kompilieren. Sieh dir das an. Siehst du, das hat nicht funktioniert. Um die Erkältungen zu kompilieren, muss ich mit Typecast so tun. Ich werde wieder Abteil. Ich sehe keine Fehler. Also, jetzt kann ich das Programm laufen. Hier gehen wir weiter. Sehen Sie, ich bekomme eine ungültige Betriebsausnahme, die vollkommen Sinn macht, weil ich versuche, keinen Wert in eine normale Ganzzahl zu stopfen , die in c scharf völlig nicht erlaubt ist, um diese Arten von Laufzeitausnahmen zu verhindern . Das Beste, was Sie tun können, ist in dieser Situation aufhören, Typenpasts zu verwenden. stattdessen Verwenden Siestattdessenden No Coalescing Operator, der dies mag. Jetzt sind wir nicht zur Kälte gezwungen. Alles ist in Ordnung, wenn ich die Erkältungen mache. Los geht's. Siehst du, ich bekomme keine Ausnahme. Was jetzt passiert ist, ist, dass ich das bemerkenswerte Interview immer noch in eine nicht bemerkenswerte Variable setze . Aber ich gebe auch einen Standardwert von Null an, falls der leichtgläubige Wert gut ist, nein, dies ist der Hauptgrund, warum dieser Operator eingeführt wurde. Der keine Koaleszenz-Operator macht es sehr einfach, zwischen wissensbaren auf nicht bemerkenswerten Wertetypen zu wechseln , ohne unordentliche, Null-Prüfungen überall auf Ihrem Mantel verwenden zu müssen . Ein weiterer nützlicher Anwendungsfall für den nicht koaleszierenden Operator ist das Verketten von Standardwerten zusammen. So funktioniert das also. Nehmen wir an, ich signiere einen Konfigurationsparameter wie diesen. Stellen Sie sich nun vor, dass ich hier einen Konfigurationswert zuweise, also stellt der Wert einen Konfigurationswert auf Angenommen, es gibt auch einen lokalen Standard für einen globalen Standard für diesen Wert. Also möchte ich diesen Wert zuweisen. Aber wenn es nein ist , möchte ich auf den lokalen Standard zurückgreifen. Wenn das nein ist, möchte ich auf den globalen Standard zurückgreifen. Der Kult, dies zu tun, sieht so aus, damit Sie dies mit Turn-Ary-Operatoren bereinigen können. Aber man muss ihn so verschachteln, also ist das kompakter, aber nicht wirklich sehr lesbar auf. Ja, ich habe in meinen Projekten 1000 Mal kalt getippt, aber jetzt sehen Sie sich dies an, indem Sie den No Coalescing Operator verwenden. Der Kult ändert sich zu diesem super kompakten Quellcode. Andi. Es ist immer noch vollständig lesbar, eine enorme Verbesserung. Ich werde Ihnen zeigen, was mehr Anwendung aus dem keine Koaleszenz-Operator. Nehmen wir an, ich habe eine Eigenschaft, die einen String-Builder mit einer großen Anfangskapazität zurückgibt. Ich möchte den String-Puffer in den letzten möglichen Momenten initialisieren. Dies wird Lazy Loading genannt. So viele Buchten würden so aussehen. Die Eigenschaft gibt zurück. Der String Boulder Puffer Tante Initialize ist es auf dem Flug. Wenn die geschützte Variable nein ist, ist dies ein klassischer fauler Beladungsmantel, etwas, das Sie oft in C Short Projekten verwenden. Lassen Sie uns nun die Kälte mit dem Nullkoaleszenzoperator vereinfachen. So sieht das Endergebnis aus. Ich laufe hier etwas vor mir selbst, da das Ding rechts neben dem Operator eine Deklaration Ausdruck auf ist . Wir werden mehr von denen später in diesem Kurs sehen. Aber für jetzt, vertrauen Sie mir, dass diese Kälte entweder die Puffervariable zurückgibt oder wenn es nicht ist, ist es initialize on the fly verfügbar und dann zurück zu. Also wieder bekommen wir genau das gleiche Verhalten. Aber der Quellcode ist viel kompakter und leichter zu lesen. Okay, lassen Sie mich diesen Vortrag zusammenfassen. Was haben wir gelernt? Der bekannte Rekonvaleszenzoperator wird in Codes als Ausdruck 1 geschrieben und dann zwei Fragezeichen und dann Ausdruck an den Operator zurückgegeben, insbesondere eines, außer wenn Ausdruck 1 nicht ist. In diesem Fall gibt es Ausdruck an. Stattdessen können Sie den Operator verwenden, um einfach zwischen neuartigen und nicht bemerkenswerten Wertetypen zu wechseln. Sie können den Operator auch verwenden, um Sets über fahrbare Konfigurationswerte zurückzugeben, indem mehr als einen Operator miteinander verketten. Schließlich können Sie den Operator mit einem Deklarationsausdruck kombinieren, um das Lazy Loading zu implementieren. 4. Weiche Schreibweise: Meine nächste coole Sprachfunktion hat mit Typecasting zu tun. Wie Sie sicher wissen, konvertiert ein Typecast einen Ausdruck eines bestimmten Typs in einen anderen Typ. Werfen Sie einen Blick auf die folgenden Code-Snippets. Ich habe kein Objekt-Array, das mit verschiedenen Arten von Werten gefüllt ist. Es gibt ein Datum, Zeitwert, einen booleschen String und Inter Juror von Floats auf einem Zeichen. Dann gibt es eine Schleife, die das Array aufzählt, wenn versucht wird, jeden Wert in einen Stream auf Anzeigen auf der Konsole umzuwandeln . Jetzt wird es Sie nicht überraschen, dass diese Kälte scheitern wird. Nur die Array-Elemente von Seward enthält einen Stream, und die explizite Umwandlung schlägt für alle anderen Elemente fehl. Ich werde das Programm ausführen, um es zu beweisen. Hier sehen wir eine ungültige Cast-Ausnahme für die ersten Array-Elemente. Gerechtigkeit, habe ich vorausgesagt. Okay, jetzt lassen Sie mich ein paar Änderungen vornehmen. Ich werde den Mantel zu diesem ändern Jetzt werden die Codes keine Ausnahmen mehr werfen. Ich benutze den is-Operator, um zu testen, ob das Element ein Stream ist. Wenn ja, mache ich die Besetzung, die jetzt immer auf dem Display den Wert auf der Konsole erfolgreich sein wird. Aber wenn das Element keine Zeichenfolge ist. Ich schreibe viel besser eine andere Nachricht an die Konsole, richtig? Aber wir können diesen Kult noch weiter verbessern. Die if-Anweisung ist sehr ausführlich auf. Wir können dies in eine viel kompaktere Notation refaktorieren, genau wie wir es mit einem nicht koaleszierenden Operator getan haben. Werfen Sie einen Blick auf das. Du siehst viel besser. Ich habe den als Operator verwendet, um einen weichen Cast durchzuführen. Dies ist ein Typ Cast, der wie üblich weitergeht, wenn die Typen kompatibel sind. Aber wenn die Umwandlung aus irgendeinem Grund nicht ausgeführt werden kann , deaktivieren Sie stattdessen die ungültige Cast-Ausnahme. Der as Operator gibt einfach no on in der rechten Zeile Anweisungen zurück. Ich benutze unsere Freunde als keinen Koaleszenzoperator zur Ausgabe des Streamwerts oder einer Nachricht, die besagt, dass der Wert nicht stream ist. Dies reduziert Michael-Größe drastisch, Doch alles ist immer noch sehr lesbar. Es gibt aber eine Sache . Du musst im Hinterkopf behalten. Die Softs Cast kann nicht zwischen einer fehlgeschlagenen Umwandlung oder einer Zeichenfolge mit ausgeschaltetem Wert unterscheiden. Nein. In beiden Fällen der Operator einen No-Wert zurück. Um zwischen diesen beiden Szenarien zu unterscheiden, müssen Sie explizit auf den Nullwert wie folgt überprüfen. Welche Abgüsse können also so bedient werden? Leistung gut. Hier ist eine Liste, die in Referenztypen umgewandelt wird. Kostet zwei bemerkenswerte Typen, die von und Zehenfeld-Werte geworfen werden, aber keine unterschiedlichen Kasten verwenden. Also sieh es dir an. Bemerkenswerte Zeiten stehen auf der Liste. Nehmen wir an, ich möchte die vorherigen Code-Snippets so ändern, dass sie angezeigt werden, die alle im Objekte-Array eingeführt wurden. Ich kann die Anrufe einfach so ändern. Der einfachste Punkt, der als Operator versucht nun, eine weiche Zehe unerkennbare Ganzzahl auszuführen. Sogar die Besetzung gelingt. Ich habe Ihren Wert nicht eingegeben, aber wenn er fehlschlägt, habe ich einen Nullwert in meinem sachkundigen Inter. Sichere Variable in den richtigen Zeilenanweisungen bestreite ich dafür, dass ich diesen alten bekannten Koaleszenzoperator nicht verwende . Wie bei Strings beachten Sie jedoch, jedoch, dass ich jetzt Bergleute anzeige. Eins. Wenn die Umwandlung fehlschlägt, weil ich einen Wert verwenden muss, der mit dem bemerkenswerten Interview-Typ kompatibel ist , den ich auf der anderen Seite vom Koaleszenzoperator verwende. Wichtig ist, dass der Ameisenoperator keine benutzerdefinierten Konvertierungen durchführen kann . Also, wenn ich meine eigene Klasse so eingerichtet habe, sehen Sie hier, dass Sie eine Name-Klasse mit einer String-Eigenschaft namens Value mit einem eigenen Getter und Setter haben . Und ich habe auch zu impliziten Abgüssen hinzugefügt. Die 1. 1 konvertiert von String in Name, wodurch ein neuer Name erstellt wird. Instanz beim Initialisieren. Ist es mit einem gegebenen Strom auf der zweiten Kaste konvertiert von Name zu String und gibt einfach die Wert-Eigenschaft aus der angegebenen Name-Instanz zurück. Was denkst du, passiert jetzt, wenn ich das folgende Gold führe? Ich benutzte die als Operator, um das Objekt wertvoll Zehe einen Strom zu werfen. Die Variable enthält eine Instanz aus dem Namen, die eine implizite benutzerdefinierte Umwandlung hat, um von Name in String zu konvertieren, so dass alles gut funktionieren sollte, richtig? Leider nein, nein, lassen Sie mich demonstrieren, indem Sie das Programm ausführen. Los geht's. Siehst du, ich bekomme die keine String-Nachricht. Der Grund, warum dies nicht funktioniert, liegt darin, dass C Sharp implizite Typ-Umwandlungen während der Kompilierungszeit auf dem As-Operator zur Laufzeit auswertet . Um dies zu beheben, können Sie entweder eine dynamische Variable verwenden, da dynamische Variablen sie zur Laufzeit implizit gegossen werden , oder Sie können auf eine explizite Umwandlung zurückgreifen, wenn Sie die Typprüfung manuell durchführen, sodass Sie müssen vorsichtig mit dem als Operator sein. Es funktioniert großartig, aber nur für Referenztypen. Neuartige Zeiten auf Boxed Value Typen. Benutzerdefinierte Konvertierungen können überhaupt nicht verarbeitet werden. Okay, lassen Sie mich zusammenfassen, was wir in diesem Vortrag gelernt haben. Der as Operator führt einen Soft-Typecast von einer Zeit zum anderen aus. Wenn die Umwandlung fehlschlägt, der Operator Nein zurück. Der As-Operator kann einen Referenztypen bemerkenswerte Typen auf Boxed Werttypen umwandeln. Der Operator kann mit benutzerdefinierten Konvertierungen verwendet werden. Sie müssen stattdessen explizit umwandeln oder dynamische Variablen verwenden. 5. Auto: meine nächste coole Sprache hat Fisher mit Eigenschaften zu tun. Lassen Sie uns also einen Blick auf ein typisches Code-Snippets werfen, das eine Eigenschaft in C scharf einrichtet. Dies ist also eine sehr einfache Klasse ruft Person, die ein einzelnes privates Stringfield enthält, um den Namen der Person zu halten. Ich habe auch eine öffentliche Eigenschaft zum Abrufen und Festlegen des Namens deklariert. Dies ist Standards und Grenze Platz C scharfen Mantel, die Sie wahrscheinlich Typen und 1.000.000 Mal in Ihren Projekten auf haben. Das bringt mich zum Hauptproblem. Wir müssen dieses Codefragment so oft eingeben, dass wirklich zu viel Arbeit ist. Wäre es nicht viel besser, wenn wir all diese Karten auf vier Zeilen komprimieren könnten? Nun, ohne alle Eigenschaften ist das tatsächlich möglich. Sieh dir das an. Dies ist genau der gleiche Code. Der C scharfe Compiler wird diese Quellcodes kompilieren, um genau das Gleiche zu erzeugen. Ein privates Feld auf einem öffentlichen Property Getter und Setter. Aber jetzt muss ich viel weniger Quellcodes eingeben, um die gleichen Ergebnisse zu erzielen. Also, da gehst du raus. Alle Eigenschaft ist eine Eigenschaft, wo Sie einfach get on set oder direkt nach der Eigenschaft Deklaration eingeben . Die C scharfe Komponente erstellt dann automatisch eine private Felder auf Betankung des Kults für den Getter und Setter für Sie. Also, jetzt fragen Sie sich vielleicht, warum Eigenschaften überhaupt verwenden? Ist es nicht viel einfacher, ein Feld zu verwenden und es öffentlich zu machen? Nigris sehen genau die gleiche Anzahl von Quellcodezeilen, Aber jetzt brauche ich keine komplizierte Compiler-Magie, um automatisch Ghettos zu erstellen und uns für mich zu setzen . Warum sollte ich diese Funktion brauchen? Nun, es gibt wichtige Gründe, Eigenschaften über öffentliche Gefühle zu verwenden. Angenommen, Sie beginnen damit, ein öffentliches Feld in Ihrer Klasse einzuführen. Dann ein paar Wochen später entdecken Sie, dass Sie diese Felder faul laden müssen. Also, jetzt müssen Sie Faktor von Feldern in eine Eigenschaft auf setzen Sie die faulen Ladecodes in den Getter. Aber jetzt haben Sie eine bahnbrechende Veränderung eingeführt. Die Schnittstelle Ihrer Assembly hat sich geändert, da das, was einst das Feld war, jetzt eine Eigenschaftist , jetzt eine Eigenschaft Jeder Mantel, der Ihre Bibliothek aufruft, muss neu kompiliert werden. Ein weiteres Problem ist, dass Sie neue Fohlen benötigen, um Ihre Baugruppe widerzuspiegeln. Felder kann durch Reflexion mithilfe der Methode get fields zugegriffen werden. Für Eigenschaften benötigen Sie jedoch jedoch die get-Eigenschaftenmethoden. Also muss jede Kälte, die eine Reflexion wie, sagen wir, Serialisierungscodes verwendet , sagen wir, , geändert werden, um Ihr Wieder Factoring zu berücksichtigen. Wenn Sie gooey Codes entwickeln, werden Sie feststellen, dass die dekorative Datenbindung nur auf Eigenschaften funktioniert, die nicht auf Feldern. Wenn Sie mit einem Feld beginnen und später feststellen, dass Sie Daten benötigen, bindet die Felder mit dem Steuerelement der Benutzeroberfläche. Dann müssen Sie Ihre Mäntel reflektieren, damit es funktioniert. Schließlich können Eigenschaften Teil einer Schnittstelle sein, fühlt sich aber nicht an. Also, zum Beispiel, wenn Sie eine Farbeigenschaft oder eine Namenseigenschaft toe auf Schnittstelle hinzufügen müssen, dann gehen Sie direkt vor. Es besteht keine Notwendigkeit, Get on Set Methoden manuell einzurichten. Sie können sich einfach nicht direkt in der Eigenschaft zur Schnittstelle befinden. Ich mache das viele Male in meinem Mantel auf. Es ist eine großartige Funktion, also zusammenfassend sind Eigenschaften nützlich, weil Sie später Lazy Loading oder Range Check-Holds hinzufügen können, ohne Clients neu zu kompilieren. Sie können Lady- oder Bereichsprüfungen hinzufügen, ohne die Reflexion zu ändern. Gerichte. Sie können nur Daten Bynes für Eigenschaften und Eigenschaften können Teil von Schnittstellen sein. Also lassen Sie mich Ihnen jetzt eine coole Sache zeigen, die Sie mit Auto-Eigenschaften tun können. Nehmen wir an, wir möchten auf unveränderlichen Objekten, unveränderlichen Objekten oder Objekten einrichten, die Sie im Konstruktor eingerichtet haben, und danach können sie nie geändert werden. Dies ist sehr nützlich bei Multithread-Coat, wo mehr als ein Thread sicher auf die Objekte zugreifen kann, ohne sich Sorgen machen zu müssen, dass Felder ihren Wert unerwartet ändern könnten. Wie würden Sie also unveränderliche Objekte so gut einrichten? Also habe ich das private Feld schreibgeschützt gemacht, was bedeutet, dass es nur in der Klasse gesetzt werden kann. Konstruktor. Ich habe den Eigenschaftssetter entfernt Andi hat einen Konstruktor hinzugefügt, um das Feld zu initialisieren. Diese Klasse kann nur mit dem Konstruktor initialisiert werden, wenn sie in Stan ist, sie aß sie. Sie können den Namen nur jetzt über die Immobilie erhalten. Ich werde die Kälte vereinfachen, indem ich Autoeigenschaften verwende. Hier gehen wir viel kürzer. Nicht, dass ich einen öffentlichen Getter angebe. Andre Privatzentrum. Ja, das kannst du tun. Sie können verschiedene Sichtbarkeiten für den Getter und Setter verwenden, Eine sehr coole Funktion. Jetzt initialisiere ich meine Eigenschaft, indem ich das private Center im Konstruktor von Zen auf der Außenwelt aufrufe , kann nur auf den öffentlichen Getter zugreifen, um den Wert nicht zu ändern. jedoch Es gibtjedochzwei Probleme mit diesem Mantel. Der Compiler erstellt eine normale Unterstützung. Felder aus, nicht lesen, fühlt sich nur an, wie wir wollen, und das Zentrum ist von der gesamten Personenklasse zugänglich. So kann die Klasse selbst den Wert ändern, so dass wir nicht die Multi-Threading-Vorteile erhalten. Das Feld ist nicht nur auf die Person Klasse lesen kann das Zentrum jederzeit aufrufen und ändern Sie das Feld. Eine Bedrohung hat keine Garantie, dass eine andere Bedrohung den Wert aus dem Namensfeld nicht unerwartet ändert . Microsoft erkannte, dass dies das Problem ist, und so haben sie eine sehr nette Funktion in Seashore Up six eingeführt . Jetzt können Sie das einfach tun. Merkst du die Veränderung? Der Privatsektor ist verschwunden. Der Compiler ist schlau genug, um zu erkennen, dass das ein Lesen ist. Nur Eigenschaft kann mit dem privaten Lesezugriff Feld gesichert werden, um die Eigenschaft zu initialisieren . Der Compiler ermöglicht es mir, wieder auf das Zentrum im Konstruktor zu verweisen. Der Compiler ist intelligent und es wird meinen Code automatisch refraktionieren, um stattdessen auf die privaten schreibgeschützten Felder zu verweisen . Hierauf erstellt wirklich ein unveränderliches Objekt mit einem schreibgeschützten Backing-Feld, das absolut kein Eigenschaftssetter in der Klasse ist. Diese Klasse kann jetzt sicher von mehr als einer Bedrohung verwendet werden, ohne dass ein Thread nach Synchronisation sucht. Okay, lassen Sie mich zusammenfassen, was wir Lawrence in diesem Vortrag haben, bis Eigenschaften ein Feature sind, bei dem der C-scharfe Compiler automatisch den Getter und Setter kalt auf den Backing-Feldern erstellt . Dekorieren Sie direkt aus den Eigenschaften, indem Sie der Eigenschaftendeklaration mit Get diese Menge folgen , ohne ihre Implementierung anzugeben. Außerhalb der Eigenschaften sind nützlich, da sie zukünftige Änderungen an Getter und Setter Coat ermöglichen ohne die Montageschnittstelle zu brechen oder Änderungen an Reflexionsgold zu erfordern. Sie können auch Datenbytes zwei Eigenschaften und legen Sie sie in Schnittstellen. Sie können die Mitte auslassen, um eine unveränderliche Klasse mit einem schreibgeschützten Back-Feld auf keiner Mitte zu erstellen . 6. Drei nützliche string: Die String-Klasse hat einige sehr nützliche Hilfsmethoden, die oft übersehen werden, indem sie verwendet werden. Sie können verhindern, dass Ihre Karten unnötig aufgebläht werden. Werfen Sie einen Blick auf den folgenden Codeausschnitt. Ich schreibe eine Methode, um einen vollständigen Namen von einem Vornamen unter dem Nachnamen zusammenzustellen. Diese Kälte ist vollkommen in Ordnung. Es ist nichts falsch daran, aber es gibt eine kompaktere Möglichkeit, die Nein- oder leere String-Überprüfung durchzuführen. Lassen Sie mich die Kälte modifizieren und Ihnen Hühnerzellen zeigen, also ist das genau der gleiche Code. Die is no or empty Methode führt die gleichen Überprüfungen hinter den Kulissen durch. Der einzige Vorteil der Verwendung dieser Nachricht ist, dass sie weniger für Rechnungen ist, so dass ein Tippfehler weniger Chancen besteht, beispielsweise Eingabe anstelle von oder waren nicht gleich statt gleich. Okay, das ist also ein winziger Vorteil. Aber lassen Sie uns weitermachen. Es gibt ein Problem mit seiner Kälte, das heißt, dass der Vorname möglicherweise nur Leerzeichen enthält. Die keine oder leere Spur wird nicht Bargeld. Das ist dran. Daher bekomme ich einen vollständigen Namen, der aus einer Reihe von Leerzeichen besteht, gefolgt von dem Nachnamen, um gegen diese Bedingung zu überprüfen . Ich muss die Kälte wie folgt ändern. Sie haben wahrscheinlich diese Erkältungen viele Male in Ihren Projekten und Reis gesehen. Die Standardmethode, um gegen eine Leerraumzeichenfolge zu überprüfen, besteht darin, sie zu beschneiden dann zu überprüfen, ob wir keine Zeichenfolge haben. Aber diese Lösung hat einen großen Nachteil. Strings sind in Varianten vorhanden, so dass jedes Mal, wenn die trimmen-Nachricht aufgerufen wird, eine neue Zeichenfolge auf dem Heap zuweist. Wenn sich die Methode „get full name“ in einem kritischen Abschnitt des Mantels befindet, der Millionen Mal für Sekunden aufgerufen wird , dann wird diese Lösung viel Druck auf den Müllsammler ausüben, indem die Hitze mit Saiten überflutet wird . Betrachten Sie nun die folgende Änderung, die ich den if-Ausdruck durch eine coole zwei ersetzt habe, ist kein oder Leerraum. Also wieder, der Code ist weniger ausführlich, was die Wahrscheinlichkeit reduziert, einen Tippfehler zu machen. Aber jetzt habe ich auch noch einen Vorteil. Die Fräulein. Es weist keine temporären Streams auf dem Heap zu, das ist alles. Stattdessen scannt es einfach den Stream bei Überprüfungen, ob er nur Leerzeichen enthält. Also jetzt ist die Kälte tatsächlich effizienter. Es führt die gleichen Prüfungen wie zuvor aus, vermeidet jedoch die Zuweisung einer Zeichenfolge für jedes Mal, wenn es viel besser aufgerufen wird. Okay, jetzt habe ich meinen vollständigen Namen, den ich gegen unbekannten Namen überprüfen möchte, zum Beispiel meinen eigenen. Also würde ich den folgenden Kult haben. Leider funktioniert dies nicht, wenn die Variablen Vorname und Nachname unterschiedliche Groß- und Kleinschreibung verwendet haben, zum Beispiel, wenn sie alle in Großbuchstaben sind. Was ich hier wirklich tun muss, ist ein Zeichenfolgenvergleich ohne Berücksichtigung der Groß- und Kleinschreibung, so dass Sie oft kalt wie folgt sehen. Leider hat diese Kälte den gleichen Nachteil wie die Verwendung dieser Trainingsmethoden, um nach einer einzigen Leerraumzeichenfolge zu suchen . Die beiden oberen Methoden erstellen jedes Mal eine neue Zeichenfolge auf dem Heap, wenn sie in kritischen Abschnittenaufgerufen , wenn sie in kritischen Abschnitten Dies wird die mit vielen kurzlebigen, D referenzierten String-Audits überfluten . Dies wird viel unerwünschten Druck auf den Garbage Collector ausüben, aber wir wollen hier wirklich tun, ist einfach die beiden Strings Zeichen für Zeichen zu vergleichen , ohne zwischen Klein- und Großbuchstaben zu unterscheiden. Und ratet mal was? Dafür gibt es eine Methode. Also, jetzt führt meine Kegel einen String-Vergleich ohne Berücksichtigung von Groß- und Kleinschreibung durch, ohne neue Strings auf dem Heap viel besser zu erstellen . Okay, lassen Sie mich zusammenfassen, was wir in diesem Vortrag gelernt haben. Die ist schmelzen Anti Methoden überprüft. Wenn Strings keine oder Null Länge haben, hat dies keine Leistungsvorteile gegenüber den manuellen Prüfknospen. Mit den Methoden müssen noch mehr Kompakte kalt. Die Methode ist nicht mehr Leerraum prüft, ob Zeichenfolgen Nein sind. Null-Ling's oder enthalten nur Leerzeichen. Die Nachricht ist schneller als die übliche Lösung aus trimmen, weil es nicht eine neue Belastung auf ihn zuweist . Der String-Punkt entspricht Methoden können vor einem Zeichenfolgenvergleich nicht zwischen Groß- und Kleinschreibung unterschieden werden. Die Methode ist schneller als die übliche Lösung, die nach oben oder unten verwendet wird, da sie keine neue Zeichenfolge auf der 7. Die using: in diesem Vortrag werde ich Ihnen zeigen, wie man mit Einwegressource umzugehen ist in C scharf. Werfen Sie einen Blick auf die folgenden Code-Snippets. Dies ist also eine ziemlich Standardmethode, um Text in C scharf zu entschlüsseln. Ich beginne mit einer verschlüsselten Datei, füttere seinen Inhalt in eine Krypta des Streams, gepaart mit einem Entschlüsseln er, von dem ich früher gesagt habe, um den Text zu entschlüsseln. Schließlich erstelle ich einen Stream-Führer, um den Inhalt von der Krypta zu lesen, einen Stream bei der Rückkehr. Die entschlüsselten Ergebnisse. Wann immer im Programm, können Sie sehen, dass es unverschlüsselten Text auf der Konsole anzeigt. Aber dieser Code ist nicht sehr robust. Der Dateistream auf Skript, ein Stream, der in Speicherpuffern eingerichtet ist, um ihre Daten einzuzahlen, und diese Puffer bleiben an Ort und Stelle, bis die Streams Müll gesammelt werden, was Minuten oder sogar Stunden später passieren kann. Also ist der Mantel verschwenderisch mit Gedächtnis. Um dies zu beheben, muss ich die Puffer entsorgen, sobald ich fertig bin, den Text zu entschlüsseln. Wie Sie vielleicht wissen, wird die Meldung zum Entsorgen von Systemressourcen als gut entsorgt bezeichnet, daher ändere ich meinen Code wie folgt. Aber jetzt habe ich ein anderes Problem, dass die Streams nicht entsorgt werden, wenn aus irgendeinem Grund die ersten 5 Zeilen von Cold Shadow auf Ausnahme. Also muss ich mich vor dem Szenario schützen. Ich muss die Codes mit Versuchen Fangbox so umwickeln. Du siehst also, dass Gott sehr ausführlich ist, wirklich schnell. Der Code ist jetzt ordnungsgemäß vor Ausnahmen geschützt, aber es ist auch ein großes Durcheinander verschachtelter Ausnahmebehandler für dispose-Anweisungen. Die Lesbarkeit von diesem Code ist bergab gegangen. Das Problem ist, sollen wir uns wirklich so kalt machen? Denn der einzige sichere Weg, um zu garantieren, dass eine Dispose aufgerufen wird, ist die Verwendung eines finally-Blocks . Also, wenn Sie müde auf beschließt, ein paar Ausnahmen Hunderte zu überspringen, um Zeit zu sparen, werden Sie sich für einige wirklich lästige Debattierungssitzungen in der Zukunft einrichten. Glücklicherweise hat Microsoft dieses Dilemma erkannt. Tanten bietet uns die äußerst nützlichen using-Anweisungen. Sie sind wahrscheinlich bereits mit den using-Anweisungen als Mittel zum Importieren von Namensräumen vertraut . Aber es gibt noch einen anderen Nutzen. Ich werde den Mantel wechseln. Jetzt sieh dir das an. Dies ist genau der gleiche Code, den der Compiler nimmt. Diese Verwendung von Anweisungen auf erweitert sie in vollständige Ausnahmejäger mit einem Aufruf der dispose Methode in jedem finally-Block. Sie sehen also, es gibt absolut keine Entschuldigung, um zu vermeiden, die Dispose-Methode aufzurufen. Microsoft hat es für Fuller extrem einfach gemacht, die richtige Prozedur zu folgen, indem wir uns die using-Anweisungen auf der Hälfte des Compilers automatisch die vollständigen kalten Fragmente für uns erstellen . Um zusammenzufassen, verwenden Sie immer die using-Anweisung immer,wenn Sie eine Art knappe Ressource zuweisen und Siedie Ressource entsorgen möchten, wenn Sie fertig sind, Beispiele für knappe immer die using-Anweisung immer, verwenden Sie immer die using-Anweisung immer,wenn Sie eine Art knappe Ressource zuweisen und Sie die Ressource entsorgen möchten, wenn Sie fertig sind, Ressource ist unsere in Speicherpuffer. Wie in meinem Beispiel behandelt Datei Datenbankverbindungen als grafische Gerätegriffe. Okay, im zweiten Teil dieser Vorlesung werde ich Ihnen einige coole Dinge zeigen, die Sie mit den using-Anweisungen tun können, die Sie gesehen haben, dass die using-Anweisungen sehr nützlich sind, um die richtigen Co-Vorlagen für die Entsorgung einzurichten. Ressource ist schnell, aber ein Nachteil ist, dass, wenn Sie religiös mit Aussagen überall auf Ihrem Kult setzen, werden Sie sehr tief verschachtelt kalt. Schau dir nur die endgültige Version von meinem Mantel an. Scharfschützen. Ich lese nur eine Akte antik. Das Schreiben auf meine Kälte ist bereits drei Ebenen tief verschachtelt. Stellen Sie sich vor, wie der Code aussehen würde. Wenn ich sicher wäre. Sie könnten es entschlüsseln. Ich hätte sechs oder sieben kleine Dampf gekühlt. Aus Performance-Perspektiveist mit tief verschachteltem Mantel absolut nichts falsch. Aus Performance-Perspektive Aber für US-Programmierer ist es ein bisschen ärgerlich. Sind kalte Bewegungen den ganzen Weg zu den Rechten auf dem Bildschirm? Von den Armen der Redaktion. Eine große Anzahl von geschweiften Klammern machen die Kälte schwer zu lesen. Aber wieder, Microsoft kommt zu unserer Rettung, um zu vermeiden, tief verschachtelt mit Anweisungen. Vermasseln Sie unseren Mantel. Sie empfehlen tatsächlich die folgende Richtlinie für die kalte Formatierung. Jetzt sieh dir das an. Das ist also immer noch der gleiche Mantel. Aber die äußerste zu verwendenden Anweisungen haben keine geschweiften Klammern, und ich bin nicht mehr darin, die Anweisungen mit Tubbs zu beulen. Microsoft genehmigt tatsächlich diesen Codierungsstil auf dem visuellen Studio-Code für Motor erkennt den Stil und Tools wie Stil Cop wird keine Warnungen oder Fehler erzeugen. Wenn Ihnen die Kohle ein bisschen seltsam erscheint, denken Sie darüber nach , als ob die using-Anweisungen eine Liste von Variablendeklarationen sind. Sie würden variable Deklarationen an der Spitze Ihrer Erkältungen in einer flachen nicht identifizierten Liste auf diesem Stil setzen folgt der gleichen Konvention. Ich persönlich mag diesen Code-Stil, aber es gibt andere I T-Profis da draußen, die nicht mögen. Es liegt an den using-Anweisungen. Richtet einen kalten Block auf Codeblöcken ein, sollte immer geschweifte Klammern auf Werden wahrscheinlich eingerückt haben . Verwenden Sie diesen Stil nach eigenem Ermessen. Eine nette Sache, die Sie mit Anweisungen tun können, ist mehr als eine Deklaration in einer einzigen Anweisung eingerichtet . Alles, was Sie tun müssen, ist, alle Deklarationen in einer einzigen Anweisung zu setzen, die durch Kommas getrennt ist. Aber es gibt eine sehr wichtige Einschränkung. Alle Deklarationen müssen vom gleichen Typ sein. Nun, wenn ich meine Entschlüsselungsanrufe anschaue, wird das ein Problem sein. Ich habe einen Dateistream, einen Krypto-Stream auf einem Stream-Führer. Dies sind alle verschiedene Arten. Wie kann ich sie in einer einzigen using-Anweisung kombinieren? Nun, hier ist ein kleiner Trick, den Sie verwenden können. Es gibt tatsächlich einen einzigen gemeinsamen Nenner zwischen all diesen Typen, und das ist, dass sie alle wegwerfbar sind und jeder Einwegtyp in dot Net die I-Einwegschnittstelle implementieren muss . Diese Schnittstelle ist also der gemeinsame Nenner. Also alles, was ich tun muss, ist drei Ich Einwegdeklarationen wie diese einzurichten, Sie bemerken, dass ich auch mit dem as Schlüsselwort eingeben muss, da alle meine Variablen jetzt vom meinen Einweg-Typ entfernt sind. Also muss ich sie wieder in den richtigen Typ umwandeln, wann immer ich sie verwenden möchte. Jetzt. Persönlich finde ich diesen Auslöser nicht nützlich. Sie haben immer noch die gleiche Anzahl von Feigling Linien. Und jetzt ist der Code auch mit Gezeitenausgaben übersät, um die Einwegvariablen zurück in den richtigen Typ zu konvertieren . Das verbessert die Lesbarkeit von der Kälte überhaupt nicht. Okay, ich werde diesen Vortrag mit zwei häufigen Fehlern abschließen, die oft mit der using-Anweisung gemacht werden . Ich fange mit diesem Mantel an. Nein. Was meinst du? Dies ist also wieder die flache nicht identifizierte Liste mit Anweisungen. Aber jetzt habe ich die Variablendeklarationen aus der using-Anweisung gezogen. Die Deklarationen gehen oben auf den using-Anweisungen einfach die vorvorhandenen Variablen initialisieren . Sieht in Ordnung aus, nicht wahr? Also, was ist los mit seinem Mantel? Nun, das Problem ist, dass ich jetzt auf die Variablen zugreifen kann, nachdem sie entsorgt wurden. Die Variablendeklarationen befinden sich außerhalb des using-Blocks, so dass sie für die Dauer außerhalb des gesamten Programms im Gültigkeitsbereich bleiben. Also kann ich wirklich so etwas tun. Ich greife auf den Dateistream zu, nachdem er bereits entsorgt wurde. Das ist offensichtlich falsch. Ich sollte nie versuchen, auf entsorgte Variablen zuzugreifen. Aber sieh mal, was passiert, wenn ich den Code zwinge. Ich bekomme keine Kompilierungsfehler, weil ich nichts tut, das taktisch falsch gesendet wurde. Ich greife einfach auf eine Variable zu, die noch im Gültigkeitsbereich ist. Aber jetzt sieh mal, was passiert, wenn ich kalt bin. Ich verstehe die Edl, die Sie erwartet haben. Ich kann keine Methoden für ein entsorgtes Objekt aufrufen. Diese Codierungskonvention erlaubt mir also, auf gelöste Variablen zuzugreifen und Laufzeitfehler auszulösen . Nun, das ist ein Problem. Aber sieh dir an, was passiert, wenn ich die Codes wieder in seine ursprüngliche Form änderte und dann immer noch versuche, auf den Foul-Stream zuzugreifen, nachdem er entsorgt wurde. Jetzt schau, was passiert, wenn ich diese Aufrufe kompiliere. Sie sehen, dass der Compiler mir mitteilt, dass ich auf die Variable außerhalb des Bereichs zugreife. Die using-Anweisung richtet den Bereichsblock für alle Variablen ein, die innerhalb der using-Anweisungen deklariert sind nach dem Ende des Bereichs nicht zugänglich. Schau, das macht es mir völlig unmöglich, auf die Variablen zuzugreifen, nachdem sie entsorgt wurden . Setzen Sie also niemals die Variablendeklarationen außerhalb der using-Anweisungen, da Sie sich für potenzielle Laufzeitfehler einrichten, wenn Sie versehentlich den Zugriff versuchen. Indisponiertes Objekt. Lassen Sie sich vom Fach schützen. Der zweite häufige Fehler, den ich mit einer using-Anweisung sehe, heißt Like this. Diese Codes richten eine Webanforderung ein, um auf die Webseite im Internet zuzugreifen. Dann verwendet es Stream Reader, um die Web-Antwort und unten von der Seite in eine String-Variable zu lesen . Also, was ist das Problem mit seinem Mantel? Nun, da es nur eine einzige using-Anweisung gibt, wird nur eine einzelne Variable entsorgt, was in diesem Fall der Stream-Leser ist. Nun ist die gute Nachricht, dass der Stream-Leser auch automatisch den zugrunde liegenden Antwortstrom entsorgt . Aber das hinterlässt mich immer noch mit dem http-Antwortobjekt. Dieses Objekt sollte auch so schnell wie möglich entsorgt werden, da es auf Zehe im Netzwerk-Sockel hält . Der richtige Code wäre also etwa so. Also, jetzt muss ich Anweisungen eine verwenden, um das HTTP-Antwortobjekt auf einem zu entsorgen, um den Stream-Führer entsorgen, der auch den Antwortstrom automatisch entsorgt. So sehen Sie, dass das Packen vieler Objekte Initialisierung in eine einzelne Verwendung von Anweisungen möglich ist . Aber Sie müssen sehr wachsam sein, dass der einzelne Aufruf zu entsorgen alle anderen Objekte bereinigt , um es ist sehr einfach, ein Objekt versehentlich zu übersehen und es nach der Entsorgung herumbleiben zu lassen, um sich davor zu bewahren, alle hyperwachsam zu sein die Zeit. Es ist viel besser, die Initialisierung einfach über mehrere using-Anweisungen zu teilen und eine einzelne using-Anweisungen für jedes Objekt zu verwenden . Auf diese Weise kann nichts schief gehen. Und wenn alle Ihre Objekte zur gleichen Zeit trennen, zögern Sie nicht, das Komma getrennt uns zu verwenden. Okay, hier ist eine Zusammenfassung aus. Alles hat sich in diesem Vortrag erholt. Die using-Anweisungen richten eine versuchen schließlich Block Toe automatisch zu entsorgen Variable. Sobald Sie damit fertig sind, können Sie mit Anweisungen verschachteln, lassen Sie aus den äußersten geschweiften Klammern auf, nicht in Dellen Ihre Kohlen, um die Lesbarkeit zu verbessern, diese Mantelsyntax wird von Microsoft genehmigt. Sie können eine einzelne mit Anweisungen mehrere Variable einrichten, indem Sie die Deklarationen mit Commerce trennen , aber nur, wenn alle Variablen vom gleichen Typ sind. Deklarieren von Variablen außerhalb ihrer using-Anweisungen ist eine schlechte Idee, da sie ihren Geltungsbereich erweitert . Auf diese Weise können Sie auf die Variablen zugreifen, nachdem sie bereits entsorgt wurden. Verschachtelte Objektinitialisierung in einer einzigen Verwendung von Anweisungen ist eine schlechte Idee, da die anderen Objekte möglicherweise nicht automatisch entsorgt werden. 8. Objekt und collection: die nächsten Schulen er scharfe Sprachfunktion Ich möchte Ihnen zeigen, ist das Objekt auf Sammlung initialisieren er. Diese Funktion macht es sehr einfach, ein komplexes Objektdiagramm mit nur wenigen Codezeilen einzurichten . Werfen Sie einen Blick auf den folgenden Codeausschnitt. Sie werden die Auto-Eigenschaften in der Definition Von der Punkte-Klasse bemerken, richte ich eine einfache Klasse mit zwei öffentlichen Interviewer-Eigenschaften X und Y. richte ich eine einfache Klasse mit zwei öffentlichen Interviewer-Eigenschaftenein, X und Y. ein, Variable off Typ zeigt auf einem Vorzeichen Werte auf die X und Y Eigenschaften. Bisher ist es ziemlich unkompliziert, meinst du nicht? Nur das einfache bisschen Erkältungen, die beim initialisierten Benutzertrotztyp defiance deklariert werden sollen. Aber wusstest du, dass du über diesen Mantel nachdenken kannst? Entfernen Sie zwei Zeilen Quellcode. Lassen Sie mich es Ihnen zeigen. Also jetzt habe ich stattdessen die Punktvariable gegessen, indem sie den Konstruktor aufruft. Aber dann setze ich die Linie mit einer öffnenden geschweiften Klammer fort. Eine Liste von Eigenschafteninitialisierungsausdrücken, die durch Kommas getrennt sind. Andi, ich beende die Linie mit einer schließenden geschweiften Klammer. Diese Syntax wird auf Objekte initialisieren er aufgerufen, so dass dies eine sehr coole Syntax ist. Sie können jedem Konstruktoraufruf mit einer Liste von öffentlichen Feldern oder Eigenschaftsinitialisierungsausdrücken folgen . Diese Instanz Yates. Tante Initialize ist eine Klasse in nur einer einzigen Codezeile, um die Quellkälte noch weiter zu komprimieren . Sie können optional riff entfernen die leere Klammer folgt dem Konstruktor wie folgt . Ziemlich cool, meinst du nicht? Hinter den Kulissen nimmt die C-scharfe Kompilierung einfach das Objekt. Initialize er erzeugt die Eigenschaftsinitialisierungsanweisungen des Feldes Tante, um die Objekte zu initialisieren . Also wieder, diese Funktion ist nichts anderes als syntaktischer Zucker, um Ihnen kalt, schneller oder überprüft zu helfen . Initialisieren Sie er auf anonymen Typen sind sehr ähnlich, um einen anonymen Typ zu initialisieren. Sie würden genau die gleiche Syntax wie mit dem Objekt initialize er verwenden, aber Sie lassen den Konstruktornamen aus, so dass meine Punkt-Instant-Station so aussehen würde. Ich habe die Worte Punkt entfernt. Also jetzt wird die Variable auf anonymen Typ mit öffentlichen X- und Y-Eigenschaften enthalten. Beachten Sie, dass ich auch das Schlüsselwort var verwenden muss, da ich nicht mehr weiß, wie der Typ der Variablen sein wird. Objekte werden initialisiert. Er ist wirklich glänzen, wenn Sie Listen von Objekten einrichten. Nehmen wir an, ich möchte eine Liste von Off-Punkt-Instanzen initialisieren, ich könnte es so machen. Jetzt verwende ich die Initialisierungssyntax mit den Listenelementen, die durch Commerce getrennt sind. Dies wird eine Sammlung initialisieren genannt. Äh. Der C-scharfe Compiler nimmt den Quellmantel bei Erzeugen Aufrufen der Anzeige Nachricht von der Liste für jede Liste Elemente. Beachten Sie, dass ich das Objekt schachtele, initialisiert er in einer Sammlung initialisiert er, so dass jedes Listenelement Hier ist eine vollständig initialisierte Punktinstanz, mit dem Sie den Compiler wieder die notwendigen Eigenschaftszuweisungsanweisungen erzeugen, um initialisiert jeden Punkt. Ein weiterer cooler Trick, den Sie mit der Sammlung initialize ERs verwenden können, wird als nicht standardmäßiger Konstruktor bezeichnet , wenn die Liste nur einmal initialisiert wird. zum Beispiel an, Nehmen wirzum Beispiel an,ich möchte meine Liste von Punkten auf eine Kapazität von 200 Elementen initialisieren. Ich kann es einfach so machen. Also, jetzt rufe ich den nicht standardmäßigen Listenkonstruktor auf, der es mir ermöglicht, eine Listenkapazität auf anzugeben . Dann setze ich einfach die Linie mit der Sammlung initialisiert Prozent ups. Der Compiler wandelt diesen Mantel in einen Konstruktor um. Rufen Sie vier Aufrufe der Anzeigennachricht auf, um die Elemente aus der Liste zu initialisieren. Noch eine schöne Sache, die Sie mit Sammlung tun können. Initialize er ist ein Wörterbuch eingerichtet. Nehmen wir an, ich möchte ein Wörterbuch einrichten, das RGB-Farbcodes ihren entsprechenden Namen zuordnet . Ich kann das einfach tun, also verwende ich die Sammlung initialize er Syntax. Aber jetzt ist jedes Element in geschweiften Klammern enthalten und enthält ein Schlüssel-Wert-Paar. Der Compiler generiert drei Aufrufe der Anzeigenmethoden aus dem Wörterbuch beim Feed des Schlüsselwert-Paares in die Methode, Angenommen, dass der erste Methodenparameter der Schlüssel für die Sekunden-Methode ist, Parameter ist der Wert. Sie können auch den Index oder die Syntax toe verwenden, um das Wörterbuch wie folgt zu initialisieren. Das Schöne an Initialize Ear's ist, dass sie nicht auf diese Standards Sammelklassen beschränkt sind . Alles, was sie benötigen, ist auf einer undenkwürdigen Schnittstelle auf einer öffentlichen Add-Methode mit den Methodenparametern , die viel die Initialisierungsausdrücke, die Sie bereitstellen, so dass Sie die Sammlung, Initialisierung oder Syntax für jede Klasse verwenden können Sammlung, , die Sie mögen. Die Indexer-Initialisierungssyntax funktioniert für jede Klasse mit einer Auge undenkwürdigen Schnittstelle auf Indexer mit einem Parameter, der den von Ihnen bereitgestellten Ausdrücken entspricht, so dass Sie nicht auf die Standardwörterbuchklassen beschränkt sind . Okay, lassen Sie mich zusammenfassen, was wir in dieser Vorlesung gelernt haben, Objekte initialisieren es Ihnen erlauben, schnell in Stan. Sie aß aus initialisieren und Objekte Sammlung initialisieren er ermöglicht es Ihnen, schnell in Stan . Sie aß Tante initialisierte Sammlung. Initialisieren er sind nur syntaktischer Zucker. Hinter den Kulissen produziert der C Sharp Compiler Anweisungen, um den Konstruktor initialisieren Objektfelder und Eigenschaften aufzurufen . Tante rief die Anzeigenmethoden zu fühlen Sammlungen Sammlung initialisieren. Er arbeitet an jeder Klasse, die die I unzählige Schnittstelle implementiert und eine Antwort bereitstellt verwirrt mit den richtigen Parametern. Der Index oder die Syntax, funktioniert auf jeder Klasse, die die unzählige Schnittstelle implementiert auf bietet einen Indexer mit den richtigen Parametern. 9. LINQ: in dieser Vorlesung werde ich Ihnen zeigen, wie Sie Linkausdrücke in Ihrem C scharfen kalten Link verwenden, steht für Sprache. Integrierte Abfrage auf Es ist eine ziemlich basierte Technologie, die in C Sharp Version 3.5 eingeführt wurde . Es ermöglicht Ihnen, Projekte zu filtern, Gruppen auf Ordersammlungen auf eine sehr natürliche Art und Weise beizutreten. Also schauen wir uns mal an. Auschecken des folgenden Codeausschnitts. Nun sagen wir, ich möchte alle Namen konvertieren, beginnend mit dem Buchstaben B in Großbuchstaben. Der klassische Weg, dies zu tun, ist wie folgt. Also jetzt habe ich eine Liste mit drei Namen Billy, Bob und Brad alle in Großbuchstaben. Aber dieser Ansatz ist nicht sehr effizient. Diese drei Namen kommen über in eine neue generische Liste, so dass jetzt die drei Namen zweimal einmal im Speicher in ihren ursprünglichen Formaten im Array auf Once in Großbuchstaben in der Liste gespeichert werden. In meinem Beispiel ist dies kein Problem, aber stellen Sie sich vor, wenn Sie Millionen von Elementen zu verarbeiten haben. Ein viel besserer Ansatz wäre, einen benutzerdefinierten und Zähler zu erstellen, der in operiert jeden Namen automatisch überspringt, der nicht mit einem B beginnt Andi gibt jeden übereinstimmenden Namen in Großbuchstaben zurück. Bei diesem Ansatz kein zusätzlicher Speicher benötigt. Sie können sich vorstellen, dass dieser Ansatz so ist, als würde man für jede Anweisung einen benutzerdefinierten Text schreiben diese Filterung und Verarbeitung automatisch im Hintergrund ausführt. In C Sharp Division 3.5 hat Microsoft Link eine sehr leistungsfähige Bibliothek zur Erstellung eingeführt, die diese Aufgaben problemlos ausführen kann . So kann ich mich jetzt wie folgt an meine Küste zurückerstatten. Viel einfacher. Ich verwende die Verschleißerweiterung den Namensraum der Systemmodellierung, um das Array auf der Auswahlmethode zu filtern , um jedes Element in Großbuchstaben zu projizieren. Das Endergebnis ist eine benutzerdefinierte Bewunderung, die alle Namen herausfiltert, nicht mit dem Buchstaben B bei Rückgaben beginnend, jeder übereinstimmende Name in Großbuchstaben der Typ aus dem Rückgabewert ist ein generischer I unzählige vom Typ Stream. Tante, ich brauche keine genetische Liste mehr, um die Ergebnisse zu speichern, aber ich kann diese Erkältung noch weiter verbessern. Anstatt die Link-Erweiterung aufzurufen. Frau kann ich auch einen Link schnell Ausdruck verwenden? Lassen Sie mich es Ihnen zeigen. Das ist genau das gleiche Fell. Der C-scharfe Compiler nimmt diesen eindeutigen Ausdruck an, der die Verschachtelte Link-Erweiterungsmethodenaufrufe konvertiert wird, um die Abfrage zu implementieren. Aber jetzt ist der Quellcode viel sauberer, ohne dass all diese Klammer auf Londoner Ausdrücken ist . Wenn ich diese Kälte lese, siehst du die gleichen Ergebnisse, Billy beide auf Gören. In Großbuchstaben können Sie Abfrageausdrücke mit regulären Erweiterungsmethodenaufrufen kombinieren. beispielsweise überprüft, Mit den folgenden Aufrufen wirdbeispielsweise überprüft,ob mindestens ein Name vorhanden ist, beginnend mit dem Buchstaben B im Array. Also hier bin ich, mit einem Abfrageausdruck toe, filtere das Gelände nur auf Namen, die mit dem Buchstaben B beginnen Ich habe diesen Ausdruck mit einem Paar von Klammern umgeben. Dann rufe ich die Erweiterungsmethoden auf, die überprüft, ob die Enumeration mindestens ein Element enthält . Wenn ich dieses Programm jetzt ausführe, können Sie sehen, dass es in der Tat mindestens einen Namen in der You're A gibt, der mit dem Buchstaben B beginnt. Diese Kombination eines eindeutigen Ausdrucks auf Erweiterungsmethodenaufruf funktioniert perfekt auf. Sie können sie nach Belieben mischen und abgleichen. Jetzt sieh dir das an. Ich kann auch Werte gruppieren, wobei der folgende Ausdruck Namen nach ihrem Anfangsbuchstaben gruppiert. Dies wird in Bewunderung aus Schlüsselwertpaaren zurückkehren, bei denen der Schlüssel der erste Buchstabe aus ist . Der Name auf dem Wert ist eine In-Home-Belüftung aus allen Namen, die mit diesem Buchstaben beginnen. Wenn ich diese Kälte lese, können Sie sehen, dass ich drei Namen habe, beginnend mit B zwei Namen, beginnend mit D, M oder T auf einem Namen, beginnend mit E H I V oder W. Ich kann auch Werte beim Erstellen von Ausdrücken sortieren. zum Beispiel den Mantel ändern, Lassen Sie michzum Beispiel den Mantel ändern,um I eine absteigende Liste von Gruppen zu erstellen, die die Namen in absteigender Reihenfolge enthalten . Dieser klare Ausdruck hat zu bestellenden Aussagen. Die 1. 1 sortiert die Liste der Namen in absteigender Reihenfolge auf den zweiten Anweisungen sortiert die Gruppen nach Schlüssel in absteigender Reihenfolge. Das Ergebnis ist die gleiche Liste der Gruppennamen wie im vorherigen Beispiel. Aber jetzt werden beide Namen auf den Gruppen in absteigender Reihenfolge sein. Das Schöne an der Verknüpfung eindeutig Syntax ist, dass Sie sehr komplizierte Abfragen leicht ausdrücken können . Die Syntax leuchtet wirklich, wenn Sie Gelenke machen oder wenn Sie mehrere Generatoren verwenden oder wenn Sie temporäre Variablen speichern müssen, während Sie das Erstellen bewerten. Also werde ich beginnen, indem ich Ihnen eine gemeinsame Aussagen zeige, Ich werde die Liste der Namen mit sich selbst verbinden. Dann werde ich jeden Namen auswählen, der mit dem gleichen Buchstaben beginnt, dass ein anderer Name endet mit dem kreativen sieht so aus. Also verbindet diese täuschend einfach aussehende Cleary das Namensarray mit sich selbst. Wählen Sie jedes Paar aus Namen, bei dem der erste Buchstabe eines Namens mit dem letzten Buchstaben eines anderen Namens übereinstimmt . Und dann projiziert es eine neue Bewunderung aus anonymen Klassen, die diese Übereinstimmungen enthalten. Sie könnten diese Abfrage mit der Syntax der regulären Linkerweiterungsmethode ausdrücken, aber Sie müssten die select many Methoden verwenden, um das Gelenk zu implementieren. Dies würde die Quelle Ursache weniger lesbar und klar machen. Lass mich die Kälte laufen und los gehst du. Diese waren ältere, übereinstimmende Namenspaare. Also hier ist ein weiteres Beispiel. Ich werde einen Link-Ausdruck mit mehr als einem Generator verwenden, um eine Liste aller Vokale in jedem Namen zu erstellen . Diese Abfrage verwendet zwei Generatoren, die Namen, Array und das Zeichen-Array von Familien. Das Erstellen in betreibt jeden Namen, dann in Emirates, jeder Vokal auf Tests. Wenn der Vokal a im Namen für jede Übereinstimmung heilt, die Erstellung einen Strom zurück, der angibt, welcher Vokal in welchem Namen gefunden wurde. Lassen Sie mich die Kälte später laufen, die Ergebnisse. Jetzt schon wieder. Sie könnten dies deutlich mit der Syntax der unregelmäßigen Linkerweiterungsmethode schreiben, aber es würde die Quelle kalt und weniger leicht zu lesen machen . Abschließend möchte ich Ihnen ein Beispiel aus den Let's Keywords Abfrageausdrücken zeigen. Ich werde eine Abfrage schreiben, die testet, ob ein Name ein Palindrom ist. Dies verwendet eindeutig die let's Schlüsselwörter, um eine temporäre Variable innerhalb des kreativen Ausdrucks für jeden Namen im Namen Array zu deklarieren . Ich habe die umgekehrten Methoden verwendet, um eine Zeichenfolge mit allen Zeichen aus dem Namen in umgekehrter Richtung zu erstellen . Dann kann ich in den Verschleißteilen aus der Abfrage einfach testen, ob der Name mit der umgekehrten Version von demselben Namen übereinstimmt. Wenn ich diese Abfrage ausführe, sehen Sie, dass Bob auf Hanna Trommeln stampfen. Okay, lassen Sie mich zusammenfassen, was wir in diesem Vortrag gelernt haben. Link-Ausdrücke können entweder durch manuelles Aufrufen von Link-Erweiterungsmethoden oder durch Schreiben der Erstellung als Abfrageausdruck auf die Hälfte des Compilers erzeugt die entsprechende C scharfe Erweiterung, lassen Sie es aufrufen, Erstellen von Ausdrücken auf Erweiterungsmethode Aufrufe können frei gemischt werden und mit dem kreativen Ausdruck übereinstimmen. Syntax ist sehr gut geeignet für Gelenke, mehrere Generatoren auf Abfragen, die temporäre Variablen deklarieren. 10. Die yield: In der vorherigen Vorlesung habe ich Ihnen eine Reihe von coolen Linkausdrücken gezeigt, jeder Ausdruck auf einer Liste von Namen operiert, die als ein Array von Strings implementiert wurden. Sie haben gelernt, wie einfach es ist, den Link zu verwenden, um Daten in einem Array zu filtern, zu sortieren und zu verbinden. Aber was ist, wenn es kein Array zum Erstellen gibt? Was ist, wenn Sie klar eine dynamische Sequenz off Werte müssen, zum Beispiel auf unendlich, eine Reihe von inter jours? Du könntest sagen, das ist einfach. Ich werde einfach die Bereichsmethoden wie folgt verwenden. So kehrt das deutlich in Bewunderung von allen geraden Zahlen weniger als 100 zurück. Aber was, wenn Sie eine komplexere Sequenz benötigen? Wie wäre es mit einer Liste aller Fibonacci-Nummern? Die Fibonacci-Sequenz ist eine Folge von Zahlen, wobei jede Zahl die Summe aus den vorherigen zwei Zahlen ist . Wie würden Sie eine solche Sequenz erstellen? Jetzt? Eine Lösung besteht darin, alle Zahlen in Trance zu berechnen und sie in ein Array zu setzen. Aber das ist eine verschwenderische Lösung, weil es viel Speicher benötigt, um die Zahlen zu speichern. Die bessere Lösung besteht darin, einen benutzerdefinierten in-Operator zu erstellen. Dies ist ein Objekt, das sich genau wie eine Sammlung verhält, aber es berechnet jeden Wert im laufenden Betrieb, wenn u. N M. N M. A. Bewerten Sie die Elemente mit mir für jede Anweisung, Schreiben eines benutzerdefinierten in Operator ist nicht hart. Hier ist der Zähler für die Berechnung der Fibonacci-Sequenz für Zahlen bis zu 100 dieser Zähler erzeugt eine Fibonacci-Sequenz für Zahlen unter 100. Honig verhält sich genau so, als wäre es eine Sammlung. Sie können eine Fore jeder Schleife verwenden, um jeden Wert wie diesen einzuweihen. Dieser Kult schreibt jede Fibonacci-Nummer bis zu 100 auf die Konsole. Wie Sie sehen können, wenn ich das Programm ausführe, machen die yield return Anweisungen es sehr einfach, benutzerdefinierte in Operatoren wie meiner Fibonacci-Sequenzklasse zu schreiben . Lassen Sie mich Ihnen zeigen, dass ich das Fohlen wieder Faktor wird, um die Ausbeute Return-Anweisung stattdessen zu verwenden. Hier gehen wir sehen viel sauberer und kürzer. Also, jetzt habe ich keine Klasse mehr, aber ich habe eine Nachricht. Stattdessen kehrt die Nachricht auf I in einer denkwürdigen Reihenfolge von Ganzzahlen zurück. Es gibt keine aktuelle Eigenschaft oder Bewegung als Nächstes bei Reset-Methoden. Stattdessen verwendet das Fell einfach eine wilde Schleife, um die schwachen natürlichen Zahlen auf Verwendungen zu berechnen. Die speziellen Erträge von Return-Anweisungen, um jede Zahl in der Sequenz zurückzugeben. Diese Methode erzeugt die exakt gleiche Aufzählung von Ganzzahlen. Also wieder kann ich es für jede Anweisung wie diese verwenden. Dann beweisen wir Ihnen, dass sich nichts geändert hat. Ich führe jetzt das Programm. Sehen Sie genau die gleiche Sequenz von ganzen Zahlen. Wenn ich diesen Kult kompiliert habe, wird der C scharfe Compiler sie Methoden und Re-Faktor nehmen. Es verwandelt es vollständig in eine benutzerdefinierte in der Operatorklasse. Der Ertragsrückgabeausdruck wird in der aktuellen Eigenschaft auf den verbleibenden Codezeilen platziert . In der while-Schleife werden in die Bewegung verschoben. Nächste Methode, geht der wilde Schleifenausdruck in eine return-Anweisungen am Ende der move next Methode auf der wilden Schleife selbst vollständig entfernt wird. Dies ist eine bedeutende Veränderung. Der Compiler trennt im Grunde Michael fortfahren ihn dann in eine Art Zustandsmaschine mit einer currents Eigenschaft on the move next Methode wieder zusammen. So gibt es jetzt keine 1 zu 1 Korrespondenz zwischen meinen Quellcodes auf der kompilierten Kälte mehr. Aber der große Vorteil ist, dass ich jetzt benutzerdefinierte in Operatoren mit nur wenigen Codezeilen erstellen kann. Die Regeln zum Erstellen benutzerdefinierter Enumeratoren mit Erträgen werden zurückgegeben. Ich bin sehr einfach. Alles, was Sie mit der yield return-Anweisung zurückgeben, geht in den Zustandsmaschine, und der Compiler stellt sicher, dass die Generator-Klasse diese Werte in der richtigen Reihenfolge zurückgibt . Die Enumeration stoppt, wenn entweder die Methode endet oder wenn Sie die speziellen Erträge ausführen. Break-Anweisungen. Wenn Sie also eine yield return statement insider für jede von einer while-Schleife setzen, ändert der Compiler Ihren Mantel in eine Zustandsmaschine, die bei jedem Aufruf eine einzelne Schleifeniteration ausführt . Als Nächstes bewegen. Das ist wirklich schön, weil es bedeutet, dass Sie eine Schleife zurückkehren würden. Lee wird ausgeführt, wenn die Werte tatsächlich benötigt werden. Und nicht vorher. Lassen Sie mich zusammenfassen, was wir in diesem Vortrag gelernt haben. Sie können benutzerdefinierte in Operatoren verwenden, um dynamische Sequenzen oder Werte zu erstellen, die sich genau wie eine Sammlung verhalten . Der Vorteil oft im Operator, ist, dass es nur ausgeführt wird, wenn die Werte tatsächlich benötigt werden. Die yield return Anweisung macht es sehr einfach, eine benutzerdefinierte im Zähler zu erstellen. Der C scharfe Compiler re Faktoren Schleifen mit Ertrag Rückgabeanweisungen. Pencil Estate Maschine, die eine Schleife Iteration jedes Mal ausführt, wenn die move next Methode aufgerufen wird . Die Enumeration stoppt, wenn die ergibt Rückgabeschleife endet oder wenn Sie die ergibt break-Anweisungenausführen break-Anweisungen 11. Erweiterungsmethoden: in dieser Vorlesung, werde ich Ihnen eine sehr nützliche C scharfe Sprachfunktion namens Extension Methods zeigen. wir also die Hälfte des folgenden Codes. Diese kalten Anrufe und Nachrichtenaufrufe erhalten einige Objekte, die eine Art von Wert zurückgeben. Wir wissen nicht, was es ist. Die zweite Zeile ruft die zwei String-Methode auf, die in die Objektklasse integriert ist zwei Drucke , die String-Darstellung von den Objekten an die Konsole. Lassen Sie mich das Programm laufen. Sie können sehen, dass die Objekte tatsächlich ein Ingenieur sind. Das ist alles in Ordnung und gut. Aber was, wenn ich die X- und L-Darstellung vom Objekt auf die Konsole schreiben möchte? Ich kann dies manuell mit einem XML-Serialize er tun, aber das ist viel kalt. Wäre es nicht einfacher, wenn ich das einfach machen könnte? Leider wird dies nicht kompiliert. Lassen Sie mich es Ihnen zeigen. Siehst du, ich kann später kompilieren. Der Grund, warum ich den Fehler bekomme, ist, dass die Objects-Klasse keine in XML-Methoden integriert hat, so dass diese Karte nie funktioniert. Es gibt auch keine Möglichkeit, die Objektklasse zu erweitern und diese Methode hinzuzufügen. Also ich denke, ich kann diese spezielle Syntax nie verwenden? Oder kann ich? In einer überraschenden Wendung ermöglicht Microsoft Ihnen tatsächlich, dies zu tun und diese Syntax zu verwenden. Alles, was wir tun müssen, ist eine Erweiterung zu erstellen. Methoden wie diese Benachrichtigung, dass diese Methode statisch ist, dass sie das Schlüsselwort dieses Schlüsselwort hat das den ersten Methodenparameter fortfährt. Um diese Methoden zu verwenden, muss ich die Methoden wie folgt aufrufen . Lassen Sie mich die Küste leiten, um Ihnen zu beweisen, dass es funktioniert. Los geht's. Siehst du, es funktioniert. Die ganze Zahl wird nun als XML ausgedrückt. Wenn Sie noch nie Erweiterungsmethoden in Aktion gesehen haben, blinken Sie jetzt vielleicht und denken, was zur Hölle gerade passiert ist? Nun, hier ist die Sache der Erweiterungsnachricht ist nur syntaktischer Zucker. Genau wie viele andere Sprachmerkmale, die wir bisher gesehen haben, dass der Compiler nimmt, geht meine Quelle auf Reflektoren. Es ist so. Ich sehe, die Karte hat sich gerade um die rechte Linie gedreht. Methoden ruft direkt die statischen XML-Methoden auf, die das Objekt als Parameter empfängt. Jetzt kontrastieren Sie dies zu meinen ursprünglichen Quellcodes, was darauf hindeutet, dass ich die beiden XML-Instanzmethoden für das Objekt aufrufe. Instanz, die der Compiler hier einen Schlitten ausführt, um eine statische Methode wie eine Instanz aussehen zu lassen? Methoden. Warum sollten Sie das wollen? Nun, der größte Teil der Verbindung ist als Erweiterungsmethoden implementiert, die auf der i undenkwürdigen Schnittstelle arbeitet . Wenn Sie also das, wo sortiert nach on select Methoden in einem Arrangement aufrufen, welche generische Liste, verschachteln Sie wirklich nur eine Reihe von statischen Methoden, die die undenkwürdigen Daten als Parameter empfangen . Dieser Trick ermöglicht es Microsoft, Link als fließenden AP I zu implementieren, trotz der Tatsache, dass sie die eiserne ehrenvolle Schnittstelle in keiner Weise erweitern konnten. Also unsere Erweiterungsmethoden eine gute Sache. Sie werden Entwickler finden, die denken, dass sie großartig sind und andere Entwickler, die Erweiterungsmethoden glauben, sind rein böse. Die Kontroverse ergibt sich aus der Tatsache, dass diese Methoden vorgeben, etwas zu sein, das sie nicht sind. Übernutzung von Erweiterungsmethoden können Ihre Kälte weniger lesbar auf einem Aufhebungsstab machen. Acht. Ihre zugrunde liegende Plattform. Dies wird auch die Intelligenz von Visual Studio verschmutzen, auftauchen und es schwieriger machen, kaltes Assert zu schreiben Problem mit Erweiterungsmethoden ist, dass sie zu schlechten Anwendungsarchitekturen führen können, wenn Sie gemeinsamen Zugriff auf eine Methode benötigen, die nicht in der Basisklasse, dann benötigt Ihre Klassenhierarchie wahrscheinlich eine Neugestaltung, aber Sie können dies vollständig vermeiden, indem Sie einfach eine Erweiterungsmethode hinzufügen. In diesem Szenario werden Erweiterungsmethoden zu einer Art Band-Aids, um ein fehlerhaftes Klassendesign zu halten, ohne alles schmerzhaft neu gestalten zu müssen. Meiner Meinung nachsind Erweiterungsmethoden eine gute Szene, aber nur,wenn sie in Maßen verwendet werden. Meinung nach sind Erweiterungsmethoden eine gute Szene, aber nur, Sie sollten Erweiterungsmethoden nur verwenden, wenn Sie die Klasse aufgrund dieser Dichtungen nicht erweitern können oder Sie die Kälte nicht besitzen. Wenn Sie Funktionalität zu einem globalen Typ wie Objekten oder Ryan honorable hinzufügen möchten oder wenn Sie Nachrichten in einem fließenden A P I verketten möchten. In allen anderen Fällen ist es besser, einfach in die Klasse zu gehen und eine Instanzmethode hinzuzufügen direkt. Ich werde Ihnen einige Beispiele für Erweiterungsmethoden auf geben. Sie können Ihre eigenen Köpfe bilden, wenn Sie denken, dass sie nützlich sind oder nicht. Diese Beispiele stammen alle aus einem Lagerüberlauf Artikeltitel. Was sind Sie Favoriten? Erweiterungsmethoden. Sie haben also bereits die beiden XML-Methoden gesehen, die beliebige Objekte in XML konvertieren können. Hier ist eine weitere coole Methoden. Haben Sie jemals eine ganzzahlige Variable mit vielen Literalwerten vergleichen müssen. Du bist kalt, dann sieht es so aus. Ich musste oft Code wie diesen schreiben, wenn ich Online-Zahlungsprozessoren implementiert habe, ich musste einen Fehlermantel analysieren. Aber jetzt schauen Sie sich diese Erweiterungsmethoden an. Mit dieser Methode kann ich das einfach tun. Lass mich die Küste runter. Siehst du, es funktioniert. Ich habe viel mit Datenbanken gearbeitet, wenn ich Daten aus einer Datenbank liest, muss ich oft in der Lage sein, Wert auf einen bestimmten Typ umzuwandeln. Dies ist ziemlich einfach mit der Convert-Klasse zu erreichen, aber Erweiterungsmethoden bringen dies auf die nächste Ebene. Schauen Sie sich diese Methode an. Diese Methode nimmt einen beliebigen Wert, der die I-konvertierbare Schnittstelle Tante implementiert, die in einen bestimmten Typ konvertiert wird. Also, jetzt kann ich das einfach tun. Ich wandle eine Zeichenfolge direkt in ein Interview um. Lassen Sie uns testen, ob das funktioniert, ich führe den Code jetzt Siehe, es funktioniert. Eine seltsame Sache am DOT-Net-Framework ist, dass nicht alle Auflistungsklassen die Anzeigenmethoden unterstützen , denen Sie einer Sammlung auf einmal einen ganzen Wertebereich hinzufügen können. Aber mach dir keine Sorgen. Wir können eine Erweiterungsmethode für diese Aufgabe erstellen Also jetzt konnte ich die Sammlung in einem Go fühlen , zum Beispiel im Hash-Set. Ich werde die Sache erledigen. Los geht's. Alles funktioniert, während wir auf dem Thema Sammlungstypen sind, haben Sie bemerkt, dass die Listenklasse für jede Methode sehr nett ist? Aber andere Sammlungsklassen nicht. Nun, diese Erweiterungsmethoden bietet eine vollständige jede Nachricht für alle Auflistungsklassen. Nein, ich kann diese Methoden auf irgendwelchen nominalen Daten verwenden. Zum Beispiel die Hash-Sets, die ich zuvor erstellt habe. Dies rechnet jeden Wert in dem Hash-Set für die Konsole. Lassen Sie mich demonstrieren. Ich werde um den Mantel herum. Siehst du, es funktioniert. Lassen Sie mich also zusammenfassen, was wir in diesem Vortrag Erweiterungsmethoden gelernt haben, Taktik zu sehen . Zucker. Sie sind statische Methoden, die Sie verwenden können, als ob sie wären. Instanz. Methoden, die oft plus Erweiterungsmethoden angegeben werden, sind nützlich, wenn Sie eine versiegelte Klasse oder eine Klasse erweitern müssen , die Sie nicht besitzen. Sie sind auch nützlich, wenn Sie einen globalen Typ erweitern müssen oder wenn Sie eine fließende A P I entwerfen . Erweiterungsmethoden sind umstritten, da sie zuerst auf die tatsächlichen Objekte zerfallen. A p I. Sie verschmutzen die Intelligenz Pop auf, sie können eine Band AIDS werden, um zu vermeiden, eine Fledermaus-Objekthierarchie neu zu gestalten. 12. Lambda: wir haben den letzten Vortrag aus diesem Abschnitt auf erreicht, Ich möchte Ihnen eine sehr schöne Sprachfunktion namens London Expressions zeigen. Also schauen wir uns mal an. Nehmen wir an, ich habe das folgende Code-Snippet. Ich beginne mit einer Ganzzahl die Zahl fünf. Dann habe ich Instanz, sie aß eine mathematische Operation. Delegaten auf die Multiplikationsmethode zeigen. In der nächsten Zeile rufe ich die Operation auf, die die Multiplikationsmethoden effektiv aufruft, die Nummer zur Verfügung stellt und dieses Ergebnis gestohlen hat. Also, wenn ich dieses Programm ausführe, können Sie sehen, dass das Ergebnis 25 ist. Genauso wie erwartet ist der Vorteil, dass ich die mathematische Operation leicht ändern kann, ohne die Kälte ändern zu müssen. Jede Nachricht, die einen Zoll benötigt und mit Mitteln zurückkehrt, kann hier verwendet werden, aber der Code ist jetzt ein bisschen für beide, also lasst uns das aufräumen. Die erste Vereinfachung, die ich durchführen kann, besteht darin, stattdessen generische Delegaten zu verwenden Das Punktnetz-Framework bietet die folgenden praktischen genetischen Delegaten sofort. Die Aktion filigrane, die einen Parameter vom Typ T entfernt und void zurückgibt. Der Funkdelegat, der einen Parameter vom Typ T abnimmt und den Wert vom Typ T zurückgibt, ergibt sich auf den Kreditkarten. Delegate, die einen Parameter vom Typ T annimmt, gibt einen booleschen Wert für meine Erkältungen zurück. Ich brauche einen generischen Funk Delikate aus Typ in Ihr Komma-Interview, weil ich einen Parameter des Typs in Sure not nehme . Ich gebe einen Wert vom Typ Integer zurück, so dass der Code so aussieht. Ich muss die Massenoperationsdelegierten nicht mehr deklarieren, weil ich die eingebauten Funk-genetischen Delegierten benutze , aber wir können diesen einen Schritt weiter machen. Anstatt eine private Multiplikationsmethoden einrichten zu müssen. Ich kann die gesamte Operation so schreiben. Was ich der Operationsvariablen zuweise, wird als Lambda-Ausdruck bezeichnet. Es ist eine einzeilige Delegiertenimplementierung, die einen Integer-Parameter namens X annimmt und das Quadrat von X zurückgibt. Beachten Sie nun, dass ich keine privaten Methoden mehr benötigte. Ich muss den Typ von X nicht explizit angeben. Das gesamte Programm wurde nur auf drei Codezeilen reduziert, also hier ist keine Überprüfung von Londoner Ausdruckssyntax. Ich fange mit dem an, den du gerade gesehen hast. Dies ist eine In-Line-Methode, die einen Parameter vom Typ Team abnimmt und einen Ausdruck zurückgibt , den der Compiler den Typ vom Rückgabewert ableitet, wenn die richtigen generischen Funkdelegaten ausgewählt werden . Sie können so viele Parameter hinzufügen, wie Sie möchten, oder Sie können keine Argumente haben, das ist alles. Wenn Sie mehr als einen einfachen Rückgabewert benötigen, können Sie mehrere Anweisungen wie diese verwenden. Sie können auch eine Aktion Methoden erstellen, die keinen Wert zurückgibt, indem Sie einfach die return-Anweisung auf auslassen . Hier sind die Regeln. Bei der Verwendung von Lambda-Ausdrücken beim Zuweisen und Lunda Ausdruck Toe einen Delegaten. gelten die folgenden Regeln. Der Lunda muss die gleiche Anzahl von Parametern wie der Delegatentyp enthalten. Jeder Eingabeparameter muss implizit in seinen entsprechenden delikaten Parameter umwandelbar . Der Rückgabewert aus dem Lambda, falls vorhanden, muss implizit in den Rückgabetyp der Delegaten konvertierbar sein. Diese Regeln werden Sie wahrscheinlich nicht überraschen, aber das Schöne hier ist, dass Sie die Delegatentypen nicht genau übereinstimmen müssen. Alles wird gut funktionieren, solange es eine implizite Umwandlung vom Londoner Typ zum empfindlichen Typ gibt. Wenn ein Delegat beispielsweiselange Parameter erwartet,können Sie einen Londoner Ausdruck bereitstellen, der stattdessen Ganzzahlen verwendet. beispielsweise Wenn ein Delegat beispielsweiselange Parameter erwartet, Da es eine implizite Konvertierung von Inter Show zu lange gibt, wird dies gut funktionieren. Londoner Ausdrücke können sich auf Variablen beziehen, die innerhalb deklariert sind. Auf der Außenseite des Ausdrucks wird der Bezug auf eine externe Variable Capturing the Variable Again genannt. Es gibt einige Regeln, die Sie für initialisierte Variablen nicht erfassen können. Variablen, die innerhalb des Londoner Ausdrucks eingeführt wurden, sind in den äußeren Methoden nicht sichtbar. Ein Lunda kann keinen Referenz- oder Out-Parameter erfassen. Andi in Lunda kann keine Go to break oder continue Anweisung enthalten, die außerhalb des Ausdrucks springt . Die Rückseite ist ebenfalls nicht erlaubt. Einmal in Sie müssen aufpassen ist, dass die gefangenen Wertsachen ein Leben bleiben, solange das heikle existiert. Dies kann zu einem eigenartigen Szenario führen, wo ein variabler Geist außerhalb des Geltungsbereichs, aber es bleibt ein Leben, weil es in einem Lunda gefangen wurde, die im Umfang bleibt. Dies ist eine sehr häufige Quelle von Speicherlecks in Punktnetzanwendungen. Jetzt zeige ich Ihnen, wie Sie einen einfachen Abbruchhandler für eine Konsolenanwendung einrichten, so dass diese Codes ausgeführt werden, wenn ich die Steuerung drücke. Siehe auf der Konsole. Lassen Sie mich demonstrieren. Sehen Sie, es funktioniert jetzt. Beachten Sie im Quellmantel, dass ich nirgends Typen bereitstelle. Mein Lambda-Ausdruck gibt die Namen von den Eingabeparametern an, aber nicht dort Typen. Dies ist vollkommen gültig, wenn der Compiler die Typen von den Abbrechen drücken Delegaten ableiten kann . Dies ist eine sehr schöne Anwendung off-Typ-Inferenz. Es erstreckt sich auf die Parameter von Lambda-Ausdrücken. Die meiste Zeit müssen Sie also keine Typen bereitstellen. Das ist alles. Der Compiler wird alles herausfinden. Eine andere nette Sache, die Sie tun können, ist, Ausdrücke zusammen zu ändern. Nehmen wir an, ich möchte jedes Mal einen ganzen Bereich von Cancel-Ereignishandlern mit einer anderen Nachricht erstellen , wenn ich es so machen könnte. Beachten Sie die Lee-Verkettungssyntax. Ich habe eine Lunda, die für Lunda zurückkehrt, nicht zurückkehrt und sogar unter. Dies richtet also ein London ein, das einen einzelnen Nachrichtenparameter annimmt, und es gibt einen Another Lambda zurück, der Ascender für ein Ereignis oder Experimentator erwartet. Also habe ich effektiv die Lunda erschaffen, die Fehler schafft. Ich kann es so benutzen. Jeder Cool to Make-Handler richtet ein neues Ereignis unter mit diesem gibt Massennachricht an. Lassen Sie mich die Kälte laufen, sehen, dass alles funktioniert. Diese Verkettung von Lunda Ausdrücken zusammen ist extrem mächtig. Okay, hier ist eine Zusammenfassung von dem, was wir in diesem Vortrag gelernt haben. Lunda-Ausdrücke sind in Zeilenmethoden, die Delegaten zugewiesen werden können. Wenn Sie nicht die Parametertypen angeben, die der Compiler für sie eingibt. Für Sie können Londoner auf Variablen innerhalb und außerhalb des Ausdrucks verweisen. Verweis auf eine externe Variable wird als Erfassung der Variablen erfassten Variablen im Speicher bleiben , bis der Delegat Garbage Collected ist. Dies kann zu unerwarteten Speicherlecks führen. Sie können Lander miteinander verketten, um Londoner zu erstellen, die Londoner zurückgeben. 13. Der null Betreiber: Okay, fangen wir mit unserer Liste an. Cool C. Sharp Sprachfunktionen in der neuesten Version eingeführt. Sechs. Wie Sie sich erinnern, begannen wir den vorherigen Abschnitt mit den nicht koaleszierenden Bedienerhänden in dieser Vorlesung Ich möchte Ihnen seinen Cousin zeigen, der keine bedingten Operator. Nehmen wir an, ich habe die folgenden Methoden in meinen Projekten. Also diese Methode nimmt einen String-Wert und dann abgeschnitten sitzt auf die angegebene Anzahl von Zeichen Sounds. Die aufgerufene Midden-Methode stellt sicher, dass der Wert nicht mehr als die tatsächliche Länge vom Wert abgeschnitten wird. Ich kann diese Methode in meiner Kälte so nennen. Das ist, wenn ich die Kälte renne. Sie sehen, dass es Mark Fucker korrekt an die Kontrolle schreibt die ersten 9 Buchstaben meines vollständigen Namens. Aber jetzt beobachten, was passiert, wenn ich keinen Wert für die Zeichenfolge angebe. Lassen Sie mich wieder auf das Programm. Sie sehen, dass es keine Referenzausnahme im Gericht zu Substring gefürchtet wird, und dies macht innerhalb der abgeschnittenen Methoden durchaus Sinn. Der value-Parameter ist jetzt nein. Also kann ich die Sub-String-Methoden nicht rücksichtslos aufrufen. Ich muss zuerst eine explizite Überprüfung von Nr. Wie ich bereits in der Vorlesung über den No-Coalescing-Operator sagte, gibt es nichts falsch mit einem Null-Check, aber sie können ein bisschen mühsam werden, wenn Sie Hunderte von ihnen in Ihrem Projekt schreiben müssen. Wie ich bereits in der Vorlesung über den No-Coalescing-Operator sagte, gibt es nichts falsch mit einem Null-Check, Glücklicherweise müssen Sie in C scharf sechs das nicht mehr tun. Du kannst das jetzt einfach schreiben und sehen, was passiert, wenn ich die Mädchen führe. Ich sehe keine Referenzausnahme mehr. Und jetzt schreibt die Colts die Standardzeichenfolge korrekt in die Konsole. Also, was ist hier passiert? Nun, ich habe den speziellen keinen bedingten Operator verwendet , den Sie als Fragezeichen auf einem Punkt schreiben. Der Operator funktioniert genau wie die unregelmäßigen Perioden, indem er auf ein Feld, eine Eigenschaft oder eine Methode in einer Objektinstanz zugreift . Aber wenn die Objektinstanz nein ist, der bedingte Operator einfach Nein zurück. Tat In derTat wird diese Zeile vom Compiler in diese Zeile konvertiert. Aber mit dem zusätzlichen Vorteil, dass der Wert nur noch einmal so bewertet wird, ist dies eine Form der syntaktischen kurzen C sharp six gibt uns eine kompakte und effiziente Möglichkeit eine Nullprüfung durchzuführen. Ich werde eine Änderung an meinem Abschnitt vornehmen, Mrs. Ich werde die Methode ändern, so dass der Wert immer wieder auf die ursprüngliche Länge zurückgesetzt wird. Wenn ich also meinen vollständigen Namen nehme , der 14 Zeichen lang ist, habe ich auf neun Zeichen abgeschnitten, dann möchte ich, dass die Methode den abgeschnittenen Namen mit fünf zusätzlichen Leerzeichen auffüllt, um zu einem Ergebnis von 14 Zeichen zurückzukehren . Dies ist sehr einfach zu erreichen. Ich muss das einfach noch einmal tun. Er war ein Aufruf an die Max-Methoden, um sicherzustellen, dass ich keine negative Anzahl von Leerzeichen auffüge . Also, was denkst du, passiert, wenn ich einen No-Wert bereitstelle? Wir wissen, dass die Sub-String-Methode nicht aufgerufen wird. Aber was ist mit den Pads? Richtige Methode? Muss ich alle Perioden in meiner Anrufkette durch den No-bedingten Operator ersetzen? Also im Grunde, was ich hier frage, ist, wie der Compiler diese Codezeile so oder so transformiert . Es ist ein subtiler Unterschied, aber mit tiefgreifenden Konsequenzen. Wenn der Wert Nein ist, funktioniert die erste Transformation gut, aber die zweite Transformation wird ausgelöst und keine Referenzausnahme. Nun, lasst uns die Antwort herausfinden und er wird das Programm laufen und wir werden sehen, was passiert. Hier sehen wir es uns an. Alles funktioniert noch. Das beantwortet also die Frage. Es ist die erste Transformation, die ich dir gezeigt habe. Was hier passiert, ist ein Prozess, der keine Ausbreitung genannt wird. Wenn Sie den keinen bedingten Operator für den Ausdruck links verwenden, ist der Operator nein , dann absolut nichts auf der rechten Seite aus, wird der Operator ausgeführt. Der keine bedingte Bediener kurzschließt die Auswertung als sofort zurückkehrt. Nein, das ist super praktisch, weil es bedeutet, dass Sie nur den keinen bedingten Operator des Anfangs Ihrer Anrufkette platzieren müssen. Jede nachfolgende Kohle kann den regulären Periodenoperator verwenden, und keine Ausbreitung stellt sicher, dass diese Aufrufe ordnungsgemäß übersprungen werden, wenn die Instanzen nicht. Okay, hier ist eine weitere Herausforderung für dich. Schauen Sie sich die folgende Kälte an. Dieser Code funktioniert einwandfrei. Wie Sie sehen können, wann immer auf dem Programm, es ist einfach Null auf der Konsole verschoben. Aber hier ist eine Frage an Sie. Was ist der Typ von der Len-Variable? Das ist ein bisschen ein Rätsel. Wenn der Name nicht bekannt ist, dann ist es offensichtlich eine ganze Zahl. Aber was ist, wenn der Name nein ist. Ist es der Strom? Ein alter hat etwas anderes überprüft? Nun, nochmal, lass es uns herausfinden. Ich werde einen Bruchpunkt auf der richtigen Linie setzen. Anweisungen auf Dann führen Sie das Programm in der Entwicklung. Los geht's. Okay, jetzt ist das Programm suspendiert. Das sind die richtigen Zeilenaussagen. Nun, wenn ich hier in das lokale Fenster schaue, können Sie sehen, dass die Len-Variable eine bemerkenswerte Ganzzahl ist. Das ergibt einen vollkommenen Sinn. Wenn die rechte Seite des Operators „no conditional“ den Werttyp auswertet, ist das Ergebnis der Operation die kenntnisreiche Version von diesem Werttyp. Also in meinem Mantelbeispiel wird die Variable unhörbar in. Ich kann die var Tastaturen explizit entfernen, direkt aus dem Typ 1000 bemerkenswerte Ins wie folgt. Es gibt eine schöne Symmetrie zu den Quellaufrufen mit Fragezeichen auf der linken und rechten Seite des Zuweisungsoperators, um uns daran zu erinnern, dass wir es mit einer bemerkenswerten Zuweisung zu tun und in der rechten Zeile Anweisungen, die Sie dort sehen alter Freund als kein Koaleszenzoperator erscheint wieder, um einen Standardwert bereitzustellen. Wenn der Name nein ist, kann ich die Variable in Zukunft auch als „no notable“ deklarieren und Sie sehen, dass kein Koaleszenzoperator einen Standardwert wie diesen überwacht. Also, jetzt wird die Variable zu einer expliziten, nicht erkennbaren Ganzzahl ausgewertet , um die richtigen Zeilenanweisungen schön aufzuräumen. Okay, hier ist ein weiteres Beispiel. vorherigen Abschnitt haben Sie alles über Erweiterungsmethoden für die Ertragsrückgabeanweisungen erfahren. Also jetzt werde ich diese beiden kombinieren. Sieh dir das an. Diese Erweiterungsmethoden wählt also eine angegebene festgelegte Elemente aus einer Liste und gibt sie als Aufzählung zurück. Aber die Nachricht überspringt automatisch alle keine Elemente und gibt nur keine zurück. Keine Elemente, also kann ich diesen Code wie folgt ausführen. Lassen Sie mich auf das Programm. Hier gehen wir und Sie sehen, dass ich nur die Nein Nein Werte auf der Konsole bekomme. Ich verwende den No-bedingten Indizierungsoperator in meinen Methoden, die Sie als Fragezeichen schreiben, gefolgt von einer öffnenden eckigen Klammer. Dies wird eine Sammlung indizieren oder in Bewunderung, Instanz, es sei denn, dass Instanzen nein, In diesem Fall, der Operator Kurzschlüsse auf einfach zurückkehrt. Nein. Sie sehen also, dass es zwei Versionen von dem keine bedingten Operator gibt, eine mit einem Punkt, der auf eine Feldeigenschaft oder Methoden oft Objektinstanz zugreift. Und eins mit den eckigen Klammern, die auf den Indexer zugreift. Oft Objekt. Instanz, Beide Operatoren Kurzschlüsse. Wenn die Instanzen nein, in welchem Fall sie sofort zurückgegeben. Jetzt, ohne den Ausdruck auf der rechten Seite des Operators auszuwerten. Denken Sie daran, dass er keine bedingte Indizierung ist. Der Operator unterscheidet nicht zwischen einer Instanz ohne Objekt. Vier. Eine gültige Objektinstanz, die zufällig einen Wert enthält. Nein. Wenn Sie zwischen diesen beiden unterscheiden müssen, müssen Sie den Test manuell durchführen. Ich werde Ihnen ein letztes Beispiel zeigen, wie Sie den No-bedingten Operator verwenden. Schauen Sie sich den folgenden Mantel an. Sie werden unsere alten Freunde ein wenig unter Ausdruck erkennen, die an eine generische Funktion Delegaten signiert werden. Diese Schicht nimmt also die Nummer fünf, quadriert sie durch Aufrufen der Operation an und schreibt dann das Ergebnis an die Steuerung. Aber was ist, wenn die Delikate nicht so sind? Jetzt? Die zweite Zeile Off-Codes wird eine keine Referenzausnahme auslösen, weil die delikate Nein ist. Also muss ich eine Überprüfung für Nein hinzufügen, bevor ich die Delegierten sicher aufrufen kann. Sie müssen immer nach Nein suchen, bevor Sie Delegaten aufrufen. Es gibt kein Herumkommen. Nun, bis jetzt ist es mit dem keinen bedingten Operator. Danke in das hier. Ich habe den keinen bedingten Operator verwendet, um die Aufrufmethoden für die Delegaten auf einem Kurzschluss sicher aufzurufen , um zu wissen, ob das delikate Nein ist. Dann habe ich den vertrauten, keinen Koaleszenzoperator verwendet , um einen Standardwert aus bereitzustellen. Null. Wenn das Ergebnis nein ist, lassen Sie mich das Programm ausführen und Sie sehen, dass ich den Wert Null wie erwartet bekomme. Dies ist also eine großartige Technik, um zu vermeiden, die Nullprüfung auszugeben, wenn Sie Delegaten aufgerufen haben . Verwenden Sie einfach den no-bedingten Operator, wenn Sie ihm mit den Aufrufmethoden folgen. Und wieder, bedenken Sie, dass ein keine bedingten Delegaten in Berufung nicht zwischen einem no Delegates oder einem Valence Delegaten unterscheidet . Das kommt nur zufällig zurück. Nein, wenn Sie zwischen diesen beiden unterscheiden müssen, müssen Sie den Test manuell durchführen. Okay, hier ist jemand von dem, was wir in diesem Vortrag gelernt haben. Der keine bedingten Operator gibt zurück. Nein. Wenn der Ausdruck auf der linken Seite des Bedieners kein Kurzschluss des Bedieners ist , werden zusätzliche Aufrufe in der Kühlkette auf der rechten Seite des Bedieners angezeigt. Wenn der Ausdruck auf der linken Seite des Operators nein ist, gibt der Operator einen kenntnisreichen Typ zurück. Wenn der Ausdruck auf der rechten Seite des Operators den Werttyp zurückgibt, unterstützt der Operator den Aufruf von Delegaten auf bedrohungssichere Weise. Der Operator ist sowohl als Mitglied eines Rasiermessers als auch als Indizierungsoperator verfügbar. 14. Auto: die nächsten Schulen er scharf sechs Feature Ich möchte Ihnen zeigen, ist die auch Eigenschaft initialisieren er erinnern Im vorherigen Abschnitt, als wir über Auto-Eigenschaften gesprochen haben, diskutierten wir, warum Sie Eigenschaften verwenden möchten, weil Sie auch einfach öffentliche -Feld wie dieses. Dies sind die gleichen Code-Snippets, die ich Ihnen in der Outer Properties Lecture gezeigt habe. Ich benutze hier einfach ein öffentliches Feld, aber beachte, dass ich auch Objekte initialisieren er hinzugefügt habe, so dass diese Personenklasse mit meinem Namen als Standard inst versehen wird . Jetzt haben Sie gelernt, dass es viele gute Gründe für die Verwendung von Out-of-Eigenschaften anstelle von öffentlichen Feldern gibt. Also sollte ich diesen Mantel wirklich benutzen. Aber jetzt habe ich ein Problem. Ich kann das automatische Eigenschaften-Backing-Feld nicht mehr mit dem Objekt initialisieren er so dass ich im Namen initialisieren muss, einen Standardkonstruktor hinzufügen und die Initialisierung dort durchführen muss. Das ist eine Menge zusätzlicher Code, nur für eine einfache Feldinitialisierung, die Sie dazu bringt einfach nur öffentliche Gefühle zu verwenden. Glücklicherweise kommt c scharfe sechs zur Rettung. Jetzt können Sie die Eigenschaft genau auf die gleiche Weise initialisieren, wie sie die Felder so initialisieren würde . Dies richtet eine Zeichenfolgeneigenschaft namens name ein, erzeugt auch einen Getter in der Mitte auf. Dann initialize sind die Backing-Felder mit meinem Namen. Nun, in einer einzigen Codezeile denken Sie vielleicht, dass Microsoft ein wenig über Bord mit Erkältungen aus der alten Generation geht . Aber sieh es dir so an. Es ist sehr schön, dass diese Syntax zum Initialisieren einer Eigenschaft jetzt genau die gleiche wie die Syntax ist . ein Feld zu initialisieren, Umein Feld zu initialisieren,müssen Sie sich die beliebige Regel, die Objekte initialisieren, nicht mehr merken. Er funktioniert nicht an Eigenschaften. Es gibt keinen Grund, warum sie es nicht tun sollten. Und jetzt hat Microsoft diese Beschränkung aufgehoben. In der Autoeigenschaften-Vorlesung aus dem vorherigen Abschnitt habe ich Ihnen gezeigt, wie Sie auf unveränderlichen Typ erstellen können. Dies ist eine Klasse, die Sie nur im Konstruktor initialisieren können und von Zen, ähm, ihre internen Zustände können sich nicht ändern. Ich implementierte den musikalischen Typ mit einer Out oder Eigenschaft mit nur und bekommen sie. Der C scharfe Compiler erkennt, dass ich auf unveränderlichen Typ erstellen möchte, generiert automatisch ein schreibgeschütztes Backing-Feld. Also, was ist, wenn ich möchte, dass Cody im Musiktyp mit einem Standardwert unterstützt. Nun, jetzt kannst du das einfach tun. Beachten Sie, dass ich die settle von der äußeren Eigenschaft entfernt habe, den Compiler zuerst, dass der Personentyp unveränderlich sein soll, so dass er eine schreibgeschützte Sicherungsfelder und einen öffentlichen Eigenschaftengetter generiert . Aber jetzt ist es auch initialisieren die Backing-Felder zu meinem Namen. Diese Kohlen scheinen Ihnen etwas seltsam zu sein, weil ich hier im Grunde eine Konstante aufrichte . Denken Sie jedoch daran, dass der Initialisierungsausdruck ein beliebiger statischer Ausdruck sein kann. Ondas komplex, wie Sie möchten, zum Beispiel, um die name-Eigenschaft auf den aktuellen gesperrten Benutzer zu initialisieren. Sie können das tun, und hier ist ein weiteres Beispiel, das ich auf unveränderlich kombinieren kann. Auch Eigenschaft mit faul Laden, um eine Fabrik zu erstellen. Instanzmethoden in einer einzigen Codezeile wie diesem. Dies richtet sich auf unveränderliche äußere Eigenschaft namens aktuelle, diese faule Instanz Yates zu einer neuen Person. Instanz, wenn es das erste Mal heißt Dies ist ein vollständig funktionierendes Factory-Instanzmuster mit faul Ladung. Okay, hier ist jemand von dem, was wir in diesem Vortrag gelernt haben. Sie können Objekte auffüllen, er zu alt-Eigenschaften initialisieren, indem Sie der Eigenschaftendeklaration mit dem Initialisierungsausdruck folgen , Sie können auch unveränderliche Alt-Eigenschaften initialisieren, die nur zusammen auch Eigenschaft initialisieren. Er kann komplexe Ausdrücke sein, die statische Methoden aufrufen. Sie können unveränderlich kombinieren. Außerdem Eigenschaften mit der faulen Klasse zwei Factory-Instanzmethoden erstellt. 15. Erklärungen: in dieser Vorlesung, möchte ich Ihnen Erklärung Ausdrücke zeigen, Verbraucher. Die folgenden Code-Snippets. Diese Schleife liest Zeichen von der Konsole, bis ich die Eingabetaste drücke, die while-Schleife testet das erste Zeichen auf Wenn es sich nicht um einen Zeilenvorschub , schreibt es Lee Zeichen auf die Konsole. Dann liest sich die Kälte. Das nächste Zeichen in der Schleife wiederholt Sie sehen oft so in C Sharp-Projekten aufgerufen, wobei die Lesemethoden zweimal in der Schleife wiederholt werden. Der Grund dafür ist, dass wir in einer einzigen Schleife Inspiration Zehe brauchen, den Charakter lesen, testen und mit der Konsole schreiben. Ich kann nicht mehrere Lese-Anweisungen im Schleifenkörper unterstützen, und ich muss das Zeichen lesen, bevor ich die Schleife betrete, um sicherzustellen, dass ich keine Zeilenfeeds namens Still Console Declaration Ausdrücke schreibe , machen es einfach nur fünf Diskotheken, und Sie sehen, dass sie sehr oft in anderen Sprachen, die sie unterstützen, Mike See oder Javascript auf. Die gute Nachricht ist, dass Microsoft jetzt Deklarationsausdrücke hinzugefügt hat, um Anzeigen zu sehen. Sechs. Also, jetzt kann ich die Verteidigung der Codes wie diese. Also, jetzt geschieht die Zuweisung innerhalb der while-Schleife, Überprüfen Sie den Mantel, weist die Eingabevariablen auf, dann überprüft sofort, ob die Variable nicht notiert. Enthalten Sie eine Zeile Feeds kalt, dann wird die Schleife fortgesetzt, indem Sie das Zeichen auf der Schleife wiederholt ausschreiben. Diese Änderung hat den Quellcode erheblich vereinfacht. Eine weitere coole Sache, die Sie mit seinen Deklarationsausdrücken tun können, ist Lazy Loads-Eigenschaften wenn sie erste Aufrufe sind. Erinnern Sie sich an den Vortrag über den No Coalescing Operator im vorherigen Abschnitt, wo ich eine atemberaubende Bauherrschaft mit faul Beladung erstellt habe? Der Graf sah so aus. Hier ist also die Kälte auf der rechten Seite neben dem bekannten Koaleszenzoperator ein Deklarationsausdruck . Diese Eigenschaft gibt also das Pufferfeld zurück. Wenn es nicht weiß. Wenn der Puffer jedoch nein ist, die Codes auf der Fluginitialisierung aus dem Puffer ausgeführt und dann mit einem Deklarationsausdruck zurückgegeben . Dies ist ein kompakter Weg weg. Schreiben von Lazy Loading-Eigenschaften auf den Quellcode ist jetzt sehr lesbar. Okay, lassen Sie mich zusammenfassen, was wir in dieser Vorlesungserklärung gelernt haben. Ausdrücke sind Zuweisungen, die sich wie Ausdrücke verhalten. Deklarationsausdrücke geben zurück, was sich auf der rechten Seite vom Zuweisungsoperator befindet. Sie können Deklarationsausdrücke verwenden, um doppelte Zuweisungen zu entfernen. Stellen Sie sicher, dass Methoden nur als solche bezeichnet werden, die Lazy Loading Eigenschaften implementiert. 16. Ausdrücke deines Körpers und Eigenschaften: im vorherigen Abschnitt habe ich Ihnen gezeigt, wie Sie Lunda-Ausdrücke verwenden. Dies sind kompakte Zeilenfunktionen, die Sie leicht einem Delegaten zuweisen können, zum Beispiel, wie diese. Dies richtet also einen Delegaten ein, der einen einzelnen Interviewparameter erwartet, da Interesse Ihren Wert zurückgibt , der das Quadrat vom angegebenen Parameter ist. Londoner Ausdrücke sind super praktische Möglichkeiten, um Compacts in Line-Funktionen auszudrücken und Link verwendet sie überall. Wenn Sie also neu sind, scharf zu sehen, fragen Sie sich vielleicht, warum Sie Londoner Ausdrücke nicht in regulären Funktionen wie diesen verwenden . Diese Syntax scheint vollkommen logisch zu sein. Ich richte hier eine Funktion namens Operation ein, die einen einzelnen Interviewparameter erwartet und den Quadratwert als Ganzzahl und anstelle vom Methodenkörper zurückgibt. Ich verwende einen Londoner Ausdruck Schwerter aus wie die Objekte initialisieren er, Syntax. Leider wird dieser Code den Bus nicht kompilieren. Microsoft hat diese Diskrepanz bei der Verwendung von Lambda-Ausdrücken erkannt, da jetzt in C scharf sechs Lambda-Ausdrücke in den regulären Funktionsdeklarationen verwendet werden können. Schauen Sie sich die folgenden kalten Schnüffler an. Jetzt kann ich die Klasse wie diese Benachrichtigung verwenden, die ich in Zeilenobjekten initialize er hier verwende, um die Personeninstanz in der rechten Zeile einzurichten. Methoden rufen die to String-Methoden auf, um die String-Darstellung vom Objekt zu erhalten, und dies wird dann meinen Lunda-Ausdruck aufrufen, der einfach den Vor- und Nachnamen miteinander verbindet. Lassen Sie mich die Codes ausführen. Überprüfe diese Geräusche. Da gehst du. Das ist mein Name. Also, das ist auf Ausdruck. Körperfunktion Auf den Punkt gebracht. Es ist einfach eine Funktionsdeklaration, in der Sie den Funktionskörper als Holzausdruck bereitstellen . Hier geht nichts Besonderes vor sich. Es ist einfach ein kompakterer Weg, um Funktionen in Ihrem Mantel zu deklarieren. Das Schöne an dieser Funktion ist, dass Sie Lambda-Ausdrücke überall verwenden können, sowohl in Delegatzuweisungen auf, wenn reguläre Funktionen deklariert werden. Sie müssen sich nicht mehr an willkürliche Regeln erinnern, wann sie erlaubt sind oder nicht, also deckt das Funktionen ab. Aber was ist mit Eigenschaften? Es wird Sie nicht überraschen, dass Sie auch Holzausdrücke verwenden können, wenn Sie Eigenschaften deklarieren. jedoch Es gibtjedocheine einfache Regel, die Sie befolgen müssen. Das Anwesen kann kein Zentrum haben. Jetzt macht dies durchaus Sinn. Wenn du darüber nachdenkst. Was würde passieren, wenn Sie auf Ausdruck, Körper, Eigenschaft setzen Körper, ? Es macht keinen Sinn. Also hier ist wieder meine Personenklasse. Aber jetzt mit einer zusätzlichen Eigenschaft, die überprüft, ob die Person einen Vornamen Hinweis hat, dass ich nicht angeben, ein bekommen sie wie wenn ich auf Alt-Eigenschaft einrichten. In dieser Syntax folgt der Lunda-Pfeil direkt dem Eigenschaftsnamen, ohne die Schlüsselwörter „gets“ oder „sets“ anzugeben . Der Compiler nimmt meinen Londoner Ausdruck auf Erstellt einen Eigenschaftengetter um diesen herum. Also, jetzt hat die Eigenschaft Vornamen-Überprüfungen. Wenn der Vorname aus der Person angegeben wurde. Wenn dies der Fall ist, gibt die Eigenschaft true zurück. Lassen Sie uns überprüfen, was passiert, wenn ich so kalt bin. Hier gehen wir und Sie können sehen, dass ich tatsächlich meinen Vornamen beim Einrichten der Personeninstanz angegeben habe. Okay, lassen Sie mich zusammenfassen, was wir in dieser Vorlesung Ausdruck Körperfunktionen gelernt haben, sind Funktionen, bei denen Sie die Implementierung als Londoner Ausdruck, Ausdruckskörper , Eigenschaften sind Eigenschaften, in denen Sie Bereitstellen der Implementierung als Lunda Ausdruck Ausdruck Ausdruck Körper Eigenschaften sind schreibgeschützt, so dass Sie nicht die Mitte 17. Du wirst mit dem Fangen warten und endlich: Meine nächste Shop-Sprachfunktion ist täuschend einfach. Wussten Sie, dass Sie nicht die Gewichtstastaturen in einem Fang oder schließlich, Aussagen verwenden konnten? Der Grund dafür ist, dass der Compiler einige ziemlich radikale Codekonvertierungen jedes Mal durchführt , wenn Sie das await-Schlüsselwort verwenden, und Microsoft konnte nicht herausfinden, wie diese kalte Transformation mit einem Exception-Handler Vergleichen Sie dies mit den Ertragsrückgabeanweisungen, die Sie zuvor gesehen haben Wenn Sie verwenden, würden Sie in einer Schleife zurückkehren. Der C scharfe Compiler reißt Ihre Codes von Teilen vollständig entfernt eine Schleife, verschiebt den Schleifenkörper in eine neue in Zählerklasse auf mischt die Karten herum, um eine Zustandsmaschine zu erzeugen . Die erwartete Tastaturen funktioniert auf die gleiche Weise Jedes Mal, wenn Sie warten, der Compiler führt eine signifikante Wieder Factoring vor Ihrer Küste, um sicherzustellen, dass die Nachricht Sie anrufen kann tatsächlich eine synchron von den kühleren Freunden Hände jede Spüle laufen. Medicals in einem Fang oder schließlich Block einfach nicht überlebt diesen Wieder Factoring-Prozess. Aber wie alle Dinge, die zu Beginn unmöglich erscheinen, setzten sich einige Microsoft-Ingenieure und dachten gut darüber nach. Sie haben tatsächlich einen Weg gefunden, es zu tun. Also, jetzt ist diese Einschränkung in C scharf sechs aufgehoben. Werfen Sie einen Blick auf die folgenden Codes, so dass diese Codes eine synchron meine Bissgröße anfordert. Sie hat Blawg geschärft, aber ich habe einen Tippfehler in der U. R L. Es heißt, Biss Größe scharf anstelle von Größe C scharf. Also, jetzt werden diese Codes eine Web-Ausnahme auslösen. Wenn ich es laufen, habe ich einen Versuch fangen Block um diese kalten Schnipsel Pfund gefaltet. Ich fange die Web-Ausnahme ab. Dann habe ich nachgeschaut. Der Fehler bei der Protokollierungsmethode sieht folgendermaßen aus. Diese Methoden protokollieren also einfach die Ausnahme in einer Datei. Als synchrone Operation behält diese Code-Snippets jedoch das asynchrone Methodenmuster während des gesamten Try und Cash-Blocks bei. Zu keinem Zeitpunkt , habe ich gezwungen,einen synchronen Aufruf zu tätigen, weil der Compiler es nicht unterstützt. Lassen Sie mich also zusammenfassen, was wir haben. Lawrence in dieser Vorlesung, wenn Sie verwenden erwartet den Compiler, die Reflektoren, Ihr Mantel, um sicherzustellen, dass die Methoden eine synchron ausführen können. Bis jetzt, diese Wieder Factoring in Notlage, dass Sie nicht ein Gewicht in einem Fang verwenden oder schließlich blockieren was in c scharf ist. Sechs. Dies ist nun möglich 18. Course: Herzlichen Glückwunsch. Sie haben den gesamten Kurs absolviert. Sie wurden jetzt mit erweiterten C Sharp Sprachfunktionen eingeführt. Ich habe Ihnen gezeigt, wie Sie Ihren Mantel mit der Vielzahl von erweiterten Funktionen wie Erweiterungsmethoden aufpeppen , benutzerdefinierte in Operatoren bekannt, koaleszierende und bedingte Operatoren Link Abfrageausdrücke Hände viel, viel mehr. Sie verfügen über die meisten der folgenden erweiterten Sprachfunktionen. Der bekannte Koaleszenz-Operator. Soft Type casts, Auto-Eigenschaften, Studieren Methoden, die Verwendung von Anweisungen, Objekte und Sammlung initialisieren er Link Equity Ausdrücke. Die ergibt, Rückgabe-Anweisungen, Erweiterungsmethoden. Andi Lunda Ausdrücke. Mit damals neuen Sprachfunktionen in C Sharp Version sechs waren Sie nun auch auf dem Laufenden. Sie haben den folgenden keine bedingten Operator gemeistert. Auch Eigenschaft initialisieren er Deklarationsausdrücke, Ausdruck, Körperfunktionen und Eigenschaften auf dem Yusof erwartet im Fang, und schließlich werden diese Fähigkeiten Ihnen helfen, besser zu schreiben, Reiniger und mehr verdichtet kalt. Wenn Sie einige interessante Einblicke entdecken, teilen Sie sie bitte im Kursdiskussionsforum für uns alle, um Good Bye zu genießen, und ich hoffe, wir treffen uns wieder in einem anderen Kurs