C# Für absolute Anfänger mit Spieldesign | Tutorial Genius | Skillshare
Suchen

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

C# Für absolute Anfänger mit Spieldesign

teacher avatar Tutorial Genius, Knowledge is power

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer 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
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      0-1. Ist dies der Kurs für dich und über den Kursleiter

      9:47

    • 2.

      0-2. Was ist C# im Spieldesign? und warum C# lernen?

      2:33

    • 3.

      0-3. Herunterladen und Installieren von Visual Studio (C#IDE)

      5:01

    • 4.

      1-1. Hello World (Mr. Beast-Logo)

      12:23

    • 5.

      1-2. Variablen

      6:42

    • 6.

      1-3. Datentypen

      9:39

    • 7.

      1-4. C# - Eine stark statisch getippte Sprache

      2:21

    • 8.

      1-5. Arbeiten mit Strings und Teilstrings

      10:50

    • 9.

      1-6. Arbeiten mit Numbers

      12:04

    • 10.

      1-7. Benutzereingaben erhalten

      3:02

    • 11.

      1-8. Übung - Das Zahlenmultiplikator-Spiel

      5:22

    • 12.

      2-1. Methoden

      4:45

    • 13.

      2-2. Methodenparameter

      7:26

    • 14.

      2-3. Methoden-Rückgaben

      5:01

    • 15.

      2-4. Methoden-Überladen

      3:56

    • 16.

      3. Kommentare und XML-Zusammenfassungs-Tags

      9:11

    • 17.

      4-1. If- und Else-Statements

      8:08

    • 18.

      4-2. Else-If-Statements

      3:19

    • 19.

      4-3. Operatoren von Equality und Inequality

      1:37

    • 20.

      4-4. Vergleichsoperatoren

      3:56

    • 21.

      4-5. Boolesche Operatoren

      5:48

    • 22.

      4-6. ÜBUNG - Baue ein Taschenrechnerspiel

      7:16

    • 23.

      4-7. Switch-Statements

      7:14

    • 24.

      4-8. Bedingte Operatoren

      4:10

    • 25.

      5. Arrays

      8:33

    • 26.

      6-1. While-Loops

      9:23

    • 27.

      6-2. Do While Loops

      2:51

    • 28.

      6-3. For Loops

      4:30

    • 29.

      6-4. For Loops vs. While Loops

      2:06

    • 30.

      6-5. Foreach Loops

      4:20

    • 31.

      6-6. ÜBUNG - Zeichne einen Würfel

      7:22

    • 32.

      7-1. Das Break-Statement

      5:39

    • 33.

      7-2. Das continue-Statement

      4:20

    • 34.

      8-1. Ausnahmebehandlung (try, catch, finally)

      14:07

    • 35.

      8-2. 2D-, 3D- und mehrdimensionale Arrays

      5:33

    • 36.

      8-3. ÜBUNG - Schach - Finde das Queen-Spiel

      6:09

    • 37.

      8-4. Listen

      6:35

    • 38.

      9-1. O-O, Klassen und Objekte

      16:12

    • 39.

      9-2. Konstrukteure

      9:01

    • 40.

      9-3. Objektmethoden

      7:43

    • 41.

      9-4. Zugriffsmodifikatoren (öffentlich, privat usw.)

      13:40

    • 42.

      9-5. Eigenschaften

      17:03

    • 43.

      9-6. Vererbung

      9:04

    • 44.

      9-7. Methoden-Overriding (Polymorphismus)

      6:29

    • 45.

      9-8. Mehrstufige Vererbung

      5:39

    • 46.

      9-9. Das versiegelte Keyword

      4:06

    • 47.

      9-10. Abstrakt-Kurse und abstrakte Methoden

      9:29

    • 48.

      9-11. Das Keyword dieses Keyword

      4:56

    • 49.

      9-12. Das base-Keyword und Basisklassenkonstruktoren

      7:00

    • 50.

      9-13. Schnittstellen

      16:04

    • 51.

      9-14. O-O-Zusammenfassung

      6:31

    • 52.

      10-1. ÜBUNG - Pyramiden zeichnen

      21:31

    • 53.

      10-2. Lösungen, mehrere Projekte und Namespaces

      17:34

    • 54.

      11-1. Haltepunkte und Code-Stepping

      29:30

    • 55.

      11-2. Sofortfenster

      12:56

    • 56.

      11-3. Einheimische und Autos Windows

      8:55

    • 57.

      11-4. Uhren-Windows und Quick Watch

      6:40

    • 58.

      12-1. Der geschützte Access Modifier

      8:17

    • 59.

      12-2. Das statische Schlüsselwort

      12:25

    • 60.

      13-1. Das readonly-Keyword

      7:43

    • 61.

      13-2. Das const Keyword

      9:07

    • 62.

      14-1. Stack und Heap-Speicher

      15:56

    • 63.

      14-2. Methodenparameter: Weitergeben nach Wert

      12:57

    • 64.

      14-3. Methodenparameter – Passing by Reference (Das ref-Schlüsselwort)

      6:34

    • 65.

      15. Das struct-Schlüsselwort

      11:53

    • 66.

      16-1. Der Objekt-Datentyp - Boxen und Unboxing

      11:09

    • 67.

      16-2. Das dynamische Keyword und die dynamische Typprüfung

      23:12

    • 68.

      16-3. Das var Keyword und Type-Inference

      17:38

    • 69.

      16-4. Anonyme Typen

      9:06

    • 70.

      17-1. Das null-Schlüsselwort

      9:00

    • 71.

      17-2. Nullable-Werttypen

      6:48

    • 72.

      17-3. Die Null-Koalescing-Operatoren

      12:12

    • 73.

      18-1. Benannte und optionale Parameter

      9:28

    • 74.

      18-2. The out Keyword

      6:13

    • 75.

      18-3. The in Keyword

      2:35

    • 76.

      18-4. Das params-Schlüsselwort

      4:07

    • 77.

      19-1. Aufzählungen - Der enum-Typ

      13:39

    • 78.

      19-2. Rekursion und Dateibehandlung (File IO / System.IO)

      37:01

    • 79.

      20-1. Abschließendes Projekt (Top Trumps Simulatorspiel)

      10:40

    • 80.

      20-2. Kurszusammenfassung (Wo gehe ich von hier aus?)

      9:18

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

259

Teilnehmer:innen

--

Projekt

Über diesen Kurs

C# Für absolute Anfänger mit Spieldesign wurde für absolute Anfänger entwickelt!

Es setzt ZERO Erfahrung in jeder Art von Programmierung voraus. Wenn du mit der Programmierung in C# beginnen möchtest, dann hast du den richtigen Ort gefunden!

In diesem Kurs lernen wir die Grundlagen von C# und bauen eine solide Programmiergrundlage, bevor wir tief in das Spieldesign eintauchen. Wir behandeln einige grundlegende Arbeitsbeispiele und einige Minispiele während dieser Serie. Spiel-Engines wie Unity verwenden ein C#-Backend, wenn du also mit Unity in Stufe 2 beginnst, können wir sofort loslegen! Am Ende dieses Kurses wird es eine lustige kleine Gaming-Challenge als abschließendes Projekt geben.

Im Gegensatz zu den meisten anderen Kursen verwendet dieser Kurs die neuesten Versionen von C# (Version 11) und auch Visual Studio 2022 (Neueste Version sogar 2023).

Egal, ob du C#-Game-Design lernen möchtest für: eine Jobmöglichkeit, ein Hobby, eine Ergänzung für die Universität oder das College usw., dann ist dieser Kurs perfekt dafür!

Möchtest du Videospiele in Unity entwickeln? Wusstest du, dass Unity C# hinter den Kulissen verwendet? Dieser Kurs gibt dir eine starke C#-Grundlage für die Spieleentwicklung in Unity.

Du lernst das gleiche (und mehr) C#-Programmierwissen als ein Universitätsstudent. Ich weiß es, weil ich selbst an der Universität war! Ich unterrichte seit 2003 Softwareentwicklung, also jetzt nur noch über 20 Jahre!

Du beginnst damit, die Kernfunktionen der Programmierung zu lernen: Variablen, Methoden, Schleifen, Bedingungen und Datentypen. Du wirst dann über Object Orientated Programming (O-O) lernen: Klassen und Objekte, Vererbung, Polymorphismus, Abstraktion, Verkapselung usw. und dann zu fortgeschrittenen Funktionen von C# und the . NET-Framework, wie: Dateihandling, Rekursion, Umgang mit Ausnahmen (Fehlern), Überladen von Methoden, Debugging und vieles mehr!!


Am Ende dieses Kurses hast du eine wirklich solide Grundlage aufgebaut, die nicht nur aus C#, sondern auch aus Programmierkonzepten, Programmierkenntnissen und typischen branchenüblichen Programmierpraktiken besteht, wenn du dies auf das Spieledesign anwendest.

Der gesamte Quellcode für die Beispielprojekte ist enthalten und steht zum Download bereit.

Dieser Kurs soll dich die gesamte Zeit über für das Engagement ‑ halten. Es enthält viele Programmierbeispiele und Übungen, damit du dein Wissen in allem testen kannst, was du gelernt hast.

Das Abschlussprojekt ist eine großartige Möglichkeit, dein Wissen und deine Fähigkeiten aus allem zu testen, was du gelernt hast, indem du diesen Kurs besuchst! Wir werden ein cooles kleines Spiel erstellen: A Top Trumps Simulator!

Triff deine:n Kursleiter:in

Teacher Profile Image

Tutorial Genius

Knowledge is power

Kursleiter:in
Level: Beginner

Kursbewertung

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

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 auf 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. 0-1. Ist dies der Kurs für dich und über den Kursleiter: Also heiße alle willkommen. Willkommen zu meinem C Sharp-Video-Tutorial-Kurs. Hier habe ich ungefähr 11 Stunden Filmmaterial Ihnen alles von den absoluten Grundlagen her beibringt. Dies setzt voraus, dass Sie überhaupt keine Programmierkenntnisse haben. Und am Ende werden Sie dasselbe, wenn nicht sogar mehr Wissen über Programmierung und C Sharp haben wenn nicht sogar mehr Wissen als ein typischer Universitätsstudent. Wenn Sie also C Sharp als Hobby lernen möchten , ist das kein Problem. Das wirst du aus diesem Kurs herausholen. Wenn Sie jedoch im Anschluss an diesen Kurs einen Job oder möglicherweise eine Karriere anstreben, dann werden Sie auch damit kein Problem haben . Und für diejenigen unter Ihnen , die vielleicht eine Auffrischung von C Sharp oder eine Auffrischung der generischen Programmierung wünschen , dann ist dieser Kurs auch gut dafür geeignet Ist dieser Shop-Video-Tutorial-Kurs also gut für Sie? Nun, möchtest du Einkaufen lernen? Dann lautet die Antwort ja. Aber vielleicht ist eine bessere Frage, warum ich diesen Kurs allen anderen vorziehen sollte? Nun, das Geheimnis des Lernens ist in erster Linie der Lehrer, und so vermittelt der Lehrer die Informationen. Und Nummer zwei, der Lernprozess. Ist der Kurs fesselnd? Ja, ist es. Ist es langweilig? Nein, gewiss nicht. Ist es verwirrend? Nein, weil ich Prinzipien nicht nur auf eine, sondern vielleicht auf zwei oder drei verschiedene Arten erkläre . Am Ende werden Sie also alle Techniken, die ich vollständig verstehen Ihnen in diesem Kurs beibringe, vollständig verstehen. Und das Tempo, ist es schnell? Nein, es ist überhaupt nicht schnelllebig. Dieser Kurs ist für absolute Anfänger konzipiert. Das Tempo ist also bestenfalls langsam. Für wen ist dieser Kurs gedacht? Dieser Kurs ist für absolute Anfänger. Es wird davon ausgegangen, dass Sie keine Programmierkenntnisse und keine Kenntnisse in der Softwareentwicklung haben keine Kenntnisse in der Softwareentwicklung und mit der C-Sharp-Programmierung beginnen möchten. Vielleicht möchtest du ein paar Spiele in Unity machen. Vielleicht möchten Sie Softwareanwendungen, mobile Apps und Websites im C-Shop entwickeln . All das ist möglich, diesen Video-Tutorial-Kurs ansehen Dieser Kurs setzt voraus, dass Sie wissen, wie man einen Computer benutzt. Im Allgemeinen wissen Sie, dass Sie eine Maus bewegen, vielleicht Ihre E-Mails abrufen und eine Datei herunterladen Aber der Punkt ist, es setzt überhaupt keine Programmierkenntnisse voraus Also die Lernerfahrung, naja, in meiner Freizeit mag ich Psychologie, also verstehe ich, wie der menschliche Geist funktioniert, besonders wenn es darum geht, Informationen zu lernen und zu behalten. Aber vielleicht ein neues und entmutigendes Thema. Das bringt mich also zum nächsten Punkt, dem Tempo. Wie ist das Tempo des Kurses? Nun, Programmieren hat viele große und komplizierte technische Wörter Aber keine Sorge, ich führe technische Begriffe im Laufe des Kurses nur sehr langsam ein. Viele Lehrer verwenden komplizierte Wörter sofort, was zu großer Verwirrung führt und die Fähigkeit beeinträchtigt, das Thema im Griff zu behalten Ich halte das für einen sehr wichtigen Schritt, um Ihren größten Feind, die Informationsflut, zu verhindern die Informationsflut Machen Sie sich also keine Sorgen, Sie werden die komplizierten und technischen Wörter lernen , aber nicht vor dem eigentlichen Thema. Ich werde es langsam einführen, damit die Lernerfahrung sehr angenehm ist. Im Laufe des Kurses werde ich also langsam damit beginnen, die richtigen Branchenbegriffe und Fachjargon einzuführen , wenn mir die Videos aus diesem Ich schätze es, dass Sie nicht da sind, um sofort Fragen zu stellen und direktes Feedback zu erhalten Also was ich mache, ich erkläre Themen auf verschiedene Arten, nicht nur auf eine Art, und so können Sie das jeweilige Thema vollständig verstehen. Meiner Meinung nach ist diese Lernmethode weitaus besser als Videos zu machen, in denen Sie nicht genügend Informationen bereitstellen. Wenn nicht genügend Informationen zur Verfügung gestellt werden, fühlt man sich verloren und frustriert und es ist kein Lehrer da, der Fragen stellt Das wirst du in meinem Kurs nicht erleben. Und das garantiere ich, denn auch wenn ich ein kompliziertes Thema zum Beispiel auf zahlreiche verschiedene Arten erklärt zahlreiche verschiedene Arten habe, können Sie mir bei Fragen gerne eine Nachricht oder einen Kommentar hinterlassen. Und ich freue mich sehr, auf alle Fragen oder Bedenken einzugehen, die Sie jedem Zeitpunkt während dieses Kurses haben. Und zu guter Letzt: Wenn ich Ihnen ein Programmierprinzip beibringe, bringe ich Ihnen nicht nur die Informationen bei. Ich erkläre sogar, warum sie nützlich sind, warum man sie im täglichen Leben anwendet und warum es bei der Entwicklung von C++ wichtig ist , dieses spezielle Prinzip anzuwenden. Darin unterscheidet sich mein Kurs von vielen anderen Kursen. Man lernt das Wie und das Was, aber auch das Warum, was sehr wichtig ist. Engagement und Motivation sind einer der größten Hindernisse beim Erlernen neuer Informationen Beides geht Hand in Hand. Also was ich mache, ich verwende lustige Beispiele. Außerdem verwende ich auch Trendbeispiele , um die Dinge interessant zu halten Ich verstehe, wie es sich anfühlt, die Motivation und das Engagement zu verlieren und sich ein bisschen zu langweilen, wenn man ein neues Thema lernt Deshalb versuche ich, die Dinge frisch und aktuell zu halten , damit Sie nie die Motivation verlieren. Und du wirst dich immer mit den aktuellen Themen beschäftigen. Was werde ich also davon haben, diesen Kurs zu lernen? Warum sollte ich von dir lernen? Was ist das Endergebnis? Was kann ich erreichen? Nun, sehr gute Fragen. Ich werde dir alles beibringen, was du über Shop wissen musst, aber nicht nur über C-Shop-Programmierung im Allgemeinen. Die Tools, Techniken und Prinzipien, die dich zu einem guten Entwickler, einem guten Programmierer machen , vor allem im Shop Und es wird ähnlich, wenn nicht sogar besser, sein als ein Student mit Hochschulabschluss Wie garantiere ich diese kühnen Behauptungen? Nun, ich war an der Universität, ich war ganze vier Jahre dort. Und ich kann garantieren , dass der Inhalt dieses Kurses genau dem entspricht, was ich an der Universität gelernt habe. Aber nicht nur das, sondern mehr. Und ich bringe Ihnen auch die Tools, Techniken und Best Practices bei, die ich mir auch in der Industrie angeeignet habe , also beruflich. Egal, ob Sie eine Universität besuchen oder nicht, Sie haben einen Vorteil, weil Sie nicht in einem Klassenzimmer voller Menschen sitzen, in dem viele Ablenkungen herrschen Dies ist eine einzigartige Eins-zu-Eins-Erfahrung. Abschließend möchte ich zusammenfassen, dass es egal ist, welcher Lerntyp Sie sind, ob Sie ein visueller Lerner sind oder kein visueller Lerner, Sie können sich diesen Kurs ansehen, indem Sie zum Beispiel auf einem Stuhl sitzen und eine Pizza essen Wenn Sie jedoch interaktiver sein möchten, stelle ich die vollständigen Projektdateien zusammen mit diesem Kurs zur Verfügung , den gesamten Quellcode, den Wenn Sie also an Ihrem Computer mitverfolgen möchten , können Sie das tun. Überhaupt keine Probleme. Dieser Kurs bietet mehrere Lernmöglichkeiten für verschiedene Lerntypen Also über mich, wer bin ich, wie ist mein Name? Also, ich bin Sean und es ist schön, euch alle kennen zu lernen. Ich bin ein professioneller, selbständiger Softwareingenieur. Aber nicht nur das, ich unterrichte Softwareentwicklung und Programmierung. Ich arbeite mit vielen verschiedenen Programmiersprachen und auch mit vielen verschiedenen Architekturen Aber weil ich regelmäßig Schüler unterrichte, habe ich nicht die Fähigkeit verloren mit neuen Lernenden zu kommunizieren, insbesondere auf Anfängerniveau Ich habe jetzt im Jahr 2007 mein Studium abgeschlossen. Ich habe über 20 Jahre Berufserfahrung in der Softwareentwicklung. Ich habe sogar neben meinem Studium in demselben Bereich gearbeitet . Ich unterrichte jetzt seit 2003 Programmieren. Vor langer Zeit nutzte ich es also, um mein Studium an der Universität zu finanzieren , bevor es YouTube überhaupt gab. Ich zeige Ihnen jetzt meine sehr alte Website ich Video-Tutorial-Kurse in Visual Basic, sechs C plus Java, Direct X und verschiedenen Dingen erstellt habe sechs C plus Java, . Sie können also sehen, dass ich jetzt vielen Leuten Programmieren beigebracht habe. Und sie kommen immer später zu mir zurück, weißt du, zehn Jahre später, 15 Jahre später. Und erzählen Sie mir alles über ihre Erfolgsgeschichten, die Unternehmen, in denen sie gerade arbeiten, und die Projekte, an denen sie beteiligt waren. Es ist also wirklich gesund und interessant, diese Erfolgsgeschichten von meinen früheren Studenten zu hören Und ich liebe es, wenn Schüler zu mir zurückkehren und mir von ihren Erfolgsgeschichten erzählen und wie sich ihr Leben verändert hat Lernen, Programmieren, das ist wirklich interessant und das Beste am Unterrichten. Ich bin jetzt selbständig, habe aber in der Vergangenheit für viele Unternehmen gearbeitet. Kleine und auch große Unternehmen, vielleicht haben Sie von einigen gehört. Ich habe für The Guardian gearbeitet , eine Zeitungsfirma mit Sitz im Zentrum Londons. Ich habe für das britische Verteidigungsministerium gearbeitet, wo wir an CAD-Software zur Modellierung ihrer Überwasserschiffe und U-Boote gearbeitet Modellierung ihrer Überwasserschiffe und U-Boote Ich habe für Pfizer gearbeitet, ein Pharmaunternehmen, von dem Sie in letzter Zeit sicher alle gehört haben Aber als ich dort gearbeitet habe, haben nicht viele Leute von diesem Unternehmen gehört Und ich habe für verschiedene kleine Agenturen gearbeitet , von denen Sie vielleicht noch nie gehört haben. So kann ich meine Erfahrungen aus der Arbeit in kleinen Teams und auch in sehr großen Teams teilen. Und Beispiele für diese beiden unterschiedlichen Arten von Erfahrungen werde ich in diesem Kurs ebenfalls vorstellen. Falls Sie sich also fragen, woher mein Akzent kommt, nun, ich wurde in Großbritannien geboren und meine Programmierabenteuer haben mich um die ganze Welt geführt. Ich bin mit 25 nach Amerika gezogen und habe dort die Staatsbürgerschaft bekommen. Und jetzt lebe ich in Südamerika. Aber eine Sache, die konstant geblieben ist , und nicht etwa mein Zuhause und mein Akzent, ist, dass ich schon immer Programmieren unterrichtet habe und dass ich immer Softwareentwicklung gemacht habe. Also genug von mir. Lass uns jetzt über C Sharp sprechen. 2. 0-3. Was ist C# im Spieldesign? und Warum C# lernen?: Also, was ist C Sharp? Nun, C Sharp ist eine sogenannte objektorientierte Programmiersprache. Und mach dir keine Sorgen, darüber werden wir später sprechen. Es wurde von Microsoft erstellt und läuft auf dem sogenannten.net Framework C Sharp hat seine Wurzeln in der C-Familie. Ich weiß also nicht, ob Sie von C oder C Plus Plus gehört haben, aber es ist diesen Sprachen ziemlich ähnlich, und aus diesem Grund wurde es entwickelt. Es ist populären Sprachen wie C plus Plus und Java sehr ähnlich . Und die erste Version von C Sharp wurde im Jahr 2002 veröffentlicht. Jetzt ist es also über 20 Jahre alt. Und die neueste Version zum Zeitpunkt der Dreharbeiten ist C Sharp Version 11. Die C Sharp-Sprache entwickelt sich also langsam so ziemlich wie alles andere im Leben Warum sollte ich also C Sharp lernen? Wofür wird es verwendet? Nun, Sie können mobile Anwendungen, Desktop-Anwendungen, Webanwendungen wie Websites, Videospiele, Virtual-Reality-Spiele , maschinelles Lernen, Software, Datenbankanwendungen und vieles mehr erstellen Desktop-Anwendungen, Webanwendungen wie Websites, Videospiele, Virtual-Reality-Spiele , maschinelles Lernen, . Es ist eine der beliebtesten Programmiersprachen der Welt. Und deshalb ist es wirklich gut, eine Sprache wie C Sharp zu lernen , weil es mehr Beschäftigungsmöglichkeiten geben wird und Sie mehr Möglichkeiten haben, Ihr Wissen anzuwenden. Sie ist leicht zu erlernen und einfach zu benutzen. Es hat eine enorme Unterstützung durch die Community. Wenn Sie C oder C plus plus oder Java bereits kennen oder sie vielleicht in Zukunft lernen möchten, dann sind sie sich sehr ähnlich. Die Prinzipien, die ich Ihnen in diesem Kurs beibringe, können Sie auf C plus plus und Java anwenden , wenn Sie in Zukunft eine neue Sprache lernen möchten. Eines der derzeit angesagtesten Dinge ist die Entwicklung von Videospielen in einem Softwareentwicklungspaket namens Unity Unity unterstützt C Sharp hinter den Kulissen. Wenn Sie möchten, dass Ihr Videospiel Dinge tut, dass sich Ihre Charaktere bewegen, dann können Sie C Sharp verwenden, um dies zu erreichen. Im Moment lernen die Leute also mehr denn je Scharf, nur damit sie Videospiele in Unity erstellen können. Es gibt also eine Menge Gründe, C Sharp zu lernen und warum Sie C Sharp besser lernen sollten als vielleicht andere Sprachen. Hoffentlich habe ich Sie durch meine bisherigen Erklärungen davon überzeugt, Ihre Reise damit zu beginnen C Sharp zu lernen und vielleicht ein professioneller Programmierer oder sogar ein Hobbyprogrammierer Lassen Sie uns nun unsere Abenteuer in C Sharp beginnen und die Tools herunterladen, die wir für den Einstieg benötigen 3. 0-4. Herunterladen und Installieren von Visual Studio (C#IDE): Wie fangen wir an, in C Sharp zu codieren? Nun, der einfachste Weg, um loszulegen , ist die Verwendung einer sogenannten IDE. Dies steht für Integrated Development Environment. Und die Umgebung, die wir verwenden werden , heißt Visual Studio. Wir werden also nicht in Notepad oder so etwas Gruseliges programmieren Notepad oder so etwas Gruseliges Wir werden benutzerfreundliche Tools für Anfänger verwenden, die von Microsoft bereitgestellt werden Und nicht nur das, sie sind kostenlos. Lassen Sie mich Ihnen zeigen , wie Sie Visual Studio herunterladen und damit beginnen können. Lassen Sie uns jetzt mit dem Herunterladen von Visual Studio beginnen. Wenn wir zu Google kommen und einfach Visual Studio Community eingeben, können wir hier auf das erste Ergebnis klicken. Die neueste Version zum Zeitpunkt der Dreharbeiten ist Visual Studio 2022. Aber selbst wenn Sie eine frühere oder eine neuere Version haben , viele der Techniken, die wir in diesem Kurs behandeln werden , funktionieren. Keine Probleme. Also werden wir hier auf diesen ersten Link klicken. Hier können wir die IDE gleich hier herunterladen , wenn Sie beispielsweise einen Apple Mac verwenden. Dann kannst du hier oben auf diesen Button klicken. Und dann gibt es Visual Studio in drei verschiedenen Varianten. Wir haben hier den für Windows, den für Macos und auch einen leichten für Mac, Windows und Linux. Abhängig von Ihrem Betriebssystem sollten Sie also ziemlich gut abgesichert sein. Aber ich verwende einen Windows-Computer und das passt nicht wirklich zusammen. Wenn Sie einen Mac verwenden, können Sie den Tutorials trotzdem folgen, kein Problem. Also werde ich hier auf diesen Download-Link klicken und dann wird Visual Studio mit dem Herunterladen beginnen. Es ist nur eine 34-Megabyte-Datei, also ist sie sehr klein, aber alles wird in der Setup-Datei selbst heruntergeladen in der Setup-Datei Kurz bevor wir Visual Studio installieren, möchte ich eine Sache erwähnen Visual Studio ist nicht nur an die Entwicklung von C Sharp gebunden. In Visual Studio können Sie so viel tun. Visual Studio arbeitet mit HTML, CSS, Javascript. Sie können sogar mobile Anwendungen, Php, Python, Spot, Net erstellen . All diese verschiedenen Dinge, Tools, Technologien und Programmiersprachen können Sie in Visual Studio ausführen. Wenn Sie also bereits eine andere Sprache beherrschen oder vielleicht in Zukunft andere Sprachen ausprobieren möchten, nachdem Sie sich C Sharp angesehen haben, dann wird Visual Studio Sie auch bei dann wird Visual Studio diesen Bemühungen unterstützen Es ist also eine sehr leistungsstarke Software, und auch hier ist sie kostenlos Lassen Sie uns die Visual Studio-Setup-Datei öffnen, die wir gerade heruntergeladen haben und mit der Installation von Visual Studio erhalten. Klicken wir also hier auf Weiter. Jetzt bereitet es nur das Installationsprogramm vor und lädt eine etwas größere Datei herunter. Jetzt ist dies das Fenster , das Sie sehen werden, sobald das Setup initialisiert ist Also viele verschiedene Dinge, die Sie hier für die Zwecke dieses Kurses tun können hier für die Zwecke dieses Kurses tun Das einzige, womit wir arbeiten werden, ist C Sharp. Das Einzige, was wir brauchen, ist das.net-Desktop-Environment genau hier. Sie klicken also einfach hier auf dieses Feld und dann können wir mit der Installation dieser Komponenten beginnen. Sonst noch etwas? Dies ist völlig optional, und es liegt an Ihnen, wir haben verschiedene Dinge für die Entwicklung von Websites in Aspet Wir haben auch Azure Node, Python. Nochmals, Desktop- und Mobilgeräte, Sachen in C Plus Plus. Und Sie können Unity sogar über das Visual Studio-Installationsprogramm und verschiedene Datenkomponenten installieren. Es gibt also viel zu tun, viel zu installieren und viel zu lernen, was das Programmieren und Arbeiten mit Visual Studio angeht . Aber was wir brauchen, ist nur diese einfache Box hier. Wenn Sie eine andere Sprache sprechen oder mit einer anderen Sprache besser vertraut sind, können Sie sie hier auswählen. Das ist überhaupt kein Problem. Wenn wir jetzt hierher kommen, ist das alles, was hier installiert werden wird. Um ehrlich zu sein, glaube ich nicht, dass wir Live-Share-Modelbuilder oder Blend brauchen . Es wird nur unsere Anlage kaputt machen. Aber ich denke, das ist eine gute Einrichtung für den Anfang und sie wird dir alles geben, was du brauchst, um diesem Kurs zu folgen , und noch etwas mehr. Also, was wir jetzt tun werden, ist einfach auf diese Installationsschaltfläche zu klicken. Hier haben Sie ein paar Optionen. Sie können alles herunterladen und dann installieren, oder Sie können es während des Herunterladens installieren. Das ist nicht wirklich wichtig, es hängt nur von Ihren Vorlieben und vielleicht von Ihrer Internetverbindung ab. Klicken wir also auf die Schaltfläche Installieren und legen Sie los. Die Installation kann einige Minuten dauern, aber sobald Sie diesen Bildschirm hier sehen, bedeutet das, dass Visual Studio erfolgreich installiert wurde. Sie verwenden, befinden sich möglicherweise auch Symbole auf Ihrem Desktop oder in Ihrem Programmmenü Je nachdem, welches Betriebssystem Sie verwenden, befinden sich möglicherweise auch Symbole auf Ihrem Desktop oder in Ihrem Programmmenü. Aber im Grunde genommen haben Sie Visual Studio installiert, sobald es in dieser Liste erscheint . Was wir tun können, wir können jetzt einfach auf diese Schaltfläche klicken und Visual Studio starten und dann mit unserer Softwareentwicklung in C. Sharp beginnen . 4. 1-1. Hello World (Mr. Beast-Logo): In dieser Lektion werden wir eine sehr einfache Software erstellen, eine sehr einfache Software die als Konsolenanwendung bezeichnet wird. Sie zeigt jedem, der unsere Software öffnet, das Mr. Beast-Logo an. Lass uns jetzt loslegen. Visual Studio wurde frisch installiert. Wir werden unsere allererste Softwareanwendung erstellen . Es wird unsere allererste sein. Es wird anfängerfreundlich sein und wir werden es von oben angehen. Lass uns gehen. Sobald Visual Studio geöffnet ist, klicken wir auf Datei, Neues Projekt. Dann haben wir ein Fenster , das dem ähnelt. Wenn Sie Visual Studio 2022 nicht haben, ist das die Version, die ich gerade verwende. Es kann etwas anders aussehen. Möglicherweise werden Einstellungen an verschiedenen Stellen angezeigt. Die Dinge könnten etwas anders genannt werden. Aber das allgemeine Prinzip gilt immer noch. Jetzt, unsere allererste Softwareanwendung, wird es eine Konsolen-App sein. Und das wird durch diese Projektvorlage hier dargestellt. Was eine Konsolenanwendung ist, sie ist wie ein schwarzes Fenster. Es ist nur Text drauf. Und der Grund, warum ich das benutze, ist , dass es sehr anfängerfreundlich ist. Es gibt keine Schaltflächen, Listen, Bilder oder irgendetwas Kompliziertes. Das ist sehr anfängerfreundlich und deshalb verwende ich eine Konsolenanwendung. Wenn Sie das nicht wirklich in dieser Liste sehen, können Sie hier danach suchen, indem Sie Konsolen-App oder Konsolenanwendung eingeben . Und Sie können sehen, dass all diese Vorlagen hier geladen werden. Wir wollen das, weil wir in C Sharp schreiben. Es wird tatsächlich unter Linux, Mac, Windows laufen. Wir werden diesen verwenden, wir werden auf Weiter klicken. Wir können es nennen, wie wir wollen. Es liegt an dir. Sie können es so lassen oder etwas Beschreibenderes wählen Also nennen wir es das erste Programm, den Standort. Sie können ein Verzeichnis wählen, in dem Sie alle Ihre Projektdateien speichern möchten. Das liegt an dir. Also lass uns auf Weiter klicken. Nun zu diesem Framework, ich werde in einem späteren Tutorial über alles über Frameworks sprechen . Ich möchte es sehr einfach halten, diese Liste könnte 4567 enthalten, alles verschiedene Zahlen Wir lassen es einfach bei sieben stehen. Wenn deine vier in Ordnung sind, wird es trotzdem funktionieren. Wenn Sie hier dieses Kästchen mit der Aufschrift „ Verwenden Sie keine Anweisungen auf oberster Ebene“ sehen. Stellen Sie sicher, dass es aktiviert ist. Das ist sehr wichtig. Lass uns auf Erstellen klicken. Und das sehen wir genau hier. Jetzt hat Visual Studio tatsächlich all diesen Code für uns zur Verfügung gestellt, und der Grund, warum sie das tun, ist, ihn benutzerfreundlicher zu machen , damit wir loslegen können. Als Erstbenutzer haben Sie wahrscheinlich keine Ahnung, was das bedeutet. Das ist nicht wirklich wichtig. All diese Zeilen hier werde ich in einem späteren Tutorial behandeln und du wirst lernen, was sie bedeuten rechtzeitig lernen, was sie bedeuten, um diesen Anfänger freundlich zu halten. Die einzige Zeile, mit der Sie sich momentan befassen müssen, ist diese hier in diesem Tutorial. Wir werden unseren gesamten Code zwischen dieser geschweiften Klammer hier und dieser hier platzieren , alles in der Mitte Und wir können hier mehr Zeilen einfügen, wenn wir wollen. In diesem Tutorial sprechen wir hier nur über diesen Abschnitt. Mach dir darüber keine Sorgen. Lassen Sie uns all diese Komplexität entfernen. Lassen Sie uns darüber sprechen. Was macht es? Auf der rechten Seite der Konsole steht Hello World. Um dieses Programm tatsächlich zu testen und auszuführen, muss ich über einen sogenannten Compiler sprechen Nun, Visual Studio, hat einen eingebauten Compiler, weil wir C Sharp schreiben Da ist ein Sharp-Compiler drin. Was der C Sharp-Compiler macht, er nimmt unseren gesamten Code hier, das ist alles in diesem weißen Fenster, kompiliert Wenn wir zum Beispiel Windows verwenden, wird es eine EX-Datei für uns erstellen, was eine E-Datei wird Binärdatei genannt, vielleicht müssen Sie das jetzt nicht wirklich wissen, aber sie wird Binärdatei genannt. Wenn wir dieses Programm zum Beispiel auf einem Mac ausführen wollen , dann wird es eine Binärdatei erstellen , die ein Mac verstehen würde. Wenn wir möchten, dass es auf einem Android-Gerät läuft, wie auf einem Android-Telefon, wird eine Binärdatei erstellt , die das Android-Telefon verstehen kann. Das ist wirklich das, was ein Compiler tut, in einer sehr kleinen, unkomplizierten Nussschale Er nimmt unseren gesamten Code und kompiliert ihn in eine Um das zu tun, um den Compiler auszuführen, siehst du hier oben diesen kleinen grünen Play-Button , auf dem unser Projektname First Program steht Wenn wir auf diese Schaltfläche klicken, sagen wir hier, oh, hey, Visual Studio Können Sie unserem Compiler sagen, dass er unseren gesamten Code in eine Datei umwandeln soll, damit wir die Software ausführen können Das ist genau das, was er tut, also werden wir hier darauf klicken Was passiert, ist, dass unser kleines schwarzes Fenster erscheint und sofort wieder verschwindet. Zwei Dinge hier, all das Zeug hier unten, du hast gesehen, wie der ganze Text verrückt wurde. Das ist der Compiler. Der Compiler sagt, okay, ich habe das gemacht, das, kann ich diese EXE-Datei am Ende ausspucken Das liegt daran, dass ich Windows verwende. Es hat eine EXE-Datei für mich erstellt. Jetzt wurde die EXC-Datei erstellt. Die Software wird ausgeführt. Es versucht, die EC-Datei für uns zu öffnen. Das war das schwarze Fenster , das gerade aufgetaucht ist. Aber dann ist es sofort verschwunden. Es ist sofort verschwunden, weil wir ihm nicht wirklich sagen, dass es offen bleiben soll. Visual Studio hat diesen Beispielcode gut für uns eingefügt, aber es hält auch die Software offen, sodass wir tatsächlich sehen können, was vor sich geht. Ich gebe noch eine Zeile ein und das hält das schwarze Fenster für uns offen. Also werde ich Konsole eingeben, weil Konsole das schwarze Fenster ist. Also wollen wir sagen, oh, hey, Konsole liest Zeile, richtig? Das ist es also, was ich dort einfüge und das wird das Konsolenfenster offen halten. Lass uns ganz schnell über diese Zeile sprechen. Was das macht, es wartet auf Benutzereingaben. Haben Sie zum Beispiel eine Software gesehen, irgendeine Software, die sagt, hey, wie ist Ihr Name Und dann tippst du deinen Namen ein? Wenn wir also diese Codezeile ausführen, wartet das schwarze Fenster auf unsere Eingabe. Und das hält das Fenster einfach offen. Lassen Sie uns diese Software jetzt einfach ausführen. Jetzt können Sie sehen, dass das Fenster geöffnet ist. Es ist tatsächlich offen geblieben, es wird nicht verschwinden. Das liegt nur daran, dass es auf unsere Benutzereingabe wartet. Aber es ist irgendwie eine etwas dreckige, hackige Art der Aufbewahrung Damit wir sehen können, was vor sich geht. Dieses schwarze Fenster hier ist unsere Konsolenanwendung. Es ist unsere allererste Software. Klopft euch auf das Rudel. Es macht nicht viel. Das Einzige, was es tut, ist Hallo Welt zu sagen. Es sagt dir, dass es lebt. Es sagt Hallo zur Welt. Das ist alles, was es momentan tut. Sehr einfach, aber verkaufen Sie sich nicht zu wenig, es ist Ihre allererste Software. Wir können es entweder schließen, indem die Eingabetaste drücken, oder es hier abhaken. Und das ist es auf den Punkt gebracht, unsere allererste Softwareanwendung Wie erweitern wir das nun? Nun, lassen Sie uns zuerst über eine andere Sache sprechen, nämlich die Groß- und Kleinschreibung in Sharp C. Und auch ein paar kleine Vorbehalte. Sie haben bemerkt, dass hier, wo rote Linie und rechte Linie stehen, zwischen Kleinschreibung unterschieden wird Das heißt, wenn ich dieses große L in ein kleines L ändere , können Sie sehen, dass ich diese rote Linie darunter habe , die besagt, oh, ich kann das nicht wirklich im System finden . Es existiert nicht. Das liegt daran, dass ein Kleinbuchstabe L und ein Großbuchstabe L in Sharp C zwei sehr unterschiedliche Dinge sind. Behalte das im Hinterkopf. Es muss Groß- und Kleinschreibung beachtet werden. Die letzte Sache ist, dass alle Zeilen mit einem Semikolon enden müssen. Wenn du das Semikolon vergisst, dann wird uns etwas Ähnliches passieren. Du siehst diesen kleinen roten Kringel hier. Wenn wir mit der Maus darüber fahren, heißt es, dass Semikolon erwartet Es sagt dir also tatsächlich, was das Problem ist. Wenn Sie jemals eine Ära haben, in der Sie die rote Linie haben und versuchen, das Programm auszuführen, werden Sie so etwas bekommen Und Sie werden sich bei Ihren Programmierprojekten sehr gut mit diesem Dialog vertraut machen , Und dann wird es dir sagen, was das Problem hier unten ist. Sie können darauf doppelklicken und es macht Sie darauf aufmerksam. Und das heißt nur, dass das Semikolon fehlt. Nun, ich habe sehr kurz darüber gesprochen, was diese bewirken. Lassen Sie uns hier einfach über diesen Teil sprechen. Wir wollen sagen, oh, hey, schwarzes Fenster. Schreiben Sie die Zeile ins Fenster und wir wollen Hello World schreiben. Das ist alles, was es tut. Das hast du dir komplett selbst ausgedacht. Aber jetzt habe ich dir gesagt, dass wir das tatsächlich erweitern können. Wir können tatsächlich sagen, oh, hey, stimmt, Drei Hallo-Welten. Wir speichern das, klicken auf die Schaltfläche und jetzt haben wir drei davon. Jetzt sehen Sie in unserem Beispiel, wohin das führt. Gleich zu Beginn habe ich gesagt, dass wir das Mr. Beast-Logo anzeigen werden. Jetzt habe ich eine Ask-Datei für das Mr. Beast-Logo. Ski ist nur eine Textdarstellung eines Bildes. Ich zeige dir jetzt , was das bedeutet. Es wird alles Sinn ergeben. Sie können es hier sehen, ich habe ein Mr. Beast-Logo hier im Notepad Und ich habe die Konsole direkt davor hinzugefügt, sodass wir das hier sehen können Ich werde das alles einfach kopieren. Und ich werde es zwischen diese geschweiften Zahnspangen einfügen , wie ich bereits erwähnt habe. Ich werde das speichern Ich werde den grünen Knopf drücken. Ich werde dieses Fenster öffnen, damit wir es sehen können. Und ich werde nach oben scrollen. Das ist unsere allererste Software. Sobald jemand Ihre Software öffnet, wird er das Mr. Beast-Logo sehen. So einfach können wir diese Botschaft modifizieren und ein ganz neues Bild erstellen. Wenn wir uns den Code hier ansehen, sind es nur mehrere Anweisungen in der rechten Zeile, die all diese Ms hier und ein sehr schönes Charakterdesign auf dem Logo hier erzeugen . Bevor ich diese Lektion beende, werde ich Ihnen nur zeigen, wie das alles zusammenhängt. In deinem Kopf ergibt das Sinn. Erinnerst du dich, als wir ein brandneues Projekt erstellt haben und wir dieses Standortfeld haben? Nun, ich gehe jetzt einfach in diesen Ordner. Jetzt bin ich in diesem Verzeichnis auf unserem Computer. Wir können sehen, dass Visual Studios eine Reihe von Ordnern und Dateien für uns erstellt hat. Hier drin haben wir eine sogenannte Lösungsdatei, und es wurde ein weiterer Ordner erstellt. Also gehen wir da rein. Es wurden noch mehr Dateien erstellt. Dieser hat unsere Codierung. Aber wenn wir in diesen Bin-Ordner hier schauen und dann in diesen Debug-Ordner hier, in diesem, können Sie sehen, dass es hier in der Mitte ein paar Dateien gibt . Das ist unsere Binärdatei, und weil ich Windows verwende, wurde eine EXE-Datei erstellt, Fas Wenn wir darauf doppelklicken, können wir es zum Beispiel sogar an einen Freund schicken Sie können darauf doppelklicken. Wenn Sie es maximieren, können Sie das Mr. Beast-Logo sehen . Sie können sehen, dass das alles so zusammenhängt. Visual Studio sagt dem Compiler, oh hey, nimm den ganzen Code, erstelle eine EXE-Datei, Fas, und lege ihn hier in diesen Ordner Über all die anderen Dateien werde ich zu einem späteren Zeitpunkt sprechen. Aber der Einfachheit halber erstellt es unsere EXE-Datei schnell, und das ist unsere allererste Software 5. 1-2. Variablen: Jetzt werden wir darüber sprechen, ob ich eine sehr einfache Variable einführen werde. Ich werde Ihnen zeigen, wie es funktioniert, was Variablen sind und wie sie davon profitieren können und solche Dinge, Variablen. Lassen Sie uns darüber sprechen, was sie sind. Zunächst haben wir hier eine Beispielanwendung. Da steht nur „Hallo Welt“ in einem schwarzen Fenster. Und das ist alles, was es tut, wie Sie genau dort sehen können. Jetzt werde ich eine sogenannte Variable vorstellen und darüber sprechen, wie sie uns helfen können. Lassen Sie uns einfach eine Variable einführen. Ich kann in einer Sekunde darüber sprechen. Ich nenne es Test. Wir werden ihm den Wert Hello World geben. Ich werde hier nur den Variablennamen eingeben. Lassen Sie uns also darüber sprechen und darüber, was das bewirkt. Also, was ich hier mache, ich initialisiere eine sogenannte Variable Das ist jetzt die Variable. Es heißt Test, also ist dies der Name unserer Variablen. Jetzt kann diese Variable beliebig genannt werden. Es könnte Schinken-Sandwich genannt werden. Es spielt wirklich keine Rolle. Aber der Punkt ist, dass Sie ihm einen Namen geben müssen wo er für Sie Sinn macht, Sie können sich darauf beziehen. Denn wenn Sie eine Softwareanwendung haben , die Tausende von Variablen hat, werden Sie sehr verwirrt wenn Sie sie alle verschiedenen Arten von Sandwiches oder zufällige Namen wie Test oder ähnliches nennen Sandwiches oder zufällige Namen wie Test oder ähnliches Also muss es für dich Sinn machen. Also nenne ich es einfach Hello World. Also das ist der Name unserer Variablen, das ist der Wert unserer Variablen. Das ist es also, was wir hier in unsere Variable einfügen. Nun, dieser Teil hier ist ein sogenannter Typ. Das ist jetzt eine Zeichenkettenvariable. Was eine Zeichenkettenvariable ist, sie ist ein Container für Wörter, Sätze. Sie können hier ein ganzes Buch hineinlegen, wenn Sie möchten. Es sind alles alphanumerische Buchstaben und Zahlen, aber als Zeichenfolge es keine Zahlen an sich, es ist kein Dezimalwert, es ist kein Datum oder eine Uhrzeit oder so etwas Kompliziertes Das ist eine Zeichenfolge. Das ist ein sogenannter Variablentyp. Das ist der Variablentyp, der besagt, hey, Computer, wir wollen eine neue Variable starten und sie in den Speicher legen. Der Name unserer Variablen ist dieser. Das Gleichheitszeichen gibt an, wie wir es initialisieren, also ihm einen Wert geben Wenn Sie mit Zeichenketten arbeiten, setzen wir den Wert immer in doppelte Anführungszeichen Wie in den doppelten Anführungszeichen steht der Wert für unsere Variable. Wir beenden jede Zeile immer mit einem Semikolon. Jetzt heißt unsere Variable Hello World. Lass uns das Programm ausführen. Sie können sehen, dass es Hello World im Fenster ausgibt. Es macht genau das Gleiche wie zuvor. Das ist zu erwarten , weil wir nichts geändert haben. Wir haben gerade eine Variable deklariert und initialisiert und geben sie wie zuvor in das schwarze Fenster aus Genau das Gleiche, was wir hier tun. Eine Sache ganz schnell, bei Variablennamen, was ich immer mache, ist, die Groß-/Kleinschreibung zu verwenden , immer mit einem Kleinbuchstaben am Anfang. Jetzt liegt es an Ihnen, aber im Allgemeinen neigen die Leute dazu, Variablen so zu verwenden. Wenn Sie in Zukunft in einem Unternehmen arbeiten und das möchten, werden andere Leute vielleicht das möchten, etwas Ähnliches tun. Es ist gut, gute Praktiken einzuführen. Nun, das ist der einzige Grund, warum ich das mache. Dann jedes nächste Wort, hallo Welt. Dann wird es Großbuchstaben geben. Wenn wir hier ein anderes Wort haben, dann wird dieses mit Großbuchstaben beginnen. Das nennt man einfach Standards, es ist optional. Lassen Sie uns darüber sprechen, was Deklaration ist und was Initialisierung bedeutet, um diese beiden Begriffe abzudecken Ich werde hier auf unser kleines Beispiel näher eingehen. Ich werde jetzt darauf eingehen, wie geht es dir so? Und dann werde ich die Variable erneut auf dem Bildschirm ausgeben . Dann werde ich die Anwendung ausführen. Damit du sehen kannst, was vor sich geht. Sie können hier im Fenster sehen, dass es Hallo Welt heißt. Wie geht's dir? Schau dir an, wie das funktioniert? Sie können hier sehen, wir haben unsere Variable definiert, wir haben ihr einen Typ gegeben. Jetzt geben wir der Variablen nur einmal einen Typ. Wir sagen, oh, hey, Computer, das ist unsere Variable, die ich benutzen möchte. Das ist übrigens unsere neue Variable, es ist eine Zeichenkettenvariable. Das haben wir jetzt einmal gemacht. Wir müssen dem Computer nicht mehr sagen, dass es sich um eine Zeichenfolge handelt, der Computer weiß es bereits und merkt sich das. Jetzt überschreiben wir jedes Mal, wenn wir unsere Variable ändern ihr einen neuen Wert geben, und ihr einen neuen Wert geben, einfach das, was schon drin ist Wenn diese Zeile auftaucht, wird dieser Teil durch „Wie geht's dir?“ ersetzt Und dann stellen wir es wieder hier raus. Wir müssen unsere Variable nicht in einer Zeile deklarieren und initialisieren Schauen wir uns dieses Beispiel hier an. Ich könnte das genauso machen. Das Gleiche wird passieren. Was ich hier mache, ich deklariere unsere Variable, deklarieren heißt hey, Computer, ich möchte eine neue Variable erstellen Ich weiß, dass es eine Zeichenfolge sein wird , aber ich weiß noch nicht, was der Wert sein wird Vielleicht entscheide ich mich zu einem späteren Zeitpunkt. Zu einem späteren Zeitpunkt. Okay, ich habe entschieden, was der Wert sein wird. Es wird Hello World sein. Dann möchte ich es auf dem Bildschirm ausgeben. Und dann initialisiere ich es hier erneut und gebe es auf dem Das ist Deklaration oder Deklaration einer Variablen. Das ist Initialisierung oder Zuweisung. Es gibt einige Wörter, die Sie in Zukunft hören werden, wenn Sie weiterhin mit C Sharp programmieren Sie können sehen, dass wir das in zwei Zeilen machen und die Ausgabe genau dieselbe ist wie zuvor, was zu erwarten war. Eine letzte Sache: Wenn wir hier eine Variable deklarieren und versuchen, sie auszugeben ohne sie zu initialisieren oder zuzuweisen, dann wird ein Fehler ausgegeben Wir können diese rote, verschnörkelte Linie sehen. Wenn wir mit der Maus über die rote Linie fahren, haben wir eine kleine Ahnung, wo das Problem liegt Und es heißt nur, Verwendung einer nicht zugewiesenen Variablen, Es sagt uns, was das Problem ist. Jedes Mal, wenn wir einen Fehler haben, können wir das Programm nicht ausführen, da wir diese Fehler immer beheben müssen. Das ist eine sehr grundlegende Ansicht darüber wie Variablen in C Sharp funktionieren. 6. 1-3. Datentypen: Okay, lassen Sie uns über Datentypen sprechen, was sie sind, wie sie uns helfen können, warum wir sie verwenden können und alles dazwischen. Also ich habe hier eine Beispielanwendung. Es macht nicht wirklich viel. Wir deklarieren und initialisieren hier zwei Zeichenkettenvariablen und geben sie in unserem schwarzen Fenster aus. Wenn ich die Anwendung hier starte, heißt es nur Sponge Bob Square Pants Mir ist ein Beispiel eingefallen , wie man Datentypen viel einfacher erklären kann. Ich habe mir ein Beispiel ausgedacht. Hast du jemals Top-Trumps-Karten oder Pokémon-Karten oder Ausrüstung oder etwas Ähnliches gespielt , wo du den Namen des Charakters hast, vielleicht einige Attribute wie Alter, Gewicht, Größe, Seltenheit oder Ich denke, das würde Datentypen ziemlich gut repräsentieren. Und hilf mir, sie zu erklären damit du sie viel einfacher verstehst. Stellen Sie sich eine Karte vor, die einen Namen hat und möglicherweise ein Alter hat. Dies ist zum Beispiel das Alter des Charakters. Jetzt ist Sponge Bob einer dieser Charaktere , die alle Altersstufen überschreiten Ich werde 21 setzen. Das ist eine Variable vom Typ String, das ist ein Datentyp. Ein anderer Datentyp, den wir verwenden können, ist ein sogenannter Integer. Was nun eine Ganzzahl ist, ist eine Zahl. Wir können tatsächlich mit der Maus darüber fahren und Visual Studio gibt uns tatsächlich mehr Informationen darüber Es stellt eine 32-Bit-Ganzzahl mit Vorzeichen 32 Bit bedeutet nur die Größe Wie viele Informationen können Sie hier eingeben. Ich denke, es liegt irgendwo zwischen minus 2 Milliarden und positiven 2 Milliarden. Ich denke, das Alter passt ganz gut dazu, es wird nur 23 Ziffern sein. Wenn wir Variablen vom Typ Integer verwenden, brauchen wir diese doppelten Anführungszeichen nicht wie bei Zeichenketten. Wir brauchen nur eine Zahl genau hier. Noch eins, vielleicht das Gewicht, und das wird in Pfund sein. Vielleicht wiegt dieser Schwamm etwa 120 Pfund, so etwas in der Art. Noch eine Höhe. Jetzt werden wir die Höhe in Fuß und Zoll angeben. Ich werde es in Fuß und Zoll angeben, damit ich Ihnen einen neuen Datentyp zeigen kann. Das nennt man Double. Was nun ein Double ist, es steht für Dezimalzahlen. Geben wir hier die Höhe ein. Nehmen wir zum Beispiel an, unser Schwamm ist drei Fuß, 4 Zoll groß. So etwas in der Art. Das ist also die Höhe unseres Schwamms. Wenn wir hier einen Wert von mehr als dem Doppelten haben, entspricht das einer Gleitkommazahl mit doppelter Genauigkeit. Sehr kompliziert, nicht wahr? Und deshalb lernen die Leute aus Tutorials, ein Doppel steht für eine Dezimalzahl. Das ist alles mit einem Dezimalpunkt. Jetzt Dezimalzahlen Lassen Sie uns ganz schnell über Dezimalzahlen sprechen. In C Sharp können wir eine Dezimalzahl auf drei Arten darstellen eine Dezimalzahl auf drei Arten Ein anderer wird Float genannt. Lassen Sie uns danach Zahlen setzen. Wenn Sie eine Variable verwenden, müssen sie alle eindeutige Namen haben. Lass uns Dezimalzahlen machen. Das ist eine andere Art, wie wir Dezimalzahlen berechnen können. Dies sind die drei Arten, wie wir Dezimalzahlen in C darstellen können Dezimalzahlen in C darstellen Der Hauptunterschied ist die Präzision. Jetzt ist Float, glaube ich, 32-Bit. Es sind nur sieben Ziffern. Sie können ihm mehr als sieben Ziffern geben, aber dadurch wird er abgeschnitten. Kürzen Sie es bei sieben. Nach sieben Ziffern verliert man alles, was die ganze Genauigkeit hier ausmacht. Jetzt ein 64-Bit. Etwas mehr, glaube ich. 15 Ziffern, 15 bis 16 Ziffern. Es ist also genauer. Also können wir hier bis zu 15 reinstellen. Standardmäßig wird ein Double verwendet, wenn Sie Dezimalzahlen in C Sharp verwenden. Wenn ich Standard sage, erkläre ich das gleich. Die letzte ist dezimal. Dieser ist, glaube ich, 128 Bit, viele, viele Ziffern. Ich glaube, 28 Ziffern, ziemlich lang. Wir verwenden Dezimalzahlen, wenn wir über Dinge sprechen , die mit Geld zu tun haben Wenn Sie zum Beispiel einen Antrag für die Verwaltung von Steuern als Regierungsbehörde schreiben , möchten wir sicherstellen, dass jeder seine Steuern zahlt, bis sicherstellen, dass jeder seine Steuern zahlt Dezimalpunkt wirklich weit über dem Wenn man mit Geld zu tun hat, muss es wirklich, wirklich genau sein , und dafür würden wir eine Dezimalzahl verwenden. Sie können hier sehen , dass ich beim Initialisieren dieses Float-Datentyps mit variabler Höhe eins ein kleines F ans Ende setze. Das sagt C scharf. Hey, ich möchte einen Float-Wert initialisieren. Das liegt daran, dass standardmäßig Double verwendet wird. Sie können sehen, wenn ich ein Double initialisiere, muss ich keinen Buchstaben am Ende platzieren Jedes Mal, wenn ich hier einen Dezimalwert eingebe, geht C Sharp davon aus, dass es sich um einen doppelten Wenn ich hier einen Float initialisieren möchte, muss ich sagen, oh, das ist übrigens ein Float-Datentyp Denn wenn ich das nicht mache, kannst du sehen, dass es eine rote Linie gibt Ich bewege den Mauszeiger drüber. Da steht, dass buchstäbliche Typ Double nicht implizit kompliziert sein kann , oder? Es heißt im Grunde, verwende ein Suffix, um ein Literal dieses Typs zu erstellen Es heißt im Grunde, hey, du hast einen Float-Datentyp, setzt ein F ans Ende und dann sind wir zufrieden Gleiche gilt für Dezimal, ich weiß nicht, ob Sie nicht ein D oder etwas Beschreibenderes verwenden, es wird wahrscheinlich von etwas anderem verwendet Dieser will ein M. Und wenn wir kein M eingeben, sagt er Ihnen, dass Sie ein M eingeben sollen. Deshalb heißt IDEs IDE, genau wie Visual Studio, wirklich gut Es sagt dir eigentlich, was dir fehlt und was du tun musst. Wenn Sie etwas wie Notepad verwenden, wird es Ihnen das nicht sagen Es hilft dir, viel schneller zu programmieren. Das sind also die drei Arten, wie wir Dezimalzahlen darstellen können , und wir werden nur das Doppelte für die Höhe verwenden. Die Höhe unseres Schwamms ist drei Punkt, ich weiß nicht, drei Fuß, 4 Zoll, so etwas in der Art. Ich denke, das wäre gut. Nun, der nächste, den ich vorstellen möchte, ist ein Bolen, dargestellt durch bool Was könnte das Booling sein? Ob unsere Sammelkarte die erste Ergänzung ist? Also werde ich seine erste Ergänzung hinzufügen. Ich werde wahr sagen. SpongeBob ist eine sehr seltene Sammelkarte und es ist die erste Ergänzung, also wird es wahr sein Nun können boolende Datentypen den Wert true oder den Wert false haben Nur einer dieser beiden Werte ist wahr. Wenn es ja oder falsch ist. Nein. So verwenden wir Boolings in C So ist es wahr oder falsch. Nur zwei Wertsachen. Wenn Sie nach einer Variablen suchen, die drei oder vier Werte haben kann, dann verwenden Sie kein Booling Booling gilt nur für zwei Werte. Das Letzte, über das ich jetzt sprechen werde , ist, dass es viele Datentypen in C Sharp gibt Wir können Datumsangaben, Uhrzeiten, verschiedene komplizierte Dinge wie Listen und solche Dinge machen verschiedene komplizierte Dinge wie Listen und solche Dinge Aber um ehrlich zu sein, was Zeichenketten, ganze Zahlen Dezimalwerte wie die doppelten Boolings und Zeichen angeht, hier können wir so ziemlich alles schreiben, jede Menge Software nur mit diesen Vielleicht werden wir in Zukunft mehr behandeln. Der letzte, über den ich sprechen werde , Charaktere, die von Shah repräsentiert werden, genau hier. Dafür nenne ich es Klasse. Ist die Note unserer Karte ausgezeichnet? Also das könnte ein oder ist es schlecht? Das könnte ein sein. Dann könnte eine durchschnittliche Karte so aussehen, als ob Sie eine Prüfung ablegen. Unsere Note könnte also ungefähr so sein. Und das ist eine sehr gute Karte. Die Erstausgabe ist neuwertig und hat die Note A. Wenn Sie Zeichenvariablen initialisieren, verwenden wir hier einfache Anführungszeichen, keine doppelten Anführungszeichen. Visual Studio macht hier einen guten Job. Wenn Sie die Anführungszeichen vergessen, wird es Ihnen wahrscheinlich sagen, dass Sie sie benötigen , oder es wird Ihnen ein kryptischer Fehler wie dieser Ja, jetzt haben wir all unsere verschiedenen Variablen mit all ihren verschiedenen Typen deklariert und initialisiert mit all ihren verschiedenen Jetzt möchte ich sie nur noch auf dem Bildschirm ausgeben. Sie können sehen, dass sie gerade die grüne Linie unter jedem haben , wenn ich hier das Alter verwende. Beobachten Sie, wie die grüne Linie mit zunehmendem Alter verschwindet, und das liegt daran, dass wir sie jetzt verwenden. Ich werde hier durch die Möglichkeiten der Bearbeitung eine für jede andere Variable einfügen hier durch die Möglichkeiten der Bearbeitung eine für jede andere Variable . Wir können hier jetzt sehen, dass wir all das auf dem Bildschirm ausgeben , wenn wir diese Anwendung ausführen Jetzt können wir all unsere verschiedenen Werte für all unsere verschiedenen Variablen sehen all unsere verschiedenen Werte für all unsere verschiedenen Variablen Wir sehen den Vornamen, den Nachnamen, das Alter, das Gewicht, die Größe. Stimmt, weil es die erste Ausgabe ist und auch eine sehr gute Sammelkarte ist. 7. 1-4. C# - Eine stark statisch getippte Sprache: Ich möchte jetzt über zwei Dinge sprechen, die mit C Sharp zu tun haben, nachdem wir verstanden haben, was Datentypen Nun ist C Sharp eine so genannte stark typisierte Sprache und auch eine statisch typisierte Lassen Sie uns darüber sprechen, was diese beiden Begriffe sind. Eine stark typisierte Sprache, das heißt, sobald wir eine Variable namens Vorname definiert und ihr den Datentyp Zeichenfolge gegeben haben, eine Zeichenfolge sein muss sie während der gesamten Lebensdauer der Anwendung Wir können zum Beispiel nicht Vornamen nehmen und ihm dann einen ganzzahligen Wert geben , weil er das nicht mag Das liegt daran, dass es sich um eine stark typisierte Sprache handelt. Wenn Sie jedoch eine Sprache wie Python verwenden, können Sie dies tun, ist überhaupt kein Problem. Das liegt daran, dass es sich nicht um eine stark typisierte Sprache handelt. In diesem Fall ist das eine stark typisierte Sprache. Sobald Sie eine Zeichenfolge definiert haben, haben Sie ihr einen eindeutigen Namen gegeben Sie können hier dann keinen anderen Datentyp hineinstopfen. Du kannst nicht sagen, oh, jetzt möchte ich sagen, dass es wahr ist, zum Beispiel, es wird nicht funktionieren. Es wird dir sagen, dass es sich um stark typisierte Sprache wie C Sharp handelt, die letzte ist eine so genannte statisch typisierte Wenn wir zum Beispiel einen Fehler machen, der mit einem dieser Datentypen zusammenhängt, haben wir den Vornamen Daher erwartet es eine Zeichenfolge in doppelten Anführungszeichen, wie hier, wenn wir ihr eine Ganzzahl geben , wird sie sich beschweren. Es wird eine rote Linie darunter angezeigt. Immer wenn wir eine rote Linie darunter haben, etwa dieser Fehler hier, können wir die Anwendung nicht kompilieren. Es geht nicht um Buchstaben, es geht nicht um Buchstaben. Wenn Sie beispielsweise Windows verwenden, kompilieren Sie Ihren Code in eine EXC-Datei und geben Sie ihn einem Freund zur Ausführung. Es wird nicht funktionieren Das liegt daran, dass diese Fehler bei der Kompilierung erkannt werden. Und genau das ist eine statisch typisierte Sprache. Wenn wir einen solchen Fehler machen, werden wir ihn nicht zu einem späteren Zeitpunkt entdecken , wenn ein Benutzer die Software verwendet Das ist ein ziemlich guter Vorteil von C Sharp und auch Sprachen wie C Plus Plus, die sich sehr ähnlich sind. Sobald wir eine Zeichenfolge vom Datentyp haben, benötigt sie einen Zeichenkettenwert. Diese Fehler werden bei der Kompilierung erkannt. Und dann drücken wir hier diese grüne kleine Play-Taste. Das ist eine stark typisierte Sprache. Und auch eine statisch typisierte Sprache, C Sharp ist beides 8. 1-5. Mit Strings und Teilzeichenfolgen arbeiten: Okay, schauen wir uns an, wie wir mit einigen Variablen vom Typ String in C Sharp arbeiten können einigen Variablen vom Typ String in C Sharp Hier haben wir eine Beispielanwendung. Wir haben nur Vorname und Nachname, und wir geben beide in unserem Konsolenfenster aus Nun, wie können wir tatsächlich zwei Zeichenketten miteinander verbinden? Ich habe einen variablen Vornamen, einen variablen Nachnamen. Im Moment werden sie getrennt auf zwei verschiedene Zeilen verteilt. Aber wie füge ich diese zusammen? Was wir hier tun können, das heißt, zwei Zeichenketten zu verketten, und das ist nur eine ausgefallene Art zu sagen, verbinde Verkettung, das könnte kurz Concat sein. Diese Worte werden Sie vielleicht in Zukunft hören, wenn Sie Ihre Reise mit dem Scharfen C fortsetzen Schauen wir uns an, wie wir diese beiden Saiten miteinander verbinden. Was ich tun werde, ich werde einen sogenannten Operator verwenden . Sie können dieses Plus also hier sehen. Und was das macht, es nimmt einfach diese, diese Zeichenfolge und verbindet sie miteinander. Sehr einfach, nicht wahr? Jetzt führen wir die Anwendung aus. Wir können sehen, dass wir Sponge Bob und eckige Hosen in einer Zeile haben. Aber Sie können sehen, dass es hier keinen weißen Raum dazwischen gibt. Schauen wir uns also an, das hinzuzufügen. Was wir hier tun können, ist eine weitere Zeichenfolge hinzuzufügen und das Plus-Symbol zu verwenden. Auch hier nehmen wir die erste Variable, den Vornamen. Wir verketten es und verbinden es mit diesem leeren Y-Leerzeichen, das ebenfalls eine Zeichenfolge ist Und dann verbinden wir es mit dem Nachnamen, eine Variable ist Nun, das ist keine Variable, wir brauchen hier keine Variablen. Wir könnten das leicht machen, und es ist genau dasselbe. Auf diese Weise verwenden wir diese Variable nicht einmal, aber die Ausgabe wird genau dieselbe sein. So können wir zwei Zeichenketten miteinander verbinden. Nur damit du es vollständig verstehst, können wir hier sogar eine Variable erstellen und wir können Vorname plus Nachname machen. Dann können wir hier den vollständigen Namen eingeben und wir werden genau das gleiche Ergebnis haben. Vergessen wir hier nicht unseren weißen Raum. Es sieht ansehnlich aus und wir werden die Anwendung ausführen Sie können hier sehen, dass wir genau das gleiche Ergebnis haben. Wir verwenden hier nur eine Variable namens vollständiger Name. Und das ist nur das Zusammenfügen Verketten, Leerraum So können wir zwei Zeichenketten miteinander verbinden, ganz einfach Teilstrings ganz einfach Was ist eine Teilzeichenfolge? Nun, eine Teilzeichenfolge ist nur eines von vielen verschiedenen Dingen, die Sie mit Zeichenketten in C Sharp machen können Hier ist ein Beispiel. Hier haben wir eine Variable namens Name. Es hat Sponge Bob Square Pound gibt den Wert an. Und wir sind gerade dabei, es auf den Bildschirm zu bringen, sagen wir zum Beispiel, ich möchte einen bestimmten Teil dieser Zeichenfolge extrahieren. Ich möchte das Wort Schwamm daraus extrahieren. Ich will den Rest nicht, ich will nur diesen Teil hier haben. Nun, was wir tun können, wir können eine sogenannte Teilstring-Methode verwenden , um einen Teil unserer Zeichenfolge zu extrahieren Und genau das ist eine Teilzeichenfolge. Es ist ein Teil einer Zeichenfolge. Ich könnte das nehmen, ich könnte das nehmen. Ich könnte nehmen, was ich will. Ich könnte sogar einen Brief annehmen, wenn ich wollte. Schauen wir uns an, wie wir eine Teilzeichenfolge tatsächlich verwenden können. Was ich tun werde, ich möchte Schwamm, die Variable, extrahieren Wir können es nennen, wie wir wollen, nennen wir es Schwamm. Warum nicht? Wir möchten Sponge initialisieren, sodass wir unser Gleichheitszeichen verwenden. Wenn wir mit einer Variablen arbeiten, können wir hier den Namen der Variablen angeben, also den Namen , in diesem Fall, wenn wir einen Punkt oder einen Pfeil verwenden , wie auch immer Sie es nennen möchten Danach haben wir all diese verschiedenen Dinge, die wir damit machen können Einige der häufigsten sind immer oben mit diesem schwarzen Stern neben ihnen. Einer von ihnen ist Substring. Wir können viele Dinge tun, die wir ersetzen können. Wir können die Anzahl der Zeichen verringern. Wir können es aufteilen, wir können viele verschiedene Dinge tun. Wir wollen Substring verwenden. Wir können darauf doppelklicken, wenn wir hier Klammern öffnen. Wir haben einige Optionen, die wir damit machen können Jetzt werde ich viel später über dieses Zeug sprechen , wenn ich über Methoden spreche Aber in den meisten Fällen werde ich hier nur zwei Dinge reinschreiben. Und genau das möchte ich hier tun. Jetzt, in Sharp C, fängt alles bei Null an. Der Index ist bei Null. Diese Zeichenfolge hier, dieses Zeichen hier, das ist Position Null. Das P ist Position 123. Alles fängt bei Null an. Denken Sie daran, dass das Vorwärtsgehen Zeichenposition Null unserer quadratischen String-Sponge-Bob-Hose ist. Der erste Wert hier ist also Null, weil wir an Position Null beginnen wollen. Dann gibt der nächste Wert wie viele Buchstaben Sie aus der Zeichenfolge Sponge 12345 extrahieren möchten . Es sind tatsächlich sechs Jetzt wollen wir hier die ersten sechs Zeichen aus dem Schwamm extrahieren . Das sind die Werte, die wir hier eingegeben haben. Wenn das für Sie verwirrend ist, lassen Sie uns zu dem zurückkehren, wo wir über die rechte Zeile der Konsole gesprochen haben . Wir hatten die rechte Zeile der Konsole und haben die Klammern geöffnet Wir wollen unsere Variable auf das schwarze Fenster setzen. Nun substring, in diesem Beispiel wollen wir ihr zwei Werte geben Und wenn wir ihr zwei Werte geben, trennen wir sie durch ein Komma, also wollen wir das erste Zeichen und wir wollen sechs Zeichen vorwärts zählen, was wir dann als Sponge extrahieren sollten Jetzt wollen wir Sponge auf unser Konsolenfenster setzen , damit wir das Ergebnis tatsächlich sehen können Lassen Sie uns unsere Anwendung kompilieren. Das können wir mit Output Sponge genau hier sehen. So funktioniert der Teilstring sehr vereinfacht. Wenn wir zum Beispiel Bob extrahieren wollen, beginnen wir bei Position sechs und zählen drei Dann können wir sehen, dass wir Bob extrahiert haben . So funktioniert eine Teilzeichenfolge Eine andere Sache, die wir tun können, ist ein sogenannter Ersatz. Wir haben hier quadratische Sponge-Bob-Hosen. Nehmen wir an, wir wollen Sponge Bob durch etwas anderes ersetzen, sagen wir Patrick oder so. Lassen Sie uns eine neue Variable erstellen. Wir nennen es Pat for Patrick. Es spielt keine Rolle , wie wir es nennen. Wir arbeiten hier mit unserer Namensfolge. Wir lassen das hier stehen Wenn wir den Punkt erneut drücken, bekommen wir all diese Dinge, die wir damit machen können , und wir werden doppelklicken, ersetzen durch, ersetzen. Wir können alles durch etwas anderes ersetzen. Was ich tun möchte, ich möchte Sponge Bob ersetzen. Ich will ihm den neuen Wert geben, Patrick. Immer mit einem Semikolon enden. Das bedeutet, den Namen zu nehmen, alles, was in dem Namen steht , es nimmt all das, wir wollen jedes Vorkommen durch den Typ SpongeBob ersetzen , dass wir es durch Patrick ersetzen wollen Dann wird das Ergebnis dieser Operation in Pat gespeichert. Dann können wir Pat hierher bringen. Wenn wir die Anwendung ausführen, können wir jetzt sehen, dass dort Patrick Square Pants steht. liegt daran, dass wir jedes Vorkommen von Sponge Bob durch Patrick ersetzen . Und wenn ich jedes Vorkommnis sage, versuchen wir das, starten wir die Anwendung. Es hat jedes Vorkommen von Sponge Bob durch Patrick ersetzt . So funktioniert der Ersatz in C Sharp. Und auch hier müssen Sie das Ergebnis dieser Berechnung nicht in einer ganz neuen Variablen speichern . Wir können das abkürzen, es einfach dort ablegen, und das wird genauso gut funktionieren. Sie können sehen, wie Patrick das Quadrat wiegt. Patrick Patrick. Sie können sehen, wie das Ersetzen funktioniert, wenn es um Zeichenketten geht. Eine andere Sache, die wir mit Zeichenketten machen können , ist, die Länge der Zeichenfolge zu berechnen. Das ist sehr einfach. Hier habe ich eine Variable namens Beispiel. Das ist alles in dieser Variablen , mit dem man arbeiten kann. Beispiel: Ich setze danach einen kleinen Pfeil und gebe Länge ein, um das Ganze schneller zu machen Sie können darauf doppelklicken oder die Tabulatortaste auf der Tastatur drücken Das könnte für Sie in Zukunft viel schneller sein, diese Werte einzugeben , wenn ich die Anwendung kompiliere. Jetzt können wir sehen, dass dieser Satz hier 44 Zeichen lang ist. Das ist sehr nützlich, wenn Sie Teilstrings verwenden , um bestimmte Dinge aus einer Teilzeichenfolge zu extrahieren Lassen Sie uns über eine andere Methode namens Index of sprechen. Was Index of nun tut, ist, wenn Sie ein Wort wie Sponge Bob angeben, wird es Ihnen tatsächlich sagen wo es sich in der Zeichenfolge befindet. Anstatt beispielsweise 1-234-567-8910, Zeichenposition 22, zu zählen , müssen wir nicht zählen, sondern können eine Methode namens index of verwenden Wenn ich Index einfüge, dann möchte ich zum Beispiel Sponge Bob eintragen dann möchte ich zum Beispiel Sponge Bob eintragen. Das wird in doppelten Anführungszeichen stehen, weil Sponge Bob eine Zeichenfolge ist, wir wollen das Ergebnis davon speichern. Wenn wir nun den Mauszeiger über den Index von bewegen, können Sie hier neben diesem rosafarbenen Würfel sehen, dass dort „t“ steht. Das bedeutet, dass das Ergebnis eine ganze Zahl sein wird , s definiere eine neue Ganzzahl Ich nenne es einfach Index. Dann gebe ich den Index im Fenster aus. Lass uns das ganz schnell machen. Sie können sehen, dass Sponge Bob hier offenbar auf Charakterposition 22 ist . Das sind 22 Zeichen im Index von Das ist eine weitere Methode, die sehr nützlich ist , um den Index eines beliebigen Wortes zu ermitteln. Sie könnten zum Beispiel einfach so etwas eingeben. Wenn wir das ausführen, erhält es das erste Vorkommen , von dem dieses hier ist, 012, das ist das erste Vorkommen Auch hier gibt es viele verschiedene Dinge, die Sie mit dem Index von tun können, aber das ist ein Beispiel 9. 1-6. Mit Zahlen arbeiten: Okay, schauen wir uns einige Beispiele für die Arbeit mit Zahlen in C Sharp an. Wir werden uns Multiplikation, Addition, Subtraktion, Division ansehen , all das gute Zeug Also lass uns loslegen. Schauen wir uns ein Beispiel für eine Ergänzung an. Also, wie wir Zahlen scharf addieren. Wir haben hier eine Beispielanwendung. Wir definieren einfach eine Variable, setzen sie auf Null und geben sie auf dem Bildschirm Also ist hier nicht wirklich viel los. Wir werden unsere Variable verwenden. Ich mache einfach fünf plus vier, was, wie wir wissen, neun ergibt Ich führe das Programm einfach und wir bekommen die Ausgabe von Neun. Das Hinzufügen ist sehr einfach, Sie können damit weitermachen usw. Sehr einfach Gleiche gilt auch für die Subtraktion, wir können so ziemlich das Gleiche tun Fünf minus sechs ist minus eins. Sie können sehen, dass die Subtraktion auch sehr einfach ist. Auch das können Sie tun, indem Sie beide mischen. Es ist nicht wirklich wichtig. Es wird das für dich regeln. Multiplikation Lassen Sie uns drei mit vier multiplizieren , um Zahlen in C zu multiplizieren Benutze hier diesen Asterix, den kleinen Stern, und wir sollten 12 als Ergebnis bekommen Auch hier können wir Multiplikation mit Addition und Subtraktion kombinieren, so wie Sie es zum Beispiel in der Mathematik tun Nun, hier gibt es ein paar Fallstricke. Bei der Division ist das Dividenzeichen ein Vorwärts, lassen Sie uns ein einfaches 13/3 machen. Lassen Sie uns die Anwendung als ist das Dividenzeichen ein Vorwärts, lassen Sie uns ein Eins ausführen Weil es eins gibt, gibt es 13,3. Das Ergebnis ist eins. So teilen wir Zahlen jedoch auf. Okay? Hab einen. Nummer eins ist dividiert durch Null Wir können eigentlich nicht durch Null teilen. Du kannst es jetzt tatsächlich sehen. Wie dem auch sei, damals vor ein paar Jahren, wenn Sie drei mal Null machen würden, konnten Sie die Anwendung ausführen und es wurde eine Fehlermeldung angezeigt. Da es sich nicht eine realistische Berechnung handelt, kann sie sie nicht ausrechnen. Jetzt haben wir eine rote Linie darunter, und wenn wir den Mauszeiger darüber bewegen, heißt es Division durch Konstante Null Damit können wir unser Programm nicht wirklich ausführen, aber da das Variablenergebnis Null ist, wir es einfach dort ein und führen das Programm Und wieder schlägt es genauso fehl wie es sollte. Der erste Fehler, den wir bei der Kompilierung festgestellt haben, als wir versuchen , die Anwendung auszuführen, weil wir hier Null verwenden, sagt uns, dass wir die Anwendung nicht ausführen konnten. Aber als ich ihr eine Variable gegeben habe, deren Ergebnis ebenfalls Null ist, können wir sie austricksen, um das Programm auszuführen, aber wir erhalten immer noch den Fehler, wenn wir versuchen, durch Null zu dividieren, was wir nicht tun können Das sollten Sie also immer berücksichtigen , wenn Sie mit Division arbeiten Sie sollten niemals durch Null teilen. Wenn wir in Zukunft über If-Anweisungen sprechen, werde ich Ihnen zeigen, wie Sie Ihr Programm davor schützen können , durch Null zu dividieren und das andere Problem in Bezug auf die Division ist die Verwendung von Dezimalzahlen Schauen wir uns ein Beispiel für eine Dezimalzahl an. Wir werden hier einen doppelten Datentyp verwenden und ihn einfach auf Null initialisieren Lassen Sie uns jetzt einfach ein Beispiel machen. Lass uns 3.45 0.6 machen, was gut funktionieren sollte. Sie können hier sehen, hier ist das Ergebnis im Dezimalformat Wenn wir jedoch 200/3 sagen , handelt es sich nicht um eine ganze Ganzzahl, sondern um eine Dezimalstelle Wenn wir die Anwendung ausführen, können Sie jedoch sehen, dass sie hier tatsächlich gerundet Ich glaube, es ist bis zur nächsten Ganzzahl heruntergefahren , die 66 ist Wenn wir jedoch 0,0 am Ende hinzufügen und die Anwendung ausführen, können Sie sehen, dass dies hier die richtige Antwort ist, 66,666 kommt immer wieder Dann wird auf sieben gerundet. Darauf sollten Sie achten , wenn Sie mit Dezimalzahlen arbeiten C sharp geht davon aus denn wenn Sie hier zwei Zahlen haben, ist diese 200 eine Ganzzahl, drei ist eine Ganzzahl. Keine dieser Dezimalzahlen, es ist nur das Ergebnis, das eine Dezimalzahl ist Was C-Sharp tut, ist zu sagen, oh, hey, hier ist eine Ganzzahl Oh, hey, hier ist eine Ganzzahl. Ich gebe dir das Ergebnis als Ganzzahl. Das ist ein bisschen nervig. Was Sie tun müssen, ist mindestens eine davon in eine Dezimalzahl zu ändern . Wenn Sie das tun, können Sie sehen, dass wir hier das wahre Ergebnis erhalten. Das ist nur etwas, was Sie wirklich beachten sollten wenn Sie mit der Division von Dezimalzahlen arbeiten. Der nächste Operator, den ich Ihnen zeigen werde, ist der Modulus-Operator Setzen wir das einfach als Ganzzahl zurück. Nun, was der Modulo-Operator macht, gibt Ihnen den Rest einer Berechnung Lassen Sie mich ganz schnell ein Beispiel machen. Der Modul wird durch eine Prozentmarke dargestellt. Hier, was das bedeutet, steht da, wie oft wird drei zu sechs Nun, aus drei wird zweimal sechs und dann gibt es keinen Rest. Das Ergebnis wird Null sein , weil es der Rest ist. Auch hier gilt: Wenn ich 22 mache, kommt 63 Mal zusammen, wieder perfekt, es bleibt kein Rest übrig. Wenn ich hier jedoch vier einfüge, wird aus vier einmal sechs. Es gibt jedoch einen Rest von zwei, also wird das Ergebnis zwei sein. Was der Modulus macht, gibt Ihnen den Rest einer Berechnung Nachdem Sie diese Zahl in diese aufgeteilt haben, wird aus 14 einmal sechs und der Rest ergibt zwei Wenn ich die Anwendung starte, erhalten wir zwei, genau wie im allerersten Beispiel, drei wird zweimal zu sechs und es gibt keinen Rest, das Ergebnis sollte Null sein. Modulus ist sehr nützlich , wenn wir wissen wollen, ob eine Zahl genau in eine andere Zahl passt Wenn das Ergebnis Null ist, wissen wir, dass es perfekt durch diese Zahl teilbar Das ist Modulus oder Modulo, wie auch immer Sie es nennen wollen Und es wird durch einen einzigen Prozentsatz repräsentiert , einfach so Jetzt möchte ich über die Reihenfolge der Operationen sprechen , wenn man mit Multiplikation, Addition, Subtraktion und all dem guten Zeug arbeitet Addition, Subtraktion und all dem guten Zeug Lassen Sie mich Ihnen ein Beispiel zeigen. Ich habe ein Ergebnis, das ist unsere Variable fünf multipliziert mit vier -2/7. Ich möchte das Ergebnis von fünf plus eins addieren Schauen wir uns dieses Beispiel an. Wenn Sie in der Vergangenheit viel Mathematik gelernt haben, können Sie diesen Abschnitt vielleicht überspringen. Es mag für Sie ziemlich offensichtlich sein, aber C sharp funktioniert ziemlich genau so wie Mathematik in der realen Welt. Wenn du diese Dinge jemals auf Facebook oder Instagram gesehen auf Facebook oder Instagram und sie sagen, oh, was ist die Antwort darauf? Und die Leute geben die falschen Antworten, weil sie die Reihenfolge der Abläufe nicht verstehen. Hier haben wir dieses Ding in der Mathematik, das Bid Mass oder Bodmass genannt wird Lass mich dir das jetzt zeigen. Bid Mass, manche Leute nennen es Bodmass. Es ist nicht wirklich wichtig. Der einzige Unterschied ist das Ich hier und das O hier. Aber sie bedeuten dasselbe. Also das Erste sind Klammern. Wenn wir eine Berechnung wie diese haben, passiert alles, was in den Klammern steht, zuerst. Fünf plus eins. Das passiert zuerst, also sechs. Und dann können wir das entfernen und es wird durch sechs ersetzt. Das nächste, was passiert, ist das I oder das O, das mit oder mit der Quadratwurzel von potenziert wird. Das Zeug haben wir hier nicht , also können wir das überspringen. Das nächste Ding ist Division. Als nächstes passiert die Division, und das ist 2/7. Ich bin mir nicht sicher, was 2/7 ist, es ist eine Dezimalzahl, aber das wird als Nächstes passieren Diese Berechnung hier. Das nächste, was passiert, ist Multiplikation. Das hier, das wird berechnet, als nächstes fünf multipliziert mit vier, was 20 ist Dann alle Additionen danach, dann wird das Ergebnis zu sechs addiert, gefolgt von einer Subtraktion, bis das allerletzte , was passiert, das hier ist Das ist die Reihenfolge, in der das berechnet wird. Es passiert nicht von links nach rechts. Fünf mal vier zum Mitnehmen, zwei. Es passiert immer in der Reihenfolge der Symbole, genau wie in der Mathematik Wenn wir zum Beispiel das Programm ausführen, nun, es kann alles geklärt werden. Für uns ist das Ergebnis 26. Das ist die Reihenfolge der Operationen. Etwas, das Sie beachten sollten , wenn Sie damit in C Sharp arbeiten. Das Letzte, worüber ich bei der Arbeit mit Zahlen sprechen werde , ist zwei hoch zwei, also vier. Falls Sie sich mit Mathematik nicht sehr gut auskennen, bedeutet die Potenz von einfach, wie oft sie mit sich selbst multipliziert wird Zwei hoch zwei ist dasselbe wie zwei multipliziert mit 22 zur Dreier zu sagen, bedeutet im Grunde zwei mal 22 multipliziert mit zwei multipliziert mit zwei Auch das ist es, was die Macht von ausmacht. Der Grund, warum ich Ihnen die Macht von zeige , ist, dass die Potenz von kein Symbol wie Multiplikation oder Subtraktion Wir müssen den sogenannten mathematischen Namensraum verwenden Schauen wir uns das jetzt an. Wenn ich Ergebnis sage, was die Variable ist, die wir hier definiert haben, dann sage ich Mathe MAT H mit einem Großbuchstaben M. Wenn ich hier auf das Punktsymbol drücke, gibt es viele verschiedene Dinge, die wir tun können. All dies ist hier in unsere C-Sharp-Bibliothek integriert, und wir können jedes davon verwenden. Schau, das Schild, die Autos, hellbraun, gekürzt, logarithmisch, all das ausgefallene Zeug Aber was ich einfach einsetzen werde, ist Macht, Kriegsgefangene repräsentiert wird Wenn wir hier Klammern öffnen, wird nach unserer ersten Zahl gefragt. Es heißt, dass eine Gleitkommazahl mit doppelter Genauigkeit potenziert wird. Nehmen wir an, wir wollen zwei hoch zwei betrachten. Es wird nach einem Doppelten gefragt, was eine Dezimalzahl ist. Ich werde 2,0 eingeben, weil es das im Dezimalformat haben will. Ich möchte es wieder auf die Potenz von zwei erhöhen es mit einem Semikolon beenden. Zwei hoch zwei heißt zwei, multipliziere mit zwei. Die Antwort sollte vier sein. Sie können hier sehen, dass die Antwort vier ist. Wenn wir zwei mit der Potenz von Drei machen wollen , sollte es acht sein. Sie können sehen, wohin das führt, 163264128. Da hast du's. So macht man die Macht von, aber nicht nur die Macht von. Sie können in diesem Matheunterricht hier tatsächlich viele Dinge anwenden , alle verschiedenen Dinge hier. Aber das ist ein Beispiel dafür, wie man die Macht von Zahlen nutzt und mit ihnen im Geschäft arbeitet. 10. 1-7. Benutzerinput erhalten: Werfen wir einen Blick auf die Interaktion mit unserer Software. In den meisten Fällen können wir, wenn wir unsere Anwendung ausführen, nur die Ergebnisse auf dem Bildschirm sehen. Aber jetzt möchte ich, dass Sie mit Ihrer Software interagieren. Sie können ihm einige Informationen geben. Schauen wir uns zum Beispiel an, wie man das mit einer Konsolenanwendung macht. Im Moment haben wir eine Beispielanwendung, sie druckt nur Ihren Namen auf den Bildschirm. Wenn ich das starte, heißt es nur, wie heißt du? Ich möchte hier meinen Namen eingeben können , zum Beispiel Robert. Und wenn ich dann die Eingabetaste drücke, möchte ich, dass es zum Beispiel Hallo Robert sagt . So etwas in der Art. Wir können die Lesezeile genau hier verwenden. Bisher haben wir diese Zeile nur benutzt, um die Anwendung anzuhalten, damit unser Fenster nicht geschlossen wird. Denn denken Sie daran, dass das Fenster ohne dies sofort verschwindet. Es hat jedoch eine Funktion, was Read Line tut. Es erfasst tatsächlich einige Eingaben von uns. Was passiert, wenn wir den Mauszeiger darüber bewegen? Es sagt dir tatsächlich, dass es die nächste Zeichenzeile aus dem Standardeingabestream liest Zeichenzeile aus dem Standardeingabestream Ziemlich kompliziert ist das nicht. Im Grunde genommen unsere Eingaben erfasst, wenn wir die Eingabetaste auf der Tastatur drücken. Das Ergebnis davon können wir in einer Zeichenfolge speichern. Wenn wir darüber nachdenken, können Sie die Zeichenfolge hier sehen. Das kommt zu uns zurück. Wir können eine neue Variable definieren. Wir nennen es Ergebnis. Wir könnten es Benutzereingabe nennen. Wir können es nennen, wie wir wollen. Was wir jetzt tun, wir erhalten das Ergebnis dieser Operation, das ist eine Lesezeile , alles aufnimmt , was wir dort eingeben, nachdem wir die Eingabetaste gedrückt haben , und es in dieser Variablen hier speichert Dann möchte ich zu dem Namen, den Sie hier eingegeben haben, Hallo sagen Namen, den Sie hier eingegeben haben, Hallo Denken Sie daran, wie man Zeichenketten verkettet. Wir haben hier unsere erste Zeichenfolge, hallo. Zeichenketten sind in doppelte Anführungszeichen eingeschlossen. Dann wollen wir eine Zeichenfolge mit dem Ergebnis dieser Operation verbinden , die ebenfalls eine Zeichenfolge ist. Das werden wir dort machen. Wir wollen wirklich begeistert klingen. Wir werden auch ein Ausrufezeichen setzen. Wir verbinden drei Fäden. Hallo, das Ausrufezeichen und das Ergebnis, eine Zeichenkettenvariable aus dem Ergebnis der Benutzereingabe Lassen Sie uns diese Anwendung ausführen. Jetzt heißt es, was ist dein Name? Ich werde Robert setzen. Wenn ich die Eingabetaste drücke, haben wir nichts daran liegt , dass wir ihm nicht gesagt haben, dass das Konsolenfenster geöffnet bleiben soll. Lass uns das wieder da hinstellen. Drücken Sie die Play-Taste, geben Sie unseren Namen Hit ein und jetzt heißt es Hallo Robert. Es ist ziemlich einfach, nicht wahr? Und so erfasst man Benutzereingaben in einer Konsolenanwendung. 11. 1-8. Übung - Das Zahlenmultiplier-Spiel: Okay, schauen wir uns jetzt ein kurzes Beispiel an. Eine kleine praktische Anwendung, um Ihr Wissen über die Arbeit mit Zahlen in C Sharp zu testen . Ich werde auch einige der Kenntnisse testen , die Sie bisher gelernt haben. Und ich werde das Konzept der Konvertierung von Datentypen vorstellen , Konvertieren einer Zeichenfolge in eine Ganzzahl. Schauen wir uns das jetzt an. Also was wir tun werden, wir werden einen Beispielrechner bauen, aber unser Rechner wird nur zwei Zahlen miteinander multiplizieren. Es ist kein sehr schicker Taschenrechner. Fangen wir hier an. Wir heißen unsere Zahlenzange willkommen. Wir möchten dem Benutzer sagen, was das ist. Wir werden sagen, oh, hey, willkommen zu unserem Zahlenmultiplikator Dann werden wir nach ihrer ersten Zahl fragen. Das ist die erste Zahl, sie werden mit einer anderen Zahl multipliziert. Was ist deine erste Zahl? Wir fragen den Benutzer nach seiner ersten Nummer. Um Benutzereingaben zu erfassen, verwenden wir die Konsolenlesezeile. Dann müssen wir das Ergebnis in einer Variablen speichern, wir nennen diese erste Zahl. Jetzt enthält die erste Zahl die erste Nummer des Benutzers. Jetzt sehen Sie sofort diese rote Linie unter der Leselinie der Konsole. Wenn wir mit der Maus darüber fahren, was wir hier sehen können , kann die Typzeichenfolge nicht implizit in int konvertiert werden Das heißt, okay, schau, die Lesezeile gibt dir eine Zeichenfolge, weil wir nach der Eingabe des Benutzers fragen Und sie könnten einen Satz schreiben, sie könnten viele Buchstaben schreiben. Wir wissen im Grunde nicht, was der Benutzer hier eingeben wird, aber wir wollen eigentlich eine Ganzzahl daraus ziehen. Der Benutzer könnte Hallo eingeben und wir versuchen, Hallo in eine Ganzzahl zu setzen, also wird es dort ein Problem geben. Was wir tun wollen, ist die Convert-Bibliothek zu verwenden. Das heißt, wenn Sie convert to a capital C eingeben und dort Punkt drücken, dort Punkt drücken, bekommen wir viele Optionen, die wir hier machen können. Was konvertiert? Es gibt uns viele verschiedene Methoden zur Konvertierung von Datentypen. Wir möchten eine Zeichenfolge konvertieren, da dies die Eingabe des Benutzers ist. Wir wollen das Ergebnis als Ganzzahl, die unsere erste Zahl sein wird. Wenn ich hier drücke, will ich zwei int int 32. Vielleicht habe ich das noch nicht erklärt, aber ein Standard-INT wird auch als Int 32 betrachtet. Es ist eine 32-Bit-Ganzzahl. Sie können eine längere Ganzzahl verwenden, die mehr Ziffern unterstützt, oder sogar eine kleinere Ganzzahl. Int 32 ist eine Standard-Ganzzahl in C Sharp. Wenn ich dazu Klammern öffne, wird nach einem Zeichenkettenwert gefragt Dies ist die Zeichenfolge , die in eine Ganzzahl umgewandelt wird , und unser Zeichenkettenwert, nun, das ist das Ergebnis der Benutzereingabe Das ist die rote Linie der Konsole. Das stellen wir da hin. Wir schließen unsere Klammern und setzen einen samischen Doppelpunkt ein Jetzt können Sie sehen, dass die rote Linie weg ist. In ähnlicher Weise könnten Sie das Ergebnis einfach in einer neuen Variablen, einer Zeichenkettenvariablen, speichern das Ergebnis einfach in einer neuen Variablen, und diese hier einfügen. Es ist nicht wirklich wichtig, aber wir machen alles in einer Zeile. Als Nächstes wollen wir uns die zweite Nummer vom Benutzer holen , die zweite Nummer. Das wird eine neue Variable sein, die zweite Zahl genannt wird. Wir möchten den Benutzer fragen, wie seine zweite Nummer lautet. Jetzt haben wir hier die erste Zahl des Benutzers in dieser Integer-Variablen und hier die zweite Nummer des Benutzers. Jetzt wollen wir das Ergebnis, das das Ergebnis der Berechnung der ersten Zahl sein wird. Denken Sie daran, dass die Multiplikation das Semikolon der zweiten Zahl von Asterix ist Asterix Dann wollen wir dem Benutzer sagen, was das Ergebnis ist. Lass uns das machen. Wir sagen, das Ergebnis ist, dann werden wir die Zeichenketten miteinander verketten , was das Dann wollen wir das, damit sich das Fenster nicht schließt. Lassen Sie uns die Anwendung hier ausführen. Schau, willkommen zu unserem Zahlenmultiplikator. Was ist deine erste Zahl? Warum nicht Nummer vier? Was ist deine zweite Zahl? Wie wäre es mit Nummer fünf? Und das sollte 20 ergeben. Es heißt, das Ergebnis ist 20. Ziemlich cool, nicht wahr? Auch hier können wir verschiedene Zahlen verwenden, aber das ist eine sehr vereinfachte Ansicht darüber, wie wir Benutzereingaben mithilfe der Leseleitung der Konsole abrufen können, wie wir Datentypen konvertieren können Wir konvertieren also eine Zeichenfolge , die die Eingabe des Benutzers ist, eine Ganzzahl, die hier unsere Variable ist Wenn wir dann unsere ganzen Zahlen miteinander multiplizieren, erhalten wir das Ergebnis und teilen dem Benutzer nur das Ergebnis Das ist eine sehr vereinfachte Art , mit Zahlen in C. Sharp zu arbeiten 12. 2-1. Methoden: Jetzt möchte ich über Methoden in Sharp sprechen. Wir haben bisher tatsächlich viele Methoden verwendet. Zum Beispiel ist die rechte Zeile eine Methode, Lesezeile ist eine Methode, bei der der Math-Helfer eine Methode war. Jetzt werden wir unsere eigene Methode erstellen. Bei der Erstellung von Methoden in C Sharp haben sie alle einen Zweck. Wenn Sie einen Job haben , der normalerweise mehr als einmal ausgeführt wird , oder einen komplizierten Job, können Sie ihn in eine separate Methode einfügen. Wenn ich Methode sage, finden Sie hier ein Beispiel für eine Methode. Dies ist die Hauptmethode. Alles innerhalb dieser Methode ist in diesen geschweiften Klammern enthalten Hier ist die Hauptmethode eine spezielle Methode, wenn unsere Software standardmäßig ausgeführt wird Das.NET Framework, das alles ist , worauf C Sharp aufgebaut ist, sucht nach einer speziellen Methode namens main, und sie muss diesen Namen haben Und alle Methodennamen sind einzigartig, sodass sie nicht denselben Namen haben können, genau wie Variablen Sobald es die Hauptmethode gefunden hat, führt es den gesamten Code in diesen beiden geschweiften Klammern aus Hier sind der einzige Code, den wir haben, zwei Zeilen. Wenn wir die Anwendung ausführen, können wir Hello World sehen. Und in der nächsten Zeile bleibt dieses Fenster für uns geöffnet. Schauen wir uns nun die Erstellung einer brandneuen Methode an, bei der Static Void steht. Ich werde das in einem späteren Tutorial behandeln. Lassen Sie uns es vorerst sehr einfach halten. Nachdem wir static void geschrieben haben. In diesem Fall wollen wir der Methode einen Namen geben. Denken Sie daran, dass ich gesagt habe, dass Methoden den Zweck haben müssen , die Dinge zu organisieren. Im Allgemeinen sollten sie einen Zweck haben. Unsere neue Methode, was ich will, ihr Zweck, ihre Aufgabe ist es , dem Benutzer Hallo Welt zu sagen. Das ist das einzige, was sie tun wird. Jetzt weiß ich, was es ist, was es bewirken soll. Ich kann meine Methode mit einem Namen benennen, der für Worte Sinn ergibt. Ich nenne es, sag Hallo Welt. Das wird unser Methodenname sein. Der nächste Abschnitt ist nun das , was als Parameter bezeichnet wird. Ich werde später darüber sprechen. Ich werde es vorerst einfach halten. Machen Sie eine offene und eine geschlossene Klammer. Öffnen Sie als Nächstes die Curbrace und schließen Sie die Curbrace . Einfach so, du kannst sehen, dass es das nachahmen kann. Unser gesamter Code für unsere Methode wird hier in diesem hervorgehobenen Abschnitt zwischen diesem und diesem gespeichert Alle unsere Funktionen für diese Methode finden Sie hier. Wir möchten dem Benutzer Hallo Welt sagen. Nun, wir wissen, wie das geht, wir haben es schon einmal behandelt. Das ist diese Codezeile genau hier. Unsere Methode sagt Hallo Welt. Ihre Aufgabe ist es, Hallo Welt zu sagen. Das wird das also einfach auf das schwarze Fenster drucken. Im Moment, wenn wir unsere Software ausführen , wird sie eigentlich nichts bewirken. Warum ist das so? Das liegt daran, die Hauptmethode standardmäßig ausgeführt wird. Also dieser Abschnitt hier, und das ist das einzige, was von unserer Hauptmethode ausgeführt wird . Davon wissen wir nichts. Was wir hier tun müssen, ist zu sagen, oh, hey, kannst du unsere Methode ausführen um unsere Methode auszuführen? Das machen wir einfach. Wenn wir die Anwendung starten, wird die Hauptmethode ausgeführt. Es geht runter, diese Zeile wird ausgeführt. Wenn diese Zeile ausgeführt wird, geht der Code hier rein. Diese Zeile wird ausgeführt. Die Methode hat ihre Arbeit beendet. Es geht zurück bis hierher und endet dann mit diesem Abschnitt hier. Wenn Sie eine Methode haben, geht sie raus, dann wieder rein und geht weiter. Wenn wir die Anwendung ausführen, können wir jetzt Hello World sehen. Das liegt daran, dass wir jetzt unsere Methode aufrufen. Nur um noch einmal zusammenzufassen, ob ich zu schnell gegangen bin oder es ohne diese Zeile kompliziert ist, unsere Methode wird niemals ausgeführt Wenn wir unsere Software ausführen, können wir viele davon erstellen 3.000 5.000 1.000 Auch hier müssen sie alle einen eindeutigen Namen haben. Aber wenn wir die Software ausführen, wird nichts davon ausgeführt. Und das liegt daran, dass wir dem Computer nicht wirklich sagen , dass er sie ausführen soll, um eine Methode auszuführen. Auch hier machen wir das wieder, wenn wir diese Methode ausführen wollen, sehr ähnlich usw. So führt man die Methode aus, so definiert man die Methode Und das ist eine sehr vereinfachte Ansicht darüber, wie wir eine sehr einfache Methode in C Sharp einrichten können eine sehr einfache Methode in C Sharp einrichten 13. 2-2. Methodenparameter: Jetzt möchte ich über Methodenparameter sprechen. Ein Parameter ist nur eine ausgefallene Art einer Methode einige Informationen zu geben. Bitteschön. Hier sind ein paar Informationen. Arbeite damit. Wir werden ein Beispiel verwenden. Hier ist ein Beispiel. Wir sagen dem Benutzer nur Hallo Welt . Sehr einfach. Aber was ist, wenn wir wollen, dass diese Methode Hallo John, Hallo Harry oder Hallo Roberto sagt ? Diese Namen kann uns der Benutzer zur Verfügung stellen. Hier ist ein Beispiel. Wir werden dem Benutzer eine Frage stellen. Wir werden sagen, wie heißt du? Was ist dein Name. Und dann wollen wir die Benutzereingabe erhalten , die als Konsolenpunkt lesbar ist. Auf diese Weise erhalten wir die Eingabe des Benutzers. Und wir speichern das in einer Zeichenfolge. Ich nenne es einfach einen Namen und frage nach dem Namen des Benutzers. Der Benutzer gibt einige Informationen ein und wir fügen sie in eine Variable namens Name Nun, unsere Methode hier, ich möchte Hallo sagen, und dann möchte ich, dass sie das Ergebnis dieser Variablen anzeigt, die der Name des Benutzers sein wird Wir wissen nicht, was das ist. Der Benutzer kann alles eingeben, was er will. Jetzt hat sich die Aufgabe dieser Methode geändert. Ich will nicht, dass es Hallo Welt heißt. Ich möchte, dass es dem Benutzer Hallo sagt. Jetzt werde ich Hallo Benutzer sagen. Ihre Aufgabe hat sich geändert, als ich die Methode aufgerufen habe. Auch hier müssen wir sicherstellen , dass das hier passt. Es heißt nicht mehr Hallo Welt. Ich möchte, dass es Hallo zum Namen des Benutzers sagt. Das ist unsere Variable namens Name. Aber schauen Sie, Sie können sehen, dass sich hier unten eine rote Linie befindet. Und das liegt daran, dass unsere Methode hier von dieser Methode isoliert ist. Sie weiß nichts über diese Variable , weil sie innerhalb dieser Methode, dieser Methode, definiert wurde , sie weiß nicht wirklich davon. So können wir Parameter verwenden , um dieses Problem zu lösen. Was ein Parameter ist, wir können ihn innerhalb dieser Klammern definieren. Genau hier werden wir den Namen der Zeichenfolge eingeben. Jetzt können Sie sehen, dass diese rote Linie verschwunden ist. Jeder Parameter, den Sie hier in eine Methode eingeben , steht in diesen offenen Klammern Sie können diese Hauptmethode sehen. Nun, dieser Abschnitt hier, , der hat einen Parameter, er hatte die ganze Zeit einen Parameter. Auch hier können wir, wenn wir eine Methode definieren, unsere eigenen Parameter hinzufügen. Ich habe einen so genannten Parameter hinzugefügt und er heißt Name, es ist eine Typzeichenfolge. In dieser Methode verwenden wir nun diese Variable, diesen Parameter, wenn wir unsere Methode von der Hauptmethode aus aufrufen. Sie können jetzt sehen, dass es hier eine rote Linie gibt. Wenn wir mit der Maus darüber fahren, können Sie sehen, dass es kein Argument gibt Jetzt ist Argument gleichbedeutend mit Parameter. Es ist dasselbe Es wurde kein Parameter angegeben, der dem erforderlichen Parameternamen entspricht. Es heißt im Grunde, dass diese Methode jetzt eine Zeichenfolge benötigt. Wir können es nicht mehr so nennen. Was wir tun, wir nehmen unsere Namensvariable, die das Ergebnis der Benutzereingabe ist, und fügen sie dort ein. Und jetzt können Sie sehen, dass wir die Informationen des Benutzers sammeln. Wir geben die Informationen dieses Benutzers an unsere neue Methode namens say, hello user weiter. Also geben wir ihr den Namen des Benutzers. Dann kommt der Code hier rein. Der Name entspricht jetzt dem Wert , der ihm übergeben wird. Und das ist unser Parameter. Jetzt verwenden wir unseren Parameter indem wir ihn in das schwarze Fenster ausgeben Dann kommt die Codeausführung wieder raus. Und dann lassen wir das Fenster wieder offen, nur damit es nicht verwirrend ist. Wir könnten es nennen, wie wir wollen. Wir könnten den Namen des Benutzers sagen. Wir könnten es Schinken-Sandwich nennen. Es spielt keine Rolle. Sie können hier die rote Linie sehen, weil sie dieselbe sein muss. Aber du kannst hier sehen, dass es hier keine rote Linie gibt. Und das liegt daran, dass wir es genau hier definieren. Auch wenn der Wert hier in der Methode enthalten ist, wir ihn nennen, wenn wir hier ankommen können wir ihn nennen, wenn wir hier ankommen, wie wir wollen. Es wird immer noch diesen Wert haben, aber es muss nicht derselbe Name sein, wie hier. Es muss nicht so sein und genau denselben Namen haben. Es kann sein, muss es aber nicht. Das sollten Sie im Hinterkopf behalten. Wenn der Parameter übergeben wird, wird der Wert übergeben, es wird hier eine ganz neue Variable neu definiert Aber mit diesem Wert hoffe ich, dass das Sinn macht, wenn wir die Anwendung ausführen Jetzt sagen wir, wie heißt du? Roberto. Jetzt kannst du sehen, dass es Hallo sagt, Roberto. Wir können das noch einmal ausführen. Wir können Hallo sagen, Henry. So funktionieren Parameter in einer sehr einfachen Ansicht. Eine letzte Sache: Wir müssen keinen Parameter haben. Wir können viel haben. Wir könnten noch einen anderen Typ haben , wie Alter, der eine Ganzzahl ist. Jetzt möchte ich nach dem Alter des Benutzers fragen. Was ist dein Alter? Denken Sie daran, dass das Alter eine Ganzzahl ist, weil es eine Zahl ist. Ich nenne es einfach Alter. Jetzt haben wir die rote Linie, weil das eine Zeichenfolge ergibt und wir sie in eine Ganzzahl setzen wollen, was nicht funktionieren wird, aber wir haben das schon einmal behandelt. Wir werden es verwenden, wir wollen es in eine Ganzzahl umwandeln, die 32 Bit ist, und dann alles in Klammern setzen . Jetzt haben wir die Zeichenfolge vom Benutzer in eine Ganzzahl umgewandelt vom Benutzer in eine Ganzzahl Wir setzen es in eine Integer-Variable namens Alter ein. Jetzt haben wir wieder unsere rote Linie, das liegt daran, dass wir zwei Parameter in unserer Methode haben. Jetzt nenne ein Alter. Wenn wir den Mauszeiger über diese rote Linie bewegen, können Sie sehen, dass sie jetzt eine Zeichenfolge und eine Ganzzahl erfordert Wenn wir diese Methode aufrufen, müssen wir diese Informationen hier hinzufügen, und wir können ein Komma verwenden Jetzt fragt sie sogar, sie sagt uns sogar, was wir brauchen Alter, wir nehmen unser Alter und tragen es hier ein. Jetzt haben wir eine Methode mit zwei Parametern. Und wir übergeben ihr zwei Parameter. Wir machen jetzt nichts damit. Lass uns etwas damit machen. Wir werden jetzt sagen, Alter ist Alter, wenn wir die Software ausführen. Lass uns das machen. Wie ist dein Name? Harry. Wie alt bist du? Ich bin 67 Jahre alt. Hallo Harry. Du bist 67 Jahre alt. Auch hier können wir zehn Parameter haben, wenn wir wollen. Wir könnten verschiedene Datentypen in B haben, alles verschiedene Dinge. Auch hier gilt: Wenn du mehr hinzufügen willst, ist es nur eine weitere Sache und wie du sie weitergibst. Auch hier verwendest du A. So funktionieren Parameter im Allgemeinen mit Methoden in C. Sharp. 14. 2-3. Methodenrückgaben: Lassen Sie uns darüber sprechen Informationen aus einer Methode zurückzuholen. Um das zu tun, verwenden wir das Schlüsselwort return. Schauen wir uns an, wie Informationen aus einer Methode zurückgegeben werden. Wir haben hier eine Beispielanwendung. Es fragt nach dem Namen des Benutzers. Es speichert den Namen des Benutzers in einer Variablen sagt dem Benutzer dann Hallo. Was ich jetzt tun möchte, ist eine Methode zu erstellen, deren Aufgabe es ist, nach dem Namen des Benutzers zu fragen und den Namen des Benutzers zu ermitteln und ihn uns zurückzugeben. Das wollen wir tun. Um das zu tun, werden wir jetzt eine neue Methode entwickeln. Am einfachsten ist es, diese zu kopieren, alles daraus zu löschen und ihr einen eindeutigen Namen zu geben. Ihre Aufgabe ist es, nach dem Namen eines Benutzers zu fragen . Wir wissen, wie das geht. Wir haben es genau hier. Wir fragen nach dem Namen des Benutzers und speichern ihn hier in einer Variablen. Als wir zuvor über Parameter gesprochen haben , geht es darum, Informationen in eine Methode einzubringen. Wir definieren sie hier und geben Informationen von main ein. Informationen aus Main zurückzuholen, das ist es, womit wir uns gerade befassen, und das wird als Return-Schlüsselwort bezeichnet . Wir geben Informationen aus einer Methode zurück, sodass wir sie hier verwenden können. Wenn wir unsere Anwendung starten, werden wir nach dem Namen eines Benutzers fragen . Wir erhalten den Namen des Benutzers und setzen ihn in die Variable ein. Jetzt müssen wir den Namen des Benutzers wieder rauswerfen und ihm dann Hallo sagen. Im Moment können wir das nicht tun, weil es nicht versteht, was diese Variable bedeutet, weil sie in unserer Methode definiert ist. Also müssen wir das hier rausholen und es hier definieren. Um das zu tun, richten wir standardmäßig einen sogenannten Rückgabedatentyp ein. Hier können Sie sehen, dass es einen auf Main Even und einen hier gibt. Es heißt Void. Void ist wie ein schwarzes Loch. Es ist wie das Nichts. Es ist nichts. Aber was wir tun wollen, ist, unsere Zeichenkettenvariable hier zurückzugeben, zurück aus der Methode. Wir ersetzen unser Nichts als Leere durch eine Zeichenfolge. Jetzt haben wir hier einen Rückgabedatentyp für diese Methode eingerichtet, eine Zeichenfolge, und wir möchten diese Variable hier zurückgeben Was wir tun, wir nehmen unsere Variable, wir verwenden das Return-Schlüsselwort. Wir geben ein Leerzeichen ein, setzen unsere Variable und dann alle Zeilen mit einem Semikolon. Was passiert hier? Wir fragen nach dem Namen des Benutzers, wir stopfen ihn in eine Variable und dann geben wir die Variable aus dieser Methode zurück Sie können sehen, wenn wir die Variable hier zurückgeben, diese Variable vom Datentyp Zeichenfolge ist dass diese Variable vom Datentyp Zeichenfolge ist, die mit unserem Methodenheader übereinstimmen muss , der genau diese Zeile hier ist Sie können also sehen, dass wir eine Zeichenfolge vom Datentyp zurückgeben, was hier unsere Variable ist. Jetzt, zurück zu unserer Hauptmethode. Wir nennen das, aber wir bekommen eigentlich keine Informationen daraus. Wir haben das tatsächlich schon einmal gemacht. Sie können die Zeile mit den Punkten auf der Konsole lesen sehen. Das ist eine Methode, aus der wir tatsächlich Informationen gewinnen. Und genau so machen wir das. Wir können das einfach machen und alles funktioniert wieder. Denken Sie daran, als ich gesagt habe , dass das nicht dasselbe sein muss, wir könnten zum Beispiel einfach einen Namen sagen. Sie können sehen, dass es immer noch funktioniert, weil Main nur über alles Bescheid weiß, was in Maine definiert ist. Fragt nach dem Namen eines Benutzers, weiß nur über die hier definierten Dinge Bescheid, es sei denn, Sie übergeben einen Parameter oder geben etwas zurück. Lass uns das noch einmal durchgehen. Lassen Sie uns die Anwendung tatsächlich ausführen. Wir können also sehen, dass wir die Anwendung ausführen. Wie ist dein Name? Bob. Und hallo Bob. Ziemlich einfach? Nun, es sieht einfach aus, bis ja. Schauen wir uns noch einmal an, was passiert , damit es absolut Sinn macht. Wir führen die Anwendung aus und fragen nach dem Namen des Benutzers. Die Codeausführung erfolgt also hier, es gibt keinen Parameter, also machen wir weiter. Was ist dein Name? Der Benutzer gibt seinen Namen ein, hier speichern wir ihn in einer Variablen namens Name des Benutzers. Wir geben diese Informationen aus der Methode zurück, die dann im Namen gespeichert wird. Das ist das Ergebnis dieser Methode. Name des Benutzers, wir geben ihn zurück Es ist das Ergebnis dieser Methode, das jetzt in dieser Variablen namens name gespeichert ist . Wir geben dann einfach den Namen für das schwarze Fenster aus und lassen das schwarze Fenster geöffnet So funktionieren Rückgaben mit Methoden in C Sharp. Denken Sie daran, dass Parameter Informationen eingeben und bei Rückgabe Informationen wieder ausgegeben 15. 2-4. Methoden-Overloading: Jetzt schauen wir uns etwas an, das als Methodenüberladen bezeichnet wird Was bedeutet das? Schauen wir uns dieses Beispiel an. Hier definieren wir hier zwei Variablen, beide vom Datentyp Integer namens Nummer eins und Nummer zwei. Was wir tun, wir rufen eine Methode namens ad auf, die wir hier erstellt haben. Sie akzeptiert zwei Integer-Parameter und addiert nur die Zahlen zusammen. Es gibt das Ergebnis zurück, das hier eine Ganzzahl ist. Und dann geben wir das Ergebnis auf dem Bildschirm aus. Sehr einfach. Die Antwort sollte 20 2022 lauten. Wir haben die richtige Antwort. Was ich jetzt sagen möchte, ist, was ist , wenn ich zwei Doppelgänger zusammenzählen möchte Lassen Sie uns diese ganzen Zahlen in Doppelzahlen umwandeln. Jetzt habe ich hier zwei Doppelgänger. Das könnten 6,4 sein und das könnte zum Beispiel 16,2 sein. Sie können jetzt sehen, dass wir hier unten eine rote Linie haben. Weil unsere Parameter ganze Zahlen sind. Es werden hier ganze Zahlen erwartet. Aber wir wollen immer noch diese Methode, wir wollen immer noch ganze Zahlen addieren können Ich denke, wir könnten zum Beispiel eine Methode aufrufen und dann vielleicht eine andere Methode und dann vielleicht eine andere Methode namens Double Und dann würde das zwei Doppelgänger erfordern. Dann würde die andere zum Beispiel zwei ganze Zahlen annehmen. So könnten wir das Problem umgehen. Dann hätte das natürlich einen Rückgabetyp als Double. Sie können sehen, wohin das führt, aber was ist , wenn wir zum Beispiel zwei Dezimalzahlen oder zwei Gleitkommazahlen zusammen addieren wollen zum Beispiel zwei Dezimalzahlen oder zwei Gleitkommazahlen zusammen Dann können Sie sehen, dass wir für jeden von diesen eine Methode haben müssen für jeden von diesen eine Methode Das ist ziemlich mühsam und kann unser Programm wirklich aufblähen Aber wir können etwas verwenden, das als Methodenüberladen bezeichnet wird Das ermöglicht es uns, eine Methode zu haben, ihr aber unterschiedliche Parameter zu geben , aber mit demselben Namen Jetzt kann eine Methode nur dann denselben Namen haben wenn beispielsweise die Parameterdatentypen oder die Anzahl der Parameter unterschiedlich sind. Kehren wir zu unserem vorherigen Beispiel zurück, in dem wir hier zwei ganze Zahlen zusammenaddiert haben Was wir dann tun können, ist diese Methode zu kopieren. Wir behalten zum Beispiel den gleichen Namen bei, aber hier addieren wir eigentlich zwei Doppelzahlen und nicht zwei ganze Zahlen Sie können sehen, was ich hier jetzt habe, sind zwei Methoden mit genau demselben Namen, außer dass diese zwei ganze Zahlen akzeptiert und eine Ganzzahl zurückgibt Und diese nimmt zwei Doppelungen und gibt eine Verdoppelung zurück. Wenn wir jetzt unsere Methode hier aufrufen, wenn ich nur diese Klammern öffne, haben wir jetzt diese kleinen Das hatten wir vorher nicht, weil wir nur eine Methode mit einem Satz von Parametern hatten Und das zeige ich dir jetzt. Wenn ich hier die Klammern öffne, siehst du, dass es keinen schwarzen Pfeil gibt Wir haben nur eine Definition für die Methode add. Aber sobald ich die zweite hier hinzufüge, stehen uns jetzt mehr Optionen zur Verfügung. Jetzt können wir zwei ganze Zahlen addieren und wir können auch zwei Doppelzahlen addieren Dies ist ein Beispiel für das Überladen von Methoden in C Sharp. Es ermöglicht Ihnen lediglich, verschiedene Optionen für eine Methode mit demselben Namen zu haben verschiedene Optionen für eine Methode mit demselben Namen Sie können sehen, dass C Sharp bereits Methoden eingebaut hat , die dies nutzen. Wenn wir zum Beispiel etwas in die Konsole schreiben, können Sie sehen, ob ich genau dasselbe mache, diese Methode ist tatsächlich schon 18-mal überlastet Sie können also sehen, dass es ein sehr beliebtes Prinzip in der Shop-Programmierung ist, also hoffe ich, dass Ihnen das geholfen hat, und dies ist ein Beispiel für das Überladen von Methoden in C-Shop 16. 3. Kommentare und XML-Zusammenfassungs-Tags: Jetzt möchte ich über etwas sehr Wichtiges sprechen. Wenn Sie Ihr Leben viel einfacher machen oder das Programmieren ernster nehmen möchten, dann müssen Sie Kommentare verwenden. Was sind also Kommentare? Wenn Sie eine sehr komplexe Anwendung oder eine sehr komplexe Codezeile haben , ist sie wirklich lang und vielleicht wussten Sie zu der Zeit, was das bedeutet. Aber wenn Sie ein oder zwei Jahre später darauf zurückkommen, haben Sie vielleicht völlig vergessen, was das bedeutet oder wie verrückt Sie zu der Zeit getippt Deshalb sind Kommentare sehr nützlich. Es ist hauptsächlich eine Erinnerung für Sie selbst, aber wenn Sie mit einem Team von Leuten zusammenarbeiten, erfahren sie auch, was der Code macht, ohne dass sie die ganze Komplexität lesen und verstehen müssen. In C Sharp können wir Kommentare auf drei Arten machen. Der erste ist ein einzeiliger Kommentar. Das könnten wir tun. Du kannst zum Beispiel sehen, wenn ich einen Kommentar hinterlasse, er grün ist. Nun, dieser Kommentar hier, er wird nicht von der Software ausgeführt , wenn Sie Ihre Software produzieren, wie z. B. ein EXC für Windows Er wird nicht hineinkompiliert, sodass Sie mit den Kommentaren weder Speicherplatz noch Megabyte verschwenden Diese sind wirklich nützlich. Auch hier gilt: Wenn Sie etwas wirklich Komplexes haben, sagt es Ihnen nur, was die nächste Zeile bewirkt. So können wir Kommentare zu so ziemlich jeder Zeile hinzufügen, die wir wollen. Wir können sie hinter eine Zeile setzen. Auch hier werden sie nicht überfahren, also gibt es keine rote Linie darunter. Und es sagt dir einfach wirklich , was die nächste Zeile bewirkt. Im Allgemeinen platzieren die Leute den Kommentar über dem Code und nicht daneben, aber Sie können ihn daneben platzieren , wenn Sie möchten. Lassen Sie uns hier einfach ein paar Kommentare platzieren. Sie können hier ungefähr sehen, wie es funktioniert. Ich würde sagen, wir wissen, dass diese Leitung das schwarze Fenster offen hält. Also kann ich einen Kommentar abgeben, der besagt, dass das Fenster geöffnet bleibt. Hier heißt es, sag Hallo zum Benutzer. Ich könnte einen Kommentar hinterlassen , in dem Hallo gesagt wird. Wenn ich ein Jahr später darauf zurückkomme und alles über das Einkaufen vergessen habe, weil das bei Sprachen immer passiert. Sie können das öffnen und wissen sofort , was jede dieser Zeilen bewirkt. Du willst mit Kommentaren nicht verrückt werden. Sie möchten nicht, dass jede Zeile einen Kommentar enthält. Aber auf jeden Fall, wenn du etwas nicht verstehst, dann füge dort auf jeden Fall einen Kommentar ein, denn das wird dich wieder daran erinnern und du kannst viel schneller darauf zurückkommen. Das ist ein einzeiliger Kommentar. Als Nächstes können Sie einen mehrzeiligen Kommentar , der aus einem Schrägstrich gefolgt von einem Asterix besteht Wenn ich dann die Eingabetaste drücke, können Sie sehen, dass Asterix in jeder Zeile bis ich sie mit einem weiteren Schrägstrich beende Jetzt ist alles, was ich hier eintippe, alles im Kommentar. Dies ist nützlich, wenn Sie vielleicht eine Methode oder eine sogenannte Klasse vorstellen möchten. Das ist die ganze Sache, mit der wir gerade arbeiten. Nehmen wir an, Sie arbeiten in einem Team von zehn Personen, die ganz oben in der Akte stehen. Sie wollen sagen, wer es gemacht hat, denn wenn es ein Problem gibt, dann können sie sagen, okay, Bob hat den ganzen Abschnitt der Software geschrieben. Wir wissen es, weil der Autor Bob ist, dann kann Bob, wenn er diesen Teil des Programms macht, wenn er diesen Teil des Programms macht, sagen: Ich habe das gemacht, hasse mich nicht. Dann kann er zusammenfassen, was es ist. Es ist ein Musikplayer, es ist großartig, alles, was er will, da drin Es liegt also wirklich an dir. Aber so macht man einen mehrzeiligen Kommentar. Sie sind nützlich, um zu sortieren, um vielleicht herauszufinden, wer die Datei geschrieben hat und vielleicht ungefähr, was sie tut. Auf diese Weise müssen die Leute nicht jede Methode lesen und versuchen herauszufinden, was diese Datei macht. Im Allgemeinen stehen mehrzeilige Kommentare am Anfang von Dateien, vielleicht auch hier oben, sodass die Leute das Erste sehen können oder es kann über etwas sehr Kompliziertes gehen, wie eine Methode oder etwas Ähnliches, dort würden die Leute im Allgemeinen einen mehrzeiligen Kommentar verwenden. Wenn Sie zum Beispiel viele einzeilige Zeilen schreiben möchten , ist der letzte Kommentar, über den ich sprechen möchte , ein sogenanntes XML-Zusammenfassungs-Tag Nun, es ist nicht wirklich wie ein Kommentar wie dieser an sich, aber er gibt dir wichtiges Feedback Es gibt dir in einfachem Englisch Feedback darüber, was vielleicht die nächste Codezeile tut. Aber wir können diese vielleicht für Methoden oder ähnliches verwenden. Wenn Sie eine komplizierte Methode haben, vielleicht ist sie etwa 100 Zeilen lang, sie macht all diese ausgefallenen Sachen. Vielleicht wird der Name der Methode ihr nicht wirklich gerecht. Es könnte heißen, nach dem Namen des Benutzers fragen, aber es macht viele andere Dinge da drin. Vielleicht gibt es etwas zurück, das vielleicht etwas kompliziert ist oder es hat viele Parameter und Sie wissen vielleicht nicht unbedingt, was sie bedeuten. Wir können ein sogenanntes XML-Zusammenfassungs-Tag verwenden um dies zu erweitern, wobei ich meine Methode nenne. Hier bewege ich den Mauszeiger darüber, Sie können sehen, dass es nicht wirklich viel aussagt. Da steht Schnur Programm, frag nach dem Namen des Benutzers. Wenn ich jedoch über diesen einen Punkt auf der Konsole höre, sehe ich mir all die Informationen dort an. Es heißt, liest die nächste Zeichenzeile, es sagt mir, was es zurückgibt. Es sind viele verschiedene Informationen. Ich denke, oh, nun, wo ist das auf meinem? Wie richte ich das ein? Und das ist ein sogenanntes XML-Zusammenfassungs-Tag. hier über unserer Methode Sie hier über unserer Methode drei Schrägstriche 12 Und wenn Sie die dritte machen, erstellt sie diese nette kleine Vorlage für uns Es ist im XML-Format. Hier ist der Tag mit der offenen Zusammenfassung, hier der abschließende Tag, der die Informationen hier darstellt und besagt, dass der die Informationen hier darstellt und besagt, die nächste Zeichenzeile aus der Standardeingabe gelesen wird. Hier definiere ich grob , was diese Methode macht. Wenn jemand mit der Maus hierher fährt, kann er schnell sehen, was das macht, ohne 100 Codezeilen lesen zu müssen. Zum Beispiel Es gibt den anderen Entwicklern Informationen darüber, was diese Methode tut. Sie möchten ihr zum Beispiel eine sehr aussagekräftige Beschreibung geben . Wenn ich jetzt mit der Maus drüber fahre, oh, okay. Es fragt nach dem Namen eines Benutzers. Oh ja, ich habe vergessen, dass ich hier einen geheimen Bitcoin-Miner gebaut habe. Sie können hier zum Beispiel alles hineinlegen, was Sie wollen, aber es ist zu Ihrem Vorteil Stellen Sie sich vor, Sie legen Ihre Software für zehn Jahre weg. Sie kommen zehn Jahre später zurück. Du hast alles vergessen. Aber jetzt kannst du einfach deine Maus hierher fahren lassen und oh, das, ja, das habe ich natürlich vergessen. Es ist also gut für Sie, aber es ist auch gut für andere Entwickler, vielleicht in Ihrem Team. Zum Beispiel haben wir hier zwei Return-Tags. Und das ist ungefähr das , was zurückgegeben wird. Also geben wir den Namen des Benutzers zurück. Denken Sie daran, Sie können hier einen kleinen Hinweis eingeben , wenn wir den Namen des Benutzers bekommen, wir sagen, oh, denken Sie daran, dass es nur sein Vorname ist. Wenn wir mit der Maus darüber fahren, können wir sehen, dass der Name des Benutzers zurückgegeben wird, aber wir erinnern uns daran, es nur sein Vorname ist diesem Grund sind diese XML-Zusammenfassungs-Tags nützlich, denn wenn Sie die Maus Handumdrehen hierher bewegen, wissen Sie in einfachem Englisch genau, was sie tun Diese sind also wirklich nützlich. Und Sie können hier sehen, dass diese Methode einen Parameter hat. Wenn ich hier dasselbe mache, haben wir hier eine zusätzliche Sache. Auch hier können wir unsere Zusammenfassung verwenden. Es sagt Hallo, sag Hallo zum Benutzer. Der Parameter definiert, was unser Parameter tut, z. B. welche Informationen wir ihm geben Es wird der Vorname des Benutzers sein. Das heißt, sag Hallo zu uns. Wenn ich darüber hinweg bin, können wir hier sehen, grüßen Sie den Benutzer Wenn ich die Klammer hier öffne, sagt sie mir, was sie erwartet, aber was ist der vollständige Name Ist es ein Vorname? Nachname? Spitzname. Aber wenn ich hier runter schaue Oh, das ist natürlich der Vorname, ja. Weil wir uns selbst daran erinnern, sagen wir unserem Benutzer, wenn wir unsere Methode aufrufen, genau, was unsere Methode tut, was sie als Parameter erwartet und auch, was sie zurückgibt Das sind also die drei verschiedenen Arten von Kommentaren, die Sie in C Sharp verwenden können 17. 4-1. If- und Else-Statements: Schauen wir uns etwas Neues in C Sharp an. Wir werden uns die if-Anweisung und auch die el-Anweisung ansehen . E L S E für L. Was für eine Bedingung ist etwas, das als wahr oder falsch bewertet wird. Schau dir das an. Bist du Bob? Ist dein Name Bob? Nun, die Antwort ist entweder ja oder nein. Hast du einen? Entweder hast einen Hund oder du hast keinen Hund. Bist du sechs Fuß groß? Entweder bin ich es oder ich bin es nicht. Sie haben also immer eine Ja- oder Nein-Antwort. Die Bedingung ist in diesem Fall Bob, das ist die Bedingung. Sie könnten diese Bedingung erweitern. Bist du Bob, hast du einen Hund? In welchem Fall? All das ist die Bedingung. Wenn Sie Bob heißen, aber keinen Hund haben, dann lautet die Antwort nein. Andernfalls ist es ja, wenn Sie zum Beispiel beide haben, weil es hier ein Ende gibt, das ist eine Bedingung. Das ist unsere Bedingung. Damit beschäftigen wir uns täglich, mehrfach. Und wir können sie in Sharp C darstellen , indem wir eine sogenannte if-Anweisung verwenden. Lass uns einen Blick darauf werfen. Eine sehr einfache. Wir werden eine kleine Software namens Are you, Bob? entwickeln Software namens Are you, Bob? Was es tut, es fragt nach dem Namen des Benutzers. Wir nehmen den Namen des Benutzers auf. Wenn der Name des Benutzers Bob ist, werden wir ihn umwerfend grüßen, weil wir Bob wirklich mögen. Wenn ihr Name nicht Bob ist, dann geben wir ihnen vielleicht ein normales Hallo, Roberto oder etwas Ähnliches. Schauen Sie sich das Format der if-Anweisung an. Es beginnt mit If, das ist das Schlüsselwort, den offenen Klammern, genau wie wir es bei einer Methode tun Öffnen Sie zum Beispiel Klammern innerhalb der Klammern . Hier stellen wir die Bedingung. Unsere Bedingung ist, nun, bist du es, Bob? Wir wissen, dass die Namensvariable alles enthält, was der Benutzer eingegeben hat, also geben wir einen Namen ein. Dann wollen wir den Gleichheitsoperator , der durch zwei Gleichheitszeichen dargestellt wird Wenn Sie etwas in Sharp C zuweisen, verwenden wir ein Gleichheitszeichen Aber wenn wir etwas vergleichen wollen, verwenden wir zwei. Wir sagen, wenn der Name des Benutzers Bob entspricht, dann müssen wir etwas in C Sharp tun. Sharp liebt diese lockigen Zahnspangen. Wenn wir eine lockige Klammer als Methode haben, wenn wir eine geschweifte Klammer mit einer If-Anweisung haben, wenn wir eine geschweifte Klammer öffnen, schließen wir immer eine geschweifte Klammer . Sie können sehen, dass diese hier mit diesen hier übereinstimmen. So ist die Sprache einfach. Das ist unsere if-Aussage hier. Dies ist der Inhalt unserer if-Erklärung. Alles zwischen den lockigen Zahnspangen. Nun, wie ich schon sagte, wenn der Name des Benutzers Bob ist, wollen wir ihn umwerfend grüßen Lass uns versuchen, Englisch zu tippen. Wir wissen, dass sie Bob heißen. Wir könnten genauso gut Bob einsetzen. Hallo Bob. Diese, die heißen Bob, grüßen sie unglaublich. Schau mal. Wenn sie jedoch nicht Bob heißen, vielleicht Roberto oder Henry, dann müssen wir ihnen eine andere Botschaft geben. Wenn wir dieses Programm jetzt ausführen , können Sie sagen, wie lautet Ihr Name? Geben wir Henry ein. Es gibt uns ein normales Hallo Henry. Es ignoriert das sogar komplett, weil der Name nicht Bob ist Wenn ich die Anwendung jetzt starte, wie lautet Ihr Name? Nun, ich heiße Bob. Und denken Sie an C Sharp, Groß- und Kleinschreibung beachten. Deshalb haben wir in unserer if-Anweisung nur nach einem Widerhaken in Kleinbuchstaben gesucht, also stellen Sie sicher, dass es dem entspricht . Klicken Sie also auf „Antworten“ Jetzt haben wir unseren tollen Begrüßungs-Look, aber wir haben ein Problem. Schau. Es sagt auch Hallo Bob. Er bekommt also zwei Grüße. Und das liegt daran, dass die Bedingung der if-Anweisung, die in diesem Abschnitt steht, erfüllt ist. Sie wird als wahr ausgewertet. Daher wird diese Codezeile ausgeführt. Sobald die if-Anweisung beendet ist, führen wir dieses Bit immer noch aus. Aber vielleicht möchten wir diesen Gruß zum Beispiel Henry vorbehalten . Deshalb führen wir ein sogenanntes L-Statement ein. E VERLIEREN, wieder, geschweifte Klammern. Dieser Abschnitt ist Bob vorbehalten. Dieser Abschnitt ist für alles reserviert, was nicht Bob ist. Dies wird als wahr ausgewertet, wenn der Name des Benutzers Bob ist. Es wird als falsch ausgewertet, wenn es etwas anderes ist. Sonst, all das andere Zeug gehört hier rein. wollen wir allen den üblichen Gruß geben Außer Bob wollen wir allen den üblichen Gruß geben. Und so funktioniert die Else-Anweisung. Also, wenn das hier alles als wahr bewertet , wenn es hier alles als falsch bewertet, zum Beispiel, wenn ich das Programm starte, wie ist dann dein Name? Mein Name ist Bob. Jetzt erhalte ich die Standardbegrüßung, und dieser Abschnitt wird komplett ignoriert , weil ich Bob heiße. Aber wenn ich das Programm starte jetzt etwas eintippe, erhalten wir die Standardbegrüßung weil dieser Teil ignoriert wird, er fällt hier in den Abschnitt „ Andere“. Es kann nicht existieren ohne ein Wenn wir das nicht tun können , macht das keinen Sinn. Else braucht immer ein Ob dazu. Wenn wir versuchen, es auszuführen, wird es einen Fehler geben. Du kannst nichts anderes alleine haben. Es braucht immer eine Begleitung, wenn es darüber hinausgeht. Es ist eine sehr vereinfachte Ansicht einer Beispielbedingung, nämlich der if-Bedingung in C. Ich möchte nur ein kurzes Beispiel durchgehen, damit Sie vollständig verstehen, wie diese Bedingungen funktionieren Wenn Sie nun eine If-Anweisung haben, hat sie eine Bedingung und eine Aktion Wenn das Ergebnis wahr ist, wird dieser Abschnitt hier ausgeführt Wenn die Auswertung „Falsch“ ergibt, dieser Abschnitt hier ausgeführt Als wir über Variablen sprachen, hatten wir eine Bolen-Variable Bolen-Variablen ergeben entweder „ wahr“ oder „falsch“. Was wir tun können, ich werde nur Klammern verwenden. Klammern sind optional, aber ich denke, sie verbessern Jetzt speichern wir das Ergebnis in einer Variablen namens Bob Dann können wir angeben, ob Bob hier der Name ist, den der Benutzer Bob gegeben hat. Und wenn ich sage, meine ich, ist es gleich dem Gleichheitsoperator, ja oder nein, wahr oder falsch? Dann wird wahr oder falsch in dieser Variablen namens Bob gespeichert. Wenn die Anweisung dann ausgeführt wird, wird sie sagen, dass sie wahr und falsch ist. Wenn nicht falsch. Wenn ich die Software hier starte, tippe ich Bob ein, hey Bob, du bist unglaublich. Es ist genau dasselbe. Es gibt Ihnen mehr Klarheit darüber was vor sich geht, falls das Sinn macht. Ich habe nicht viel über Boolesche Werte gesprochen, aber es geht im Grunde darum, ob das wahr oder falsch Und das wird entweder wahr oder falsch sein , denn so stellst du es als Booling dar Und wenn wir dann die If-Anweisung ausführen , ist Bob entweder wahr oder falsch Und es wird die passende Version ausführen. Und wenn wir nicht Bob sind, sind wir Henry. Dann heißt es, hey, zufällige Person. 18. 4-2. Else-If-Anweisungen: Lassen Sie uns nun unser Beispiel für eine if-Bedingung in unserem letzten Tutorial näher erläutern und über die el-if-Klausel sprechen. Hier haben wir unseren Standardgruß für Bob. Aber was wäre, wenn wir einen besonderen Gruß für Henry haben wollten? Bob erhält seine eigene benutzerdefinierte Nachricht. Henry hat vielleicht seine eigene benutzerdefinierte, dann bekommen alle anderen eine Standardnachricht. Hier führen wir zum Beispiel die Else-If-Anweisung ein. Lass uns hier runter gehen. Das bedeutet, dass wir Bob ändern wollen, weil wir diesen Zustand bereits haben Diese Bedingungen müssen wirklich einzigartig sein. Sonst macht es keinen Sinn. Es wird wirklich überflüssig sein. Also sagen wir jetzt, bist du Bob oder bist du Henry? Denken Sie daran, lassen Sie uns dafür sorgen, dass unsere Kommentare Sinn ergeben. Also, ist dein Name Bob? Hallo Bob. Ist dein Name Henry? Oh, hallo Henry. Aber er bekommt mehr Ausrufezeichen, weil er angerufen hat. Aber wenn du nicht Bob bist, bist du nicht Henry, dann bist du alle anderen ganz unten Geben wir also zum Beispiel Henry ein. Jetzt bekommen wir den Henry, weil wir Henry heißen. Ganz einfach. Sobald du verstanden hast, wie das „Wenn und das Andere“ funktioniert, ist „ Anderes wenn“ einfach etwas anderes. Nochmals, wir können das sogar erweitern und einen anderen Namen hier haben, vielleicht Scott oder so. Sie können das entsprechend Ihren Wünschen ändern. So funktioniert die Elif-Anweisung. Auch hier brauchst du kein El, du brauchst kein anderes. Wenn ich das zum Beispiel ganz gerne habe, wenn ich etwas anderes eintippe, werden sie überhaupt keine Nachricht bekommen weil wir ihr nichts gesagt haben. Das ist die Stärke der Anweisung el if, wenn die if-Bedingung verwendet wird. Jetzt werde ich dir ein paar Ratschläge geben. Jetzt haben wir die Aussage von El If behandelt. Das heißt, wenn Sie eine Bedingung haben, zum Beispiel mit nur einer Codezeile darunter. Wir haben also diese Bedingung, eine Codezeile. Dann diese Bedingung, eine Codezeile. Wenn wir eine Codezeile haben, dann sind diese geschweiften Klammern hier optional Was das bewirkt, indem es diese entfernt , erhöht es Dadurch wird Ihre Software weniger aufgebläht . Das ist genau das Gleiche wie das, was wir zuvor hatten. Wenn wir jedoch beispielsweise zwei oder mehr Codezeilen unter jeder Bedingung haben , liegt ein Problem vor. Und das liegt daran, dass es diese lockigen Zahnspangen braucht. Genau hier können Sie sehen, dass es dort eine kleine rote Linie gibt, und der Fehler ist nicht sehr Das liegt daran, dass es versucht, all das in einer Zeile zu lesen , und es wird ein rätselhafter Fehler ausgegeben Wenn Sie unter jeder Bedingung eine Codezeile haben, sind die geschweiften Klammern optional Aber das können Sie zum Beispiel nicht mit Methoden tun. Nur Dinge wie if, else, if, else und einige andere Dinge haben wir noch nicht besprochen. Aber das ist ein kleiner Tipp, mit dem Sie die Lesbarkeit Ihres Codes in Zukunft verbessern können Lesbarkeit Ihres Codes in Zukunft verbessern 19. 4-3. Gleichheits- und Ungleichheitsoperatoren: Gleichheit und Ungleichheit. Was sind das? Was bedeutet das? Nun, das sind Dinge, die Sie jetzt vielleicht hören werden. Und auch hier haben wir schon ein wenig über Gleichheit gesprochen, als ich über die if-Aussage gesprochen habe. Aber Gleichheit bedeutet im Grunde , dass etwas Gleichwertiges mit etwas anderem ist. Und das wird hier durch zwei Gleichheitszeichen dargestellt. Aber wie sagt man Ungleichheit? Okay, was ist, wenn der Name nicht Bob ist? Wie stellen wir das dar? Was wir dort tun können, ist das Ungleiche zu verwenden, was durch ein Ausrufezeichen gefolgt von einem Gleichheitszeichen dargestellt ein Ausrufezeichen gefolgt von einem Gleichheitszeichen Nun, diese ganze Aussage ist ziemlich umgekehrt. Wenn der Name Bob nicht entspricht, dann wird das jetzt keinen Sinn machen, weil ihr Name nicht Bob Was wir jetzt tun können, ist zu sagen, hey Bob. Wenn ich die Software jetzt starte, wie ist dein Name, Bob? Es wird nichts passieren , weil wir ihm nicht gesagt haben, dass er etwas tun soll. Aber wenn ich die Software starte und etwas anderes einfüge, wird sie sagen, hey, du bist nicht Bob. Aber wenn ich diesen Operator einfach in ein Gleichheitssymbol verwandle, wird die ganze Bedeutung der ganzen Aussage umgekehrt . Sie können jetzt sehen, dass es keinen Sinn ergibt , denn obwohl der Name Barb ist, läuft es immer noch Wenn du sagen willst, dass etwas gleich etwas ist , dann zwei Gleichheitszeichen Wenn du sagen willst, dass es nicht gleich ist, dann brauchen wir kein Gleichheitszeichen Das ist ein Ausrufezeichen und ein Gleichheitszeichen 20. 4-4. Vergleichsoperatoren: Okay, Vergleichsoperatoren. Ich habe hier eine sehr einfache Anwendung. Es fragt den Benutzer nach einer Zahl 1 bis 10 Es nimmt die Eingabe des Benutzers, konvertiert sie in eine Ganzzahl und fügt sie in eine Variable namens Zahl Das ist so ziemlich das einzige, was das tut. Was ich tun möchte, wenn der Benutzer eine Zahl unter fünf eingibt, möchte ich dem Benutzer eine Nachricht senden, um ihm mitzuteilen, dass Sie eine niedrige Zahl gewählt haben. Andernfalls haben Sie eine hohe Zahl gewählt. Sehr einfach. Um das zu tun, brauchen wir eine Bedingung, die wir anwenden werden. Die Bedingung, die wir sagen werden, ist die Zahl kleiner als fünf? Wie wir weniger als darstellen, ist eine linke eckige Klammer, die so aussieht, und dann fünf. Bei der Aussage verwenden wir dann unsere geschweiften Klammern. Das passiert dann, wenn unsere Zahl kleiner als eine Fünf ist Wir werden dem Benutzer sagen, ich weiß nicht, dass Sie eine niedrige Zahl ausgewählt haben. So etwas in der Art. Wenn die Zahl jedoch nicht niedriger als eine Fünf ist, dann können wir L verwenden, um das so ziemlich umzukehren. Sie haben eine hohe Zahl ausgewählt , wenn wir die Anwendung ausführen. Wählen Sie nun eine Zahl von 1 bis 10 Denken Sie daran, niedriger als eine Fünf niedrig ist, also werde ich vier machen Ich habe eine niedrige Zahl ausgewählt und das war's. Tolle Software, nicht wahr? Wenn die Zahl dann fünf oder höher ist, machen wir eine Fünf. Es sollte mir sagen, dass ich eine hohe Zahl gewählt habe, ich habe eine hohe Zahl gewählt. Und wenn ich 1 Million hineingebe, heißt es, dass ich eine hohe Zahl ausgewählt habe. Dies ist jedoch ein Beispiel für einen Vergleichsoperator, der als Kleiner-als-Operator bezeichnet wird . In ähnlicher Weise könnten wir den Operator „Mehr als“ verwenden , der durch eine rechte eckige Klammer dargestellt wird. Nun, das wird keinen Sinn ergeben. Diese müssen wir rückgängig machen. Das wird genau das Gleiche bewirken. Aber Sie können sehen, dass es umgekehrt ist. Wenn die Zahl mehr als fünf ist, haben wir eine hohe Zahl ausgewählt Andernfalls haben wir eine niedrige Zahl ausgewählt, sie wird genau das Gleiche tun. Aber weil ich das rückgängig mache, muss ich diese beiden rückgängig machen. Es macht nur Sinn, dass die anderen beiden mehr als oder gleich und kleiner als oder gleich sind . Mehr als oder gleich wird auf diese Weise dargestellt. Mehr als oder gleich, kleiner oder gleich, wie Sie vielleicht vermutet haben, wie Sie vielleicht vermutet haben, einer linken eckigen Klammer und einem Gleichheitszeichen wenn Sie Dinge wie ungleich, kleiner als, gleich, mehr als gleich verwenden . Denken Sie daran, dass das Gleichheitszeichen immer auf der rechten Seite steht, immer scharf C Wenn der Benutzer nun eine Zahl kleiner oder gleich fünf ausgewählt hat , dann hat er offenbar eine höhere Zahl ausgewählt , was nicht stimmt Wir machen das wieder rückgängig. Okay? Weniger als oder gleich fünf, sie haben eine niedrige Zahl ausgewählt, wir hatten vorher weniger als fünf. Wenn es etwas bis Nummer vier ist, dann ist es eine niedrige Zahl. Wenn wir weniger oder gleich sagen wollen, müssten wir das stattdessen tun. Da die Zahl kleiner oder gleich vier ist, ist es eine niedrige Zahl. Weniger als oder gleich vier ist dasselbe wie weniger als fünf zu sagen. Auch hier können wir mehr als oder gleich verwenden , um die Logik umzukehren. Auch hier gilt: Wenn die Zahl mehr als fünf ist, können wir diese Aussagen umkehren, wir erhalten genau dasselbe, was sie in C Sharp als Vergleichsoperatoren bezeichnet werden . Wenn wir sieben eingeben, haben Sie eine hohe Zahl ausgewählt. 21. 4-5. Boolesche Operatoren: Boolsche Operatoren. Es klingt ein bisschen kompliziert, aber ich versichere Ihnen, dass es das nicht ist Ein Booling-Operator ist im Grunde eine Ausdrucksweise und ziemlich schwer zu sagen und ziemlich schwer zu Wir werden ein Beispiel erstellen, eine einfache Lotterieanwendung Wir fragen den Benutzer nach einer Zahl, 1—10 Wenn der Benutzer eine Drei oder Sieben eingibt, dann hat er gewonnen, er hat im Lotto gewonnen Schauen wir mal, wir können das umsetzen. Wenn Sie den Satz laut aussprechen, sagt er Ihnen ziemlich genau, was Sie tun müssen, wenn der Benutzer implizit eine Zahl auswählt, die drei ist, also sagt er Ihnen ziemlich genau, was Sie tun müssen, wenn der Benutzer implizit eine Zahl auswählt, die drei ist, jetzt eine Qualität für drei Oder wird durch zwei vertikale Rohre wie diese dargestellt, 12. Ich weiß nicht warum. So ist es einfach. Die Zahl ist gleich drei, die Zahl ist gleich sieben. Es ist sehr einfach. Wenn du laut sagst, sagt es dir so ziemlich, was du schreiben musst. Dann möchte ich dem Benutzer sagen , dass er im Lotto gewonnen hat, dass er die Glückszahl ausgewählt hat, also schauen wir uns das an. Wählen Sie eine Zahl, 1-103 Sie haben gewonnen, lassen Sie uns beweisen, dass es kein Zufall ist. Nummer zwei, nichts passiert, das liegt daran, dass wir ihr nichts gesagt haben Das ist ein sehr einfaches Beispiel für die Verwendung des Operators. Sie können mehr als einen verwenden. Sie können vier verwenden , wenn Sie möchten. Wenn der Benutzer also zum Beispiel 34 oder neun auswählt , funktioniert das perfekt. Jetzt hast du vier Glückszahlen. Das ist der Operator, ein sogenannter Bolen-Operator. Der andere Bolen-Operator ist das Gegenteil. Es ist der eine und der , durch den man repräsentiert wird, für eine Person, die mehr Sinn macht Das heißt zumindest, aber du brauchst zwei davon. Mit dem Endoperator. Was wir tun können, wir können sagen, wenn die Zahl nicht gleich zwei ist und sie nicht gleich sieben , dann haben sie gewonnen. Was wir tun können, wenn die Zahl nicht gleich zwei ist, die Zahl nicht gleich sieben ist, weil 2,7 schlechte Zahlen sind. Wenn du 2,7 wählst , hast du alles verloren. Solange die Zahl beispielsweise nicht zwei und die Zahl nicht sieben ist, haben Sie eins. So können Sie den Operator verwenden und Sie können sehen, dass die Logik zu der umkehrt, die wir gerade mit dem Oder-Operator verwendet haben Jetzt verwenden wir nicht gleich, sondern dieselbe Logik, wenn wir die Anwendung ausführen Solange wir nicht zwei oder sieben mit einem auswählen, wählen wir vier. Man kann es mit einem sehen. Wenn wir jedoch zwei oder sieben auswählen, wird es nichts bewirken weil wir ihm nicht gesagt haben, dass es etwas tun soll. Das ist ein sehr einfaches Beispiel für die Verwendung von Booling-Operatoren wie R und End Auch mit diesen können Sie es erweitern und vier Zahlen eingeben, wenn Sie möchten Und was wir mit Operatoren machen können, können wir auch kombinieren. Schauen wir uns ein kurzes Beispiel an, wie wir kombinieren können. Und lassen Sie uns nach dem Namen des Benutzers fragen. Wir werden nach dem Namen des Benutzers fragen und den Namen des Benutzers eingeben. Tun wir jetzt so, als hätte Bob nur Zugriff auf die Lotterieanwendung , die wir hier machen. Er ist der Einzige, der befugt ist, Lotto zu spielen. Was wir sagen wollen, ist der Name des Benutzers Bob, hat er die Nummer zwei oder sieben? Und das ist ein Beispiel dafür, wie wir und zusammen verwenden können. Aber der Punkt ist, dass das Ganze entweder als wahr oder falsch bewertet wird . Das ist der Hauptpunkt der Erkrankung hier. Entspricht der Name Bob und hat er die Nummer zwei oder sieben? Also werde ich hier zwei oder sieben in Klammern setzen. Es ist also viel lesbarer und es wird Sinn machen Und es wird auch korrekt berechnet. Also, ist der Name des Benutzers Bob? Ja. Hat Bob die Nummer zwei oder sieben? Ja. Nehmen wir an, er hat sieben, dann ist er einer. Nehmen wir an, die Person heißt Henry. Okay. Ist der Name Henry? Ist der Name Bob? Nein, es ist Henry. Okay. Nein, dann wird es hier einfach überspringen, also lasst uns die Theorie testen. Also, wie ist dein Name? Henry. Dann geben wir jetzt eine ein. Geben wir die Glückszahl ein. Ich denke, sieben ist eine davon. Dann passiert nichts , weil es nicht Bob ist. Nur Bob hat die Erlaubnis , hier potenziell im Lotto zu gewinnen . Setzen wir Bob ein, geben wir ihm eine Glückszahl und er ist eine. Einfach so. Lass uns Bob mit einer Unglückszahl machen, die definitiv 44 ist Nichts passiert. Sie können sehen, dass es auf diese Weise diese ganze Bedingung mit einem Booling-Operator und auch mit einem Eins bewertet diese ganze Bedingung mit einem Booling-Operator und auch Es ist gut, auch Klammern zu verwenden, um sicherzugehen, dass a korrekt berechnet wird, und zweitens, es verbessert auch die Lesbarkeit. 22. 4-6. Übung - Baue ein Taschenrechnerspiel: Deshalb werden wir jetzt eine kleine Übung machen und dein Wissen anhand einiger Dinge testen , die wir bisher gelernt haben. Wir werden einen Beispielrechner in C Sharp erstellen . Im Moment ist nicht viel los. Wir sagen dem Benutzer nur: Willkommen zu unserem Anrufrechner. Und wenn wir das Programm ausführen, passiert nichts. Also müssen wir diese Fähigkeit programmieren, was der Benutzer tun wird. Sie geben ihre erste Zahl ein, die eine Dezimalzahl sein könnte, und dann geben sie einen Operator plus minus Multiplikation oder Division Und dann geben sie ihre zweite Zahl ein. Und dann wird es die Berechnung durchführen und auf dem Bildschirm einige Dinge anzeigen , die es zu beachten gilt. Erstens kann der Benutzer Dezimalzahlen eingeben. Wir müssen zum Beispiel sicherstellen, dass wir unsere Zahlen in Doppelzahlen umrechnen unsere Zahlen in Doppelzahlen Als Nächstes müssen wir den Operator, den der Benutzer eingibt, aufnehmen und herausfinden, ob es sich um ein Plus, ein Minus, eine Division oder eine Multiplikation Und dann entsprechend handeln, indem wir die Bedingungen nutzen. Fragen wir den Benutzer nach seiner ersten Nummer. Wir wissen, wie das geht. Wir fragen den Benutzer nach seiner ersten Nummer. Um diese Informationen zu sammeln, verwenden wir die Console Dot Read Line. Wir wollen das verdoppeln. Ich habe eine Variable namens first eingerichtet , die die erste Zahl speichert, aber die Console Dot Read Line gibt eine Zeichenfolge zurück. Wir müssen diese Zeichenfolge in eine doppelte Zeichenfolge umwandeln. Dazu können wir convert verwenden, wir geben convert period ein und wir wollen doppelte offene Klammern setzen. Setze die Ausgabe in die Klammern. Und denken Sie dann daran, die Klammern zu schließen. Jetzt haben wir die erste Nummer des Benutzers erfasst. Als Nächstes möchten wir den Operator des Benutzers eingeben, aber lassen Sie uns zuerst die zweite Nummer des Benutzers eingeben. Das liegt daran, dass wir das einfach kopieren und einfügen können. Es ist viel einfacher. Wir haben die erste Nummer des Benutzers und die zweite Nummer des Benutzers einfach. Jetzt wollen wir den Operator. Lass uns das kopieren. Der Operator wird eine Zeichenfolge sein , da uns die Lesezeile mit dem Punkt in der Konsole bereits eine Zeichenfolge gibt. Wir müssen nichts konvertieren, damit wir das entfernen können. Wir werden eine neue Variable namens operator erstellen. Aber sieh dir an, was passiert, wenn ich das mache. Sie sehen, es ist blau markiert. Es wird ein Fehler ausgegeben. Warum ist das so? Das liegt daran, dass Operator ein Schlüsselwort in C Sharp ist. Es wird bereits tatsächlich verwendet. Zum Beispiel können wir keine Variable mit dem Namen double erstellen . Sie macht genau das Gleiche. Das liegt daran, dass es ein reserviertes Wort ist. Wir müssen einen Namen wählen , der kein Operator ist, weil Operator bereits in der Sprache C Sharp verwendet wird. Ich nenne es einfach OP. Sie werden vielleicht feststellen, dass ich dachte, ich würde Ihnen die Informationen jetzt geben. Jetzt wollen wir sie nach dem Operator fragen. Wir möchten ihnen vielleicht sagen, was sie tun können. Wir sagen, du kannst Plus, Minus, Multiplikation oder Division wählen Minus, Multiplikation oder Division Wir nehmen den Operator und speichern ihn in einer Variablen namens p. Jetzt haben wir alle Informationen von unserem Benutzer Wir haben die Zahlen und alles, was wir brauchen. Jetzt müssen wir herausfinden welchen Operator sie verwenden, und dann die Berechnung durchführen. Wie finden wir den Operator heraus? Nun, dafür können wir if-Anweisungen verwenden. Wir sagen ob. Jetzt verwenden wir den Gleichheitsoperator. Ist der Operator. Da der Operator eine Zeichenfolge ist, verwenden wir doppelte Anführungszeichen. Ist es ein Plus? Der Code darin, wenn wir die geschweiften Klammern einsetzen, wenn die Operation ein Plus ist, sagen wir f plus Sekunde Aber wir wollen das Ergebnis in eine Variable schreiben. Definieren wir eine Variable , die unser Ergebnis speichert. Ich werde es einfach auf Null initialisieren. Denken Sie daran, dass das Semikolon-Ergebnis dem Ergebnis von Erster plus Sekunde entspricht, weil wir mit dem Plus-Operator arbeiten Was aber, wenn sie zum Beispiel zwei Zahlen multiplizieren wollen , dann brauchen wir eine, wenn der Benutzer zum Beispiel Multiplikation eingibt, dann ist das nicht wahr, es wird falsch ausgewertet, dann wird die Codeausführung heruntergefahren Das müssen wir hier in einem anderen Bereich auffangen. Wenn der Benutzer eine Multiplikation durchführen möchte , dann prüfen wir das Und dann multiplizieren Sie einfach die Zahlen miteinander. Es ist sehr einfach, nicht wahr? Sie können jetzt sehen, wohin das führt. Mi Takeaway und Division, die Division hier und der Imbiss hier. So erkennen wir den Operator hier tatsächlich. In jedem Fall führen wir je nach Bedingung die entsprechende Berechnung durch und geben das Ergebnis dann immer hier in die Ergebnisvariable ein. Das Letzte, was wir tun wollen, ist dem Benutzer mitzuteilen, was das Ergebnis ist. Sie können hier sehen, dass mir ein Visual Studio das anbietet. Ich nehme es, drücke die Tabulatortaste auf der Tastatur und jetzt ist es für mich geschrieben. Jetzt möchte ich dem Benutzer sagen, was das Ergebnis ist. Ergebnis, so etwas in der Art. Lassen Sie uns das Programm ausführen und sehen, ob es funktioniert. Willkommen zu unserem coolen Rechner. Was ist deine erste Zahl? Drittens, was ist Ihr Betreiber? Sie können Plus, Minus, Multiplikation oder Division wählen. Ich wähle Multiplikation. Was ist deine zweite Zahl? Weil wir wissen, dass drei mal vier zwölf ist. Darüber muss ich nicht nachdenken. Das Ergebnis ist 12. Nun, das funktioniert. Lass uns noch einen versuchen. Versuchen wir es mit 200/3, weil wir wissen, dass drei nicht perfekt zu 200 passt Also können wir das testen. Unser Ergebnis gibt uns tatsächlich eine Dezimalzahl. Sie können sehen, dass das Ergebnis 66,6 6667 ist. Wir haben hier also ein gutes Maß an Genauigkeit. Indem wir Doppelzahlen anstelle von ganzen Zahlen verwenden, können wir mit Dezimalwerten und Zahlen umgehen , die keine ganzen Zahlen sind , die keine ganzen Dies ist ein sehr kurzes Beispiel dafür, wie man einen Prequal-Rechner in C Sharp erstellt, indem man alles verwendet, was wir bisher gelernt haben 23. 4-7. Switch-Statements: Deshalb werde ich jetzt etwas einführen, das als Switch-Anweisung bezeichnet wird. Es ist eine neue Art von Aussage , über die wir lernen werden. Und sie ist der if and else if-Anweisung insofern sehr ähnlich , dass sie, wenn sie ausgeführt wird, eine Bedingung auswertet Wenn sie wahr ist, führt sie die folgende Aktion aus. Wenn es falsch ist, geht es zur nächsten Els if-Anweisung und versucht es erneut. Wenn das wahr ist, wird es diese Aktion ausführen usw. Switch ist dem sehr ähnlich. Es ist nur eine andere Art , dieselben Informationen darzustellen. Was ich tun werde, ich werde das in eine Switch-Anweisung umschreiben , damit ich Ihnen genau zeigen kann , wie das funktioniert Bei einer Switch-Anweisung verwenden wir das Schlüsselwort switch Es hat eine Eingabe, die der Benutzer in das Programm eingibt. Übrigens, bevor wir anfangen, zeige ich Ihnen, was diese Anwendung macht. Es fordert den Benutzer auf, einen Wochentag einzugeben, und gibt dann eine personalisierte Nachricht darüber, welchen Tag er eingegeben hat. Wenn ich dieses Programm starte, geben Sie bitte einen Wochentag ein. Ich tippe Montag, ich mag Montag nicht. Es ist eine sehr einfache Anwendung. Ich werde das als Switch-Anweisung umschreiben das als Switch-Anweisung Es benötigt die Eingabe des Benutzers, die wir in eine Variable namens input eingegeben haben Wie bei den meisten Dingen in C Sharp öffnen und schließen wir geschweifte Klammern und platzieren den gesamten Code in der Mitte Jetzt eine Switch-Anweisung, zum Beispiel IF-Anweisung, um verschiedene Bedingungen zu überprüfen Bei der Switch-Anweisung gibt es jedoch Fälle. Diese stellen beispielsweise eine L if-Anweisung dar. Unser erster Fall kann der Input Monday sein. Wir stellen das so dar. Dann setzen wir den Code genau hier in die Mitte. In einer Switch-Anweisung. Diese drei Zeilen hier sind so ziemlich identisch mit diesen drei Zeilen hier. Es ist nur anders formuliert weil die Eingabe eine Zeichenfolge vom Datentyp ist. In unserem Fall muss es sich um eine Zeichenfolge handeln Wenn die Eingabe beispielsweise eine Zahl ist, dann muss es sich um eine Zahl handeln. So funktioniert das. Eine Switch-Anweisung kann einen oder mehrere Fälle haben. Wir werden für jeden von ihnen einen machen. Jeder Fall innerhalb einer Switch-Anweisung muss mit einem Doppelpunkt enden und mit dem Schlüsselwort break enden. Und alle Zeilen enden mit einem Semikolon. Jeder Case-Header endet mit einem Doppelpunkt und endet mit So ist es in Switch-Anweisungen. Geschweifte Klammern sind optional. Sie können sie platzieren, Sie müssen sie nicht platzieren. Du kannst den Break in die lockige Zahnspange stecken. Es funktioniert sehr flexibel . Ich neige dazu, sie wegzulassen , solange Ihre gesamte Logik hier und Sie mehrere Codezeilen in einer Pause haben können. Und der Doppelpunkt in der Kopfzeile , da ist alles in Ordnung. Das ist unser erster Fall, Montag. Ich mag Montag schon wieder nicht für Dienstag, der nächste Fall wäre Auch hier können wir nicht exakt denselben Fall haben , weil er überflüssig ist Der nächste Fall wäre Dienstag, und wir nehmen diese Linie für Dienstag usw. Sie können sehen, dass sich hier ein Muster abzeichnet. Die Switch-Anweisung enthält viele Bedingungen. Durch die Möglichkeiten der Bearbeitung habe ich all diese und die l if-Anweisungen zu einer Switch-Anweisung umgeschrieben , und sie wird genau das Gleiche tun . Lassen Sie mich das demonstrieren Lassen Sie uns diese Logik jetzt einfach vorübergehend ausschalten. Jetzt führe ich die Anwendung aus, die ich am Montag eingegeben habe. Sie können sehen, dass ich genau das gleiche Ergebnis erhalte. Diese Switch-Anweisung hier ist genau dieselbe wie all diese Wenns - und L-If-Anweisungen hier. Eine Sache, die Ihnen auffällt, ist die Lesbarkeit. Es liest sich viel besser. Sie können sehen, dass es tatsächlich viel minimaler ist. Sie können deutlich sehen, was vor sich geht und es sieht viel aufgeräumter aus als das hier Das ist ein Vorteil der Verwendung einer Switch-Anweisung. Ein Nachteil sind die boolenden Operatoren. Wenn die Eingabe beispielsweise Montag oder Dienstag ist , aber nicht Mittwoch, haben wir es hier mit einer komplizierten Sache Diese sind mit Switch-Anweisungen ziemlich schwer zu erreichen und es wird sehr schnell sehr chaotisch In diesem Beispiel würde ich eine F-Anweisung bevorzugen, in diesem Fall mit komplexen Bolen-Operatoren zu arbeiten Ein weiterer Vorteil der Verwendung von Switch-Anweisungen besteht darin, dass wenn Sie tatsächlich viele Bedingungen haben, hier haben wir sieben, das ziemlich viel ist Wenn wir fünf oder mehr erreichen, wird eine Switch-Anweisung vom System tatsächlich viel schneller ausgeführt. Das liegt einfach am Design. Was ist im Hintergrund los. Wenn Sie beispielsweise fünf oder mehr Fälle erhalten , würde ich eine Switch-Anweisung dieser vorziehen, würde ich eine Switch-Anweisung dieser vorziehen nur weil sie tatsächlich schneller ausgeführt wird. Wenn Sie in if- und else-if-Anweisungen sieben Fälle darstellen , dann muss der Computer jeden einzelnen auswerten. Es heißt, oh, dieser, ist es dieser? Ist es dieser? Aber das funktioniert nicht in Switch-Anweisungen. Es wird tatsächlich etwas anders ausgeführt. Es ist leistungsfähiger, wenn Sie zwischen Switch-Anweisungen if- und Else-If-Anweisungen entscheiden zwischen Switch-Anweisungen if- und Else-If-Anweisungen Dann liegt es nur an dir. Sie müssen Ihr Beispiel nehmen und herausfinden, welches für Sie am besten geeignet ist. Eine Sache, die ich bei Switch-Anweisungen erwähnen werde, eine letzte Sache ist, was passiert, wenn keiner dieser Fälle eintritt? Was ist, wenn es einen magischen achten Tag der Woche gibt oder der Benutzer vielleicht einen davon tatsächlich falsch buchstabiert hat, dann wird keiner dieser Fälle tatsächlich passieren Wenn wir dieses Beispiel mit if machen würden und sonst, wenn wir unten ein letztes L hätten , das ungefähr so lauten würde, würde es ungefähr so lauten und dem Benutzer sagen, dass würde es ungefähr so lauten er einen ungültigen Tag eingegeben hat, weil er ihn vielleicht falsch geschrieben hat. Zum Beispiel Wie stellen wir das in einer Switch-Anweisung dar? Nun, wir verwenden das sogenannte Standardschlüsselwort. Wenn ich default eintippe es immer mit einer Pause beende, genau wie in den obigen Fällen, dann kann ich den gleichen Code hier einfügen. Wenn ich diese Logik entferne und die Anwendung teste und dann einen der Tage absichtlich falsch buchstabiere, können Sie sehen, dass dem Benutzer mitgeteilt wird, dass er einen ungültigen Wochentag eingegeben Das ist also sehr nützlich , wenn Sie möchten, dass Code ausgeführt wird, bei dem keiner Ihrer Fälle als wahr bewertet wurde Es ist also zum Beispiel wie ein Catchall. 24. 4-8. Bedingte Operatoren: Lassen Sie uns über bedingte Operatoren in C Sharp sprechen. Bedingte Operatoren sind nicht auf C Sharp beschränkt. Sie können sie tatsächlich in C Plus Plus und anderen Sprachen erleben , was ein bedingter Operator ist. Es ist eine schnelle Möglichkeit, eine F- und eine L-Anweisung zu ersetzen. Betrachten Sie dieses Beispiel. Hier fragen wir den Benutzer, ob er Kaffee mag Wir nehmen seine Eingabe und speichern sie in einer Variablen. Wenn sie dann zum Beispiel ja eingeben, richten wir einfach eine Variable namens message und speichern diese Zeichenfolge darin. Ich wusste, dass ich auf dich zählen kann. Sonst noch was? Wir sagen, dass wir keine Freunde mehr sind und wir geben es auf dem Bildschirm Wenn ich die Software jetzt einfach starte können Sie schnell sehen, wie das funktioniert Ja, ich wusste, dass ich auf dich zählen kann. Ja, sehr einfach. Aber Sie können sehen, dass wir hier eine if-Anweisung und auch eine L-Anweisung haben. Es nimmt vier Codezeilen mit dieser zusätzlichen Variablendose hier ein. Insgesamt gibt es fünf Zeilen. Wenn Sie große Softwarekomponenten entwickeln, ist es manchmal schön, alles in einer Zeile zu vereinfachen. Das verhindert Blähungen und könnte wiederum die Lesbarkeit verbessern Es hängt davon ab, wie ich das in einer Codezeile darstellen kann ich das in einer Codezeile darstellen Wie minimiere ich das? Nun, wir können den sogenannten Bedingungsoperator verwenden. Was ich tun werde, ich werde diesen ganzen Abschnitt hier neu schreiben und dabei ein neues Konzept verwenden, den Bedingungsoperator Heute wird er manchmal als ternärer Operator bezeichnet, was einfach bedeutet, dass er aus drei Teilen besteht Und Sie werden auch sehen, warum er so heißt. Ich schreibe das einfach als Bedingungsoperator aus als Bedingungsoperator erkläre es anschließend. Wie ich bereits sagte, besteht es aus drei Teilen. Der erste Teil ist die Bedingung, dieser wird durch den zweiten Teil mit einem Fragezeichen getrennt . Der zweite Teil ist dann wenn die Bedingung als wahr bewertet Der dritte Teil ist, wenn die Bedingung als falsch ausgewertet wird. Nun, diese eine Codezeile hier macht genau das Gleiche wie all das hier. Lass mich dir das beweisen. Wenn wir das tun, führen wir das Programm aus. Magst du Kaffee? Ja, ich wusste, dass ich auf dich zählen kann. Und lassen Sie uns einfach die andere Bedingung testen. Sonst noch etwas? Wir sind keine Freunde mehr. Sie können sehen, dass es jetzt viel einfacher ist. Wir haben das alles in einer Codezeile zusammengefasst. Aber wie funktioniert das? Was passiert, ist, dass wir das Ergebnis in einer Variablen namens message speichern , ähnlich wie wir es hier tun. Der erste Teil des Bedingungsoperators ist, dass die Bedingung die Antwort des Benutzers ist? Ja, wir testen nach einer Zeichenfolge. Das ist die Bedingung. Der erste Teil des Bedingungsoperators befindet sich zwischen einem Fragezeichen und einem Doppelpunkt. Das heißt, wenn die Bedingung als wahr ausgewertet wird. Wenn das wahr ist, dann wird dieses Segment des Bedingungsoperators ausgeführt, dann dieser Abschnitt hier, falls Sie sich diese Frage vorstellen können, also die andere, wenn sie falsch ist Und das ist die Bedingung, diese Variable nimmt einfach das Ergebnis dieser ganzen Bedingung hier an, einen Bedingungsoperator Es ist nur eine schnelle Möglichkeit, eine F- und eine L-Anweisung in einer Codezeile zu schreiben . Die Lesbarkeit, ja, es hängt davon ab, ob Sie bedingte Operatoren neutralisieren können Es mag ein bisschen verwirrend aussehen, aber je mehr Sie sie verwenden können, der Code tatsächlich. Überlegen Sie, ob Sie vielleicht 50 oder 100 davon haben. Es ist schön, zum Beispiel mit nur einer Codezeile zu vereinfachen zum Beispiel mit nur einer Codezeile Aber so können Sie Hebel- und Bedingungsoperatoren in C Sharp schreiben . 25. 5. Arrays: Also werde ich einen neuen Objekttyp in unser Lernen einführen einen neuen Objekttyp in unser Lernen Und das nennt man ein Array. Was ist ein Array? Nun, im Klartext ist ein Array eine Sammlung von etwas. wir zum Beispiel an, einer deiner Freunde hat eine nette Sammlung von Videospielen. Du könntest sagen, oh, das ist eine nette Auswahl an Videospielen, die du hast. Es bedeutet einfach eine Sammlung von etwas, eine Menge von etwas. Beim Programmieren ist es sehr ähnlich. Schauen wir uns dieses sehr einfache Beispiel hier an. Was ich hier habe, sind sechs Variablen vom Typ Integer. Integer ist der Datentyp. Ich gebe gerade den ersten auf dem Bildschirm aus. Sehr einfach Sagen wir, wenn wir eine Lotterieanwendung emulieren, wählt der Benutzer sechs Zahlen aus und dann setzen wir jede ihrer Zahlen in eine Variable ein und alle Variablen sind einzigartig Aber was ist, wenn der Benutzer 1.000 Zahlen auswählt? Dann muss ich 1.000 Variablen erstellen. Es wird wirklich mühsam sein. Unsere Anwendung wird mehr Speicher beanspruchen, ihre Dateigröße wird größer und die Entwicklung wird auch sehr lange dauern Entwicklung wird auch sehr lange Um das Problem zu lösen, dass all diese Variablen unterschiedliche eindeutige Namen haben, verwenden wir dass all diese Variablen unterschiedliche eindeutige Namen haben unterschiedliche eindeutige Namen ein sogenanntes Array. Das Array kann all diese Informationen in nur einer Variablen zusammenfassen. Schauen wir uns an, wie wir hier sechs Codezeilen in nur einer einfachen Zeile mithilfe von Arrays darstellen können hier sechs Codezeilen in nur einer einfachen Zeile mithilfe von Arrays Also was ich tun werde, ich werde hier ein Array definieren und initialisieren Wir möchten, dass alle unsere Elemente innerhalb des Arrays ganze Zahlen sind Wir werden hier den Datentyp int für unser Array verwenden, dann werde ich offene und geschlossene eckige Klammern verwenden Das sagt dem System, hey, ich möchte ein Array erstellen Wir werden dem Array einen Namen geben. Wir werden es Zahlen nennen. Wir haben das Array genau dort deklariert. Und jetzt wollen wir das Array initialisieren, was bedeutet, dass wir einige Daten darin ablegen wollen Und das können wir in derselben Zeile machen. Um das zu tun, werden wir nein sagen. Dann setze ich wieder den Datentyp, wieder die eckigen Klammern. Jetzt möchte ich Werte in dieses Array einfügen. Ich verwende offene geschweifte Klammern, geschlossene geschweifte Klammern und dann ein Semikolon Jetzt füge ich die Werte in diese geschweiften Klammern ein, sodass ich zwei eingeben Wenn ich einen nächsten Wert eingebe, verwende ich a und dann 12 und jetzt den nächsten Wert, und jetzt den nächsten Wert, 264.556,71. Diese eine Variable hier, Zahlen genannt, ist ein Array hier, Zahlen genannt, ist Das sind alle Werte, die darin enthalten sind. Nun, diese eine Codezeile steht für all diese sechs Zeilen hier. Jetzt brauchen wir das nicht mehr. Wie greifen wir nun tatsächlich auf die Zahlen in diesem Array zu? Nun, wir nehmen den Namen des Arrays, also Zahlen, und verwenden dann eckige Klammern. In die eckigen Klammern setzen wir einen Index für unsere Werte. Als wir zuvor über Teilstrings gesprochen haben, habe ich gesagt, dass der Index generell scharf C ist Fangen Sie bei Null an, das ist Artikelplatz Null. Das ist Artikelsteckplatz 12345, obwohl wir sechs Elemente haben, ist das Index fünf, weil das Index Null ist. Denken Sie daran, wenn Sie mit Arrays und Sammlungen und ähnlichen Dingen in C Sharp arbeiten und Sammlungen und ähnlichen Dingen in C Wenn ich auf dieses erste Element, die Nummer zwei, zugreifen möchte, füge ich dort einfach Null ein, weil es sich bei Index Wenn ich das Programm starte, können Sie jetzt sehen, dass es hier Nummer zwei ausgibt, was unser erstes Element ist Ähnlich verhält es sich, wenn wir auf die Zahl 12 zugreifen wollen, ich gebe einfach eine ein und ich kann das Programm ausführen, und dann gibt es 12 aus ganz einfach. So greifen Sie tatsächlich auf die Informationen im Array zu. Sie verwenden die eckigen Klammern, setzen aber einen Index in sie. Wenn wir versuchen, auf ein Element außerhalb unseres Arrays zuzugreifen, zum Beispiel Index 45 , dann haben wir nur sechs Elemente in unserem Array. Wenn wir das Programm ausführen, wird es einen Fehler ausgeben. Und normalerweise sagt der Fehler etwas in der Art aus, dass er außerhalb der Grenzen des Arrays Das liegt daran, dass wir keine 46 Elemente in unserem Array haben. Es sagt uns nur, dass die Einheit nicht existiert. Ich weiß nicht, was ich tun soll. Eine andere Sache, die Sie vielleicht mit einem Array machen möchten , ist, dass Sie das Array definieren möchten. Wir wissen jedoch noch nicht, welche Informationen wir darin eingeben möchten. Vielleicht wollen wir das Array hier definieren und dann wollen wir ein paar andere coole Sachen machen. Und später, weiter in der Anwendung, wissen wir vielleicht endlich welche Zahlen wir hier eingeben wollen. Was wir zum Beispiel in diesem Fall tun, wenn wir das Array hier definieren, wollen wir hier quasi eine Kapazität eintragen. Hier heißt es, wenn wir den Mauszeiger tatsächlich über diese rote Linie bewegen, muss die Array-Erstellung eine Array-Größe oder einen Bezeichner haben Im Grunde heißt es, wie viele Elemente werden Sie in Ihrem Array haben , wenn Sie Ihr Array verwenden möchten Ich weiß, dass ich sechs Zahlen haben werde, weil es wie eine ist. Es könnte zum Beispiel eine Lotterieanwendung sein, bei der es nur sechs Zahlen gibt. Wir definieren es hier mit einer Fünf. Beginnt der Index bei Null, dann haben wir 012345 Wenn wir hier eine Fünf eingeben, sagen wir, dass wir sechs Zahlen in dieses Array einfügen sechs Zahlen in dieses Array Ich hoffe, das ergibt Sinn. Jetzt haben wir das Array definiert, jetzt müssen wir es immer noch initialisieren, weil wir hier standardmäßig keine Werte haben . Wenn ich versuche, auf die Werte im Array zuzugreifen, obwohl es hier keine Werte gibt, wird es Null ausgeben weil das das Standardverhalten ist Was ich jetzt tun möchte, ist einen Wert in das Array einzufügen. Also werde ich einen Wert in den ersten Slot eingeben , der Index Null ist. Und ich werde hier die Zahl 777 eintragen. Wenn ich jetzt die Anwendung starte, können Sie sehen, wir den Wert 777 sehen können und dass wir den Wert 777 sehen können und so initialisieren Sie tatsächlich ein Element in Ihrem Array Wenn ich zur nächsten Zeile gehe und versuche, einen Wert in die nächste Zeile einzufügen, sagt Visual Studio in ähnlicher Weise zur nächsten Zeile gehe und versuche, einen Wert in die nächste Zeile einzufügen, voraus , was wir hier vielleicht tun möchten Sie sehen diese grauen Zeichen hier. Das heißt im Grunde, wenn Sie die Tabulatortaste auf Ihrer Tastatur drücken . Also lass uns das machen. Es wird das für uns eingeben, was beim Programmieren viel Zeit spart. Dann können wir das zum Beispiel da eintragen. Dann können wir auf Index eins zugreifen , der den Wert 456 haben sollte, was er auch ist. So fügt man Werte in unser Array ein, weil wir nur ein Array definiert haben , das sechs Elemente enthalten kann. Wenn wir versuchen, einen Wert in Slot 45 einzufügen, wird dies ebenfalls zu einem Fehler führen, da wir uns außerhalb der Grenzen Das Letzte, worüber ich mit Strahlen sprechen werde , das Erste davor, das Letzte, Rays, ist einer von vielen Sammlungstypen, die Sie in C Sharp verwenden können Es gibt Array-Listen, Listen, Wörterbücher. Dies ist zum Beispiel etwas, mit dem Sie beginnen können , wie Sie viele Daten verwalten können Das Letzte, worauf ich kurz eingehen werde, ist Ihre Arrays so ziemlich jeden Datentyp haben können Wir können zum Beispiel eine Reihe von Zeichenketten haben. Das könnten die Namen von Leuten sein. Dann müssen wir bei der Initialisierung sicherstellen, dass es tatsächlich dem Datentyp entspricht Lass uns das jetzt löschen. Wir können hier ein paar Namen eintragen. Wir können Henry reinsetzen. Wir können unseren Freund Bob und so weiter einsetzen. Jetzt haben wir eine Reihe von Zeichenketten. Okay, wenn wir auf unser Array zugreifen, können wir es einfach genauso machen wie zuvor. Und da ist Access Henry, das ist das erste Objekt dort. Wenn wir die Anwendung ausführen, können Sie sehen, dass sie Henry ausgibt. Denken Sie daran, dass, wenn Sie ein Array mit einem String-Datentyp definieren , alle Werte Zeichenketten sein müssen. Wenn Sie ein Integer-Array haben, haben Sie hier ebenfalls Ganzzahlen 26. 6-1. While-Loops: Nun zu etwas ganz anderem Ich werde Looping in C Sharp einführen Um Looping einzuführen, werde ich den Wire Loop vorstellen Betrachten Sie dieses Beispiel. Hier habe ich einen Zahlenzähler. Sobald wir die Software öffnen, heißt es dem Benutzer: Willkommen im Zahlenzähler. Bitte geben Sie eine Zahl ein, 1-3 Lassen Sie uns die Anwendung ausführen. Wenn ich zum Beispiel die Zahl Drei eingebe, zählt sie bis zur Zahl, ich gebe 123 ein. Wenn ich die Zahl zwei eingebe, zählt sie bis Nummer zwei. Dies wird durch diese Reihe von if- und else-if-Anweisungen dargestellt . Wenn der Benutzer zwei eingibt, wird nur 123123 ausgegeben Es zählt bis zu der Zahl , die der Benutzer eingibt. Überlegen Sie jedoch, ob wir diese Anwendung ändern möchten und fragen Sie den Benutzer beispielsweise nach einer Zahl von 1-1000. Nun, wie wir das mit if-Anweisungen für jede Zahl darstellen würden , dann hätten wir diesen ganzen Block. Wenn wir die Zahl Vier haben, fügen wir hier eine weitere Else-If-Aussage hinzu, geben Sie die Zahl Vier ein. Dann fügen Sie hier eine weitere Zeile hinzu , in der wir bis Nummer vier zählen. Aber wenn wir bis zu 1.000 gehen , dann wird das riesig. Die Dateigröße unserer Software wird riesig sein, sie wird sehr langsam laufen. Wie lösen wir dieses Problem? Nun, wir können all diese Logik hier mithilfe einer Schleife darstellen . Wir werden eine While-Schleife verwenden. Lassen Sie mich das Y-Loop-Format ausschreiben. Sie können also sehen, dass es genau wie die Aussage ziemlich ähnlich aussieht. Betrachten Sie die if-Anweisung, wir haben eine Bedingung. Wenn die Bedingung als wahr ausgewertet wird, wird diese Codezeile einmal ausgeführt Wenn die Bedingung falsch ist, wird mit der nächsten if-Anweisung fortgefahren und diese Bedingung überprüft Wenn das wahr ist, führt es diesen Codeblock einmal aus. jedoch bei einer Drahtschleife Wenn diese Bedingung jedoch bei einer Drahtschleife zutrifft, wird der Inhalt hier immer wieder wiederholt Wenn ich die Konsole richtig setze, ist die Zeile eins. Wenn dies als wahr ausgewertet wird, wird es dies einfach immer und immer wieder wiederholen bis dies als falsch ausgewertet So funktioniert eine Drahtschleife im Prinzip. Schauen wir uns unser Beispiel an und wie wir unsere Anwendung modifizieren können , um all das zu tun wenn die Logik hier in einer einzigen Drahtschleife ist. Lassen Sie uns das alles löschen. Ich möchte, dass diese Drahtschleife immer wieder wiederholt, wiederholt, wiederholt und die Zahl bis zu der Zahl ausgibt, die wir eingegeben haben . Das ist die Nummer des Benutzers , die er eingeben wird. Und wir wollen, dass die Drahtschleife so lange weiterläuft , bis diese Zahl erreicht ist. Okay, wie machen wir das? Ich werde eine neue Variable einführen und sie Counter nennen. Und ich werde es mit einer initialisieren. Welcher Zähler wird es sein? Das ist die Zahl, die ständig um 123 erhöht wird , bis zu der Zahl, die uns der Benutzer gibt Ich möchte den Zähler auf dem Bildschirm ausgeben. Jedes Mal, wenn sich diese Drahtschleife wiederholt, möchte ich den Zählerwert ausgeben. Es beginnt bei eins und dann möchte ich den Zähler jedes Mal um eins erhöhen was ich tun könnte, ist, dass er sich selbst entspricht und ein Zähler den Wert Eins hat, aber jetzt möchte ich, dass er sich selbst entspricht, was eins ist, und dann eins hinzufügen Danach wird der Zähler gleich zwei sein. Wenn es erneut läuft, ist der Zähler gleich 34 usw. Jetzt können Sie jedes Mal, wenn Sie einer Variablen eine hinzufügen, dies auf diese Weise tun oder Sie können es auf diese Weise tun Einfach so. Dieses Plus plus erhöht den aktuellen Wert um eins. Das ist nur eine Kurzschreibweise. Das ist genau dasselbe. Es funktioniert nicht mit zwei, nur mit einem. Wenn Sie es um eins verringern möchten, verwenden Sie negativ, negativ und das subtrahiert eins von seinem Wert Aber wir wollen nur einen hinzufügen. Jedes Mal, wenn diese Drahtschleife Schleife durchläuft, gibt sie Zähler eins durchläuft, gibt sie Zähler eins und dann geht sie zurück zum Anfang, überprüft die Bedingung. Wenn sie immer noch zutrifft, werden diese beiden Codezeilen ausgeführt. Auch hier funktioniert die Drahtschleife so. Es wird sich weiter wiederholen, aber jetzt brauchen wir eine Bedingung Die Bedingung sollte als wahr gewertet bis sie das erreicht, was der Benutzer eingegeben hat, und dann muss sie aus der Drahtschleife entkommen und mit dem Rest der Software weitermachen Welche Bedingung können wir hier setzen , damit das wahr wird? Nun, wir wollen bis zur Benutzerzahl zählen. Einschließlich der Benutzernummer. Was wir tun wollen, ist zu sagen, während der Zähler läuft. Ist kleiner als die Benutzernummer, dann wiederhole diesen Code. Wir möchten jedoch auch die Benutzernummer angeben. Wenn es mit dem Zählen fertig ist, wird es kleiner oder gleich sein. Lassen Sie uns diese Anwendung einfach ganz schnell ausführen , damit wir uns das ansehen können . Geben Sie nun eine Zahl 1-1000 ein. Geben wir zum Beispiel Nummer sieben ein und drücken die Eingabetaste. Sie können hier sehen, dass von Nummer eins bis sieben gezählt wird. So funktioniert eine Drahtschleife im Wesentlichen. Wenn wir die Anwendung erneut ausführen und 1.000 eingeben , zählt sie bis 1.000 und stoppt dann bei 1.000. Sie können sehen, dass wir ohne viel Code all diese if- und else-if-Anweisungen replizieren können In einer sehr einfachen Kabelschleife wie dieser, nur damit wir uns zu 100% im Klaren sind, läuft die Software, sie nimmt die Zahl vom Benutzerzähler, die auf eins initialisiert ist Das ist jetzt eins, während eins kleiner oder gleich der Zahl ist kleiner oder gleich , die der Benutzer hier eingegeben hat Nehmen wir an, der Benutzer hat 44 eingegeben, während eins kleiner oder gleich 44 ist Setzen Sie diesen Ausgabezähler für die Codeausführung bis zum Bildschirm fort , der dann eins sein wird Und dann den Zähler um eins erhöhen. Jetzt wird das gleich zwei sein. Jetzt ist Zähler gleich zwei. Ja, er ist immer noch kleiner oder gleich 44. Jetzt ist der Zähler gleich drei, er ist immer noch kleiner als 44. Mach weiter so. Sobald der Zähler 45 ist , ist 45 nicht kleiner oder gleich 44. Was passiert, ist, dass es hier ausbricht, hierher springt und mit dem Rest des Programms weitermacht mit dem Rest des Programms So funktioniert die Drahtschleife im Wesentlichen in einem Geschäft. Ich möchte über etwas sehr Wichtiges sprechen. Jetzt führen wir Loops ein. Mit Drahtschlaufen und allen anderen Schleifen über die wir in Zukunft sprechen werden. Es besteht die reale Gefahr, dass sich Schleifen für immer wiederholen. Es sind nur Endlosschleifen. Was passiert, wenn Sie eine Endlosschleife bekommen, ist, dass sie langsam den Speicher in Ihrem System verbraucht, bis entweder kein Speicher mehr übrig ist oder etwas Überläuft oder etwas Katastrophales Das ist hier eine echte Gefahr. Schauen wir uns ein sehr kleines Beispiel an. Denken Sie daran, dass bei IF-Aussagen hier eine Bedingung besteht. Wenn das als wahr ausgewertet wird, dann wird es diesen Code genau hier ausführen , der vielleicht einfach true hier hineinschreibt Was passiert, ist, dass das immer wahr ist und immer als wahr ausgewertet wird , weil ich dort „Wahr“ geschrieben habe ändert sich in diesem Code nichts Sogar Visual Studios bewerten das , weil es weiß, dass es sich einfach für immer wiederholen wird. Dies ist ein sehr einfaches Beispiel. Dies kann natürlich durch die Verwendung von Variablen erreicht werden , die niemals ihren erwarteten Wert erreichen. Zum Beispiel wird das einfach ewig weiterlaufen, wenn ich das Programm ausführe. Jetzt können Sie sehen, dass es einfach endlos zählt. Und was passieren wird, ist entweder dass diese Zahl zu groß für ihren Container wird, oder uns wird der Speicher auf unserem System ausgehen Aber im Grunde wird diese Schleife einfach niemals enden und irgendetwas wird dazu führen, dass dieses Programm abstürzt. Es könnte also Erinnerung sein, es könnte alles sein. Und normalerweise ist es etwas sehr Unerwartetes. Dies ist also ein Beispiel dafür, wo eine Schleife möglicherweise für immer schleifen kann. Das ist ziemlich häufig, und aus diesem Grund müssen wir Software testen, um sicherzustellen, dass das nicht passiert, aber jetzt führen wir Schleifen ein. Das ist eine echte Gefahr , die passieren kann, und Sie sollten sich dessen bewusst sein, wenn Sie weitermachen. 27. 6-2. Do While-Loops: Ich werde eine Variante des Wile-Loops vorstellen , die Il-Schleife genannt wird Es gibt einen sehr subtilen Unterschied zwischen dem Wile-Loop und dem Il-Loop. Der Unterschied besteht darin , dass in einer Il-Schleife der Code innerhalb der Schleife mindestens einmal ausgeführt wird . Was bedeutet das? Lassen Sie uns diese Beispielanwendung hier betrachten. Willkommen im Zahlenzähler. Wir bekommen eine Zahl vom Benutzer, 1-1000. Dann geben wir von Eins die Zahlen bis zum Wert des Benutzers in Schritten von eins die Zahlen bis zum Wert des Benutzers Wenn der Benutzer sieben eingibt, zählt er bis sieben und fährt dann mit dem Rest des Programms Wir können eine sogenannte Wile-Schleife verwenden, um hier so ziemlich dasselbe zu erreichen Wenn wir die Drahtschleife erreichen, haben wir hier eine Bedingung Der Code führt das aus, das, dann kommt er zu dieser Drahtschleife Wenn diese Bedingung von Anfang an falsch ist, wird dieser Code niemals ausgeführt wird der gesamte Wire-Loop übersprungen Wenn diese Bedingung falsch ist, wird der gesamte Wire-Loop übersprungen und der Rest der Software läuft weiterhin mit einer I-Schleife Nun, das ist nicht der Fall, das liegt daran, dass die Bedingung in einer Schleife einmal auftritt Die Schleife wurde bereits mindestens einmal ausgeführt. Überlegen Sie sich das. Nun, das macht genau das Gleiche wie der andere Code. Die Software wird ausgeführt, diese Codezeile wird ausgeführt. Das, wir bekommen die Eingabe des Benutzers, wir initialisieren diese Variable Jetzt kommen wir zu dieser Aussage, nun ja, nichts hindert uns daran, hier reinzugehen Das ist Ex, das wird so ausgeführt. Und dann haben wir unseren Zustand. Diese beiden Codezeilen wurden bereits ausgeführt, bevor wir unsere Bedingung erhalten. Und die Bedingung besagt, ist der Zähler kleiner oder gleich der Zahl? Nun, wenn das von Anfang an falsch ist, könnte ich hier sogar falsch eingeben. Dann haben sie diese beiden Codezeilen , die sie bereits ausgeführt haben, bereits ausgeführt. Selbst wenn die Bedingung falsch ist, werden sie trotzdem ausgeführt. Und dann machen wir mit dem Rest der Software weiter. Betrachten Sie dieses Beispiel. Es ist egal, was ich hier reinschreibe. Jetzt können Sie mindestens einmal eine Ausgabe sehen. Das liegt daran, dass diese beiden Codezeilen bereits ausgeführt wurden. Obwohl die Bedingung falsch war. Eine Wile-Schleife ist nützlich, wenn Sie möchten, dass der Code in Ihrer Schleife mindestens einmal ausgeführt Wenn nicht, sollten Sie erwägen, stattdessen eine Wile-Schleife zu verwenden. Aber beide können so ziemlich das gleiche Ergebnis erzielen. Aber das ist der Unterschied zwischen der Wile- und der Wile-Schleife 28. 6-3. For Loops: Ich werde jetzt eine andere Schleife einführen jetzt als Viererschleife bezeichnet wird. Eine Vierschleife ist nur eine weitere Möglichkeit, ein Ergebnis zu erzielen. Es hat je nach Anwendung Vor- und Nachteile. Sie sich dieses Beispiel vor, bei dem wir den Benutzer nach einer Zahl fragen und er mithilfe einer Wile-Schleife einfach bis zu dieser Zahl zählt und jede Zahl auf unserem Weg ausgibt bei dem wir den Benutzer nach einer Zahl fragen und er mithilfe einer Wile-Schleife einfach bis zu dieser Zahl zählt und jede Zahl auf . Bei einem niedrigen Wert unterscheiden sich vier Schleifen geringfügig Sie sehen hier diese Y-Schleife, wir haben eine Variable direkt darüber definiert, und dann erhöhen wir diese Variable jedes Mal, wenn diese Wile-Schleife iteriert , um eins Wenn die Bedingung falsch ist, bricht sie aus ihr heraus. Sie können hier sehen, dass wir der Drahtschleife einige zusätzliche Dinge hinzugefügt haben , damit die Drahtschleife ihr Ziel erreicht. Jetzt besteht sie aus vier Schleifen und hat einen eingebauten Mechanismus , zu dem auch ein Zähler wie dieser gehört. Es wird den gesamten Code in 14 Anweisungen vereinfachen . Nun, was bedeutet das alles? Lass es mich erklären. Wir beginnen einfach so eine Vierer-Schleife mit dem Schlüsselwort Four. Dann steht der Header in Klammern, genau wie die Drahtschleife. Und dann haben wir die lockigen Zahnspangen. Der Header für eine Vierschleife, er enthält tatsächlich ein bisschen mehr Die Drahtschleife hier, wir haben die Bedingung, das ist das Einzige, was wir hier haben. Aber die Vierschleife erfordert eigentlich die Definition des Zählers und das Inkrement des Zählers Der Header erfordert drei Dinge. Das liegt daran, dass die Vierschleife unseren Zähler verwaltet , denn er muss über diese Informationen Bescheid wissen, aber er muss auch den Zustand kennen. Und so betreten und verlassen wir die Vierschleife. Zum Beispiel benötigt sie, genau wie eine While-Schleife, drei Informationen. Ich werde hier genau dieselben Namen verwenden, vielleicht später mit einer Nummer eins. Ich kann keine Variablen mit demselben Namen verwenden. Ich werde hier kopieren, wo wir unseren Zähler initialisiert haben. Ich kann nicht denselben Namen haben. Ich setze einfach eine Nummer eins dahinter. Das nächste, was ich brauche, ist die Bedingung. Wir trennen diese drei Elemente mit einem Semikolon. Dann stelle ich die Bedingung erneut, ich kann nicht denselben Namen haben Dann die letzte, ich brauche die inkrementelle, wieder, ich kann nicht den gleichen Namen haben wie die Drahtschleife oben Nun, das ist im Grunde genau das Gleiche wie oben, abgesehen von dieser Zeile hier, die ich hier einfüge. Nun, dieser Block hier macht genau das Gleiche wie all das. Hier können Sie den Vorteil einer Vierschleife gegenüber einer Drahtschleife in diesem Fall sehen. liegt daran, dass es hinter den Kulissen automatisch den Überblick über unsere vier Zähler behält hinter den Kulissen automatisch den Überblick über unsere vier Zähler Jedes Mal, wenn die vier Schleifen wiederholt werden, wird dieser Zähler jedes Mal um eins erhöht Wenn wir wollen, könnten wir ihn jedes Mal um zwei erhöhen , wenn der Zähler gleich Zähler eins plus Und das würde den Zähler jedes Mal um zwei erhöhen, zum Beispiel könnten wir ihn jedes Mal um acht erhöhen Es liegt wirklich an uns, was wir mit dem Inkrementellen machen wollen Aber normalerweise werden Sie sehen, dass die Leute es jedes Mal um eins erhöhen Es gibt bestimmte Fälle , in denen Sie den Wert möglicherweise jedes Mal um eins verringern möchten den Wert möglicherweise jedes Mal um eins verringern Es liegt wirklich an Ihnen, das ist unser Zuwachs. Der dritte Artikel, der mittlere Artikel ist unser Zustand. In diesem Fall ist es also genau dasselbe wie eine Drahtschlaufe. Im ersten Punkt definieren wir unseren Zähler. Also müssen wir sagen, hey, wir richten eine neue Variable ein und initialisieren sie mit einer In diesem Fall können wir sie auf Null initialisieren, wenn wir wollen, aber wir müssen sie initialisieren Wir können es nicht leer lassen, wir initialisieren es In diesem Fall wird dies genau dasselbe tun wie dieser Code Lassen Sie mich das nur demonstrieren. Hier ist unser Loop. Wir geben die Zahl Sieben ein. Warum nicht? Sie können sehen , dass es bis sieben zählt. Jetzt werde ich unsere While-Schleife komplett entfernen und unsere kaputte Vierer-Schleife einfügen, also viel weniger Codezeilen. Ich werde die Anwendung ausführen, ich gebe die Zahl Sieben und sie macht genau das Gleiche wie die Drahtschleife. Es ist ziemlich cool, nicht wahr? 29. 6-4. For Loops vs. While Loops: Sie müssen sich die folgende Frage stellen. Wenn eine Vierschleife all diese Vereinfachungen hat, dann ist sie eingebaut, hier inkrementell Warum benutzen wir das nicht immer? Warum sollten Sie sich zum Beispiel überhaupt mit einer Drahtschlaufe beschäftigen? Nun, im Allgemeinen werden vier Schleifen verwendet, wenn wir wissen, wie oft die Schleife iterieren wird Wenn der Benutzer zum Beispiel diese Zahl eingibt, zählen wir von eins, erhöhen uns um eins und wir verlassen die Schleife, wenn der Zähler unter einem bestimmten Wert liegt In diesem Abschnitt werden die Zahlen 1—10 jedes Mal ausgegeben , wenn er um eins erhöht wird Und wenn es endlich nicht mehr weniger oder gleich zehn ist, wird es entkommen Mit einer Drahtschleife können wir das jedoch tun, aber Drahtschleifen sind besser, wenn wir die Anzahl der Iterationen vorher nicht kennen Habe ich zum Beispiel Hunger? Lassen Sie uns eine Booling-Variable namens Bin ich hungrig initialisieren und sie auf true setzen, weil ich Wenn wir nun die Drahtschleife betreten, müssen wir nicht wissen, wie oft sie sich wiederholen wird Wir müssen nicht den Überblick über einen Zähler oder all diesen Kram behalten , das brauchen wir nicht wirklich. Die einzige Bedingung, die wir hier haben, ist zum Beispiel, habe ich Hunger? Nun ja, stimmt. Okay, es ist wahr. Dann können wir innerhalb der Wow-Schleife eine Methode namens Eat Food aufrufen. Und dann können wir überprüfen , ob wir wieder Hunger haben. Und dann können wir weitermachen. Und wenn wir erst einmal genug gegessen haben, habe ich keinen Hunger mehr, dann kann ich dem entkommen Aber ich weiß nicht, wie oft diese Schleife wiederholen wird, bis ich voll bin. Es ist also ein Unbekannter. Deshalb sind Wire Loops gut dafür geeignet, weil wir nicht wissen, wie viele Iterationen es geben wird. Aber wir finden das innerhalb der Schleife selbst heraus. Deshalb sind Drahtschleifen gut. Die Anzahl der Iterationen ist unbekannt, und aus diesem Grund sind vier Schleifen gut Wenn wir die Anzahl der Iterationen tatsächlich kennen, können wir das mit einer Schleife mit vier Schleifen viel einfacher vereinfachen 30. 6-5. Foreach Loops: Ich werde jetzt eine neue Schleife einführen, Vierer-Each-Schleife bezeichnet wird Der Vorteil einer Vierer-Each-Schleife gegenüber beispielsweise einer Vierer-Schleife besteht nun darin, dass sie die Lesbarkeit verbessert Und mit Sammlungen funktioniert es viel einfacher. Nun, was bedeutet das alles? Nun, lassen Sie uns einen Blick darauf werfen. Ich habe hier eine Beispielanwendung. Ich richte ein Array ein. Es ist ein Integer-Array, und das Array heißt Zahlen. Ich initialisiere das Array mit all diesen Zahlen hier. All diese Zahlen werden in dieser Variablen namens Zahlen enthalten sein in dieser Variablen namens Zahlen Ich verwende jetzt eine Vierschleife, die nacheinander jede Zahl im Array durchläuft und sie dann auf dem Bildschirm ausgibt . Lassen Sie uns die Anwendung hier ausführen. Sie können hier sehen, dass die Anwendung jede der Zahlen in unserem Array enthält. Wir durchlaufen einfach unser Array und geben dabei jede Zahl aus Wir verwenden die Längeneigenschaft des Arrays, um eine Bedingung dafür einzurichten Was ich jetzt tun werde, ist die vier Loop pro Loop vorzustellen. Das Erste, was ich gesagt habe, war, dass die vier, jede Schleife lesbar ist. Schauen wir uns das jetzt an. Wenn wir eine Schleife mit jeweils vier Schlaufen einrichten, verwenden wir das Schlüsselwort Für jedes haben wir die Klammern, genau wie bei einer normalen if-Anweisung Vier Anweisungen in einer Schleife, zum Beispiel. Dann haben wir die bekannten lockigen Zahnspangen. Schauen wir uns an, wie eine Schleife mit jeweils vier aussieht. Ich werde genau das Gleiche machen wie bei der Vierer-Schleife. Sie können sich also vorstellen, dass es sich um eine Schleife mit jeweils vier Schlaufen handelt. Im Kopf der Vierer-Each-Schleife habe ich eine Variable eingerichtet, ich sage in Zahlen. Dann möchte ich für jede Iteration der vier Ea-Schleifen die Variable num ausgeben Nun, was bedeutet das alles? Nun, zunächst einmal können Sie sehen, dass die Lesbarkeit viel besser ist Hier gibt es viel weniger Code. Es sieht viel aufgeräumter kleiner aus und es bläht weniger Aber wie funktioniert es? Was passiert hier in einer Vierschleife? Sie können sehen, dass wir hier eine Variable eingerichtet haben. Bei jeder Iteration können wir diese Variable hier verwenden diese Variable hier Das Gleiche gilt für eine Schleife mit jeweils vier. Bei jeder Iteration entspricht diese Variable dem nächsten Wert in unserem Array die erste Iteration zum ersten Mal ausgeführt wird, wird num gleich eins sein Bei der zweiten Schleife entspricht Num vier Beim dritten Mal neun. In einer Viererschleife entspricht dies beispielsweise dem Index Da wir nur von Null aus zählen, erhöhen wir Null . um eins und beenden den Vorgang, wenn num gleich oder größer als die Länge der Zahlen im Array ist als die Länge der Zahlen im In einer Schleife mit jeweils vier Stück entspricht diese Variable hier jedoch tatsächlich den Werten im Array, nicht dem Der Index ist 0123. Aber in einer Schleife mit jeweils vier, entspricht Numb dem tatsächlichen Wert, 14912 usw. Wir geben das nur auf dem Bildschirm aus . Sie sehen hier, wir verwenden einen Index in der Vierer-Schleife , um auf die Zahl hinter dem Index 149 zuzugreifen Aber in einer Viererschleife wird es tatsächlich so gesetzt, dass der Wert num der Wert ist. Wir geben den Wert nur auf dem Bildschirm aus. Lassen Sie mich Ihnen das beweisen, wenn ich die Anwendung starte. Jetzt können Sie sehen, dass es hier alle Zahlen im Array ausgibt Das zweite, was ich gesagt habe, war, dass es mit Sammlungen viel besser funktioniert Jetzt haben wir ein Standardarray wie dieses Integer-Array verwendet, aber es gibt viel mehr Array-Typen und Sammlungen in C Sharp zum Beispiel, wie Listen und verschiedene Dinge, die jeweils eine bessere Lesbarkeit bieten und Ihnen mehr Optionen bieten, auch mit ihnen zu arbeiten Das ist der Vorteil einer For-Each-Schleife. Sie können sehen, dass es viel besser lesbar ist. Wir müssen diese Variable hier nicht definieren und einen Zähler im Auge behalten. In dieser Hinsicht ist es sehr einfach. Das heißt, eine weitere Schleife in Sharp, und das ist die für jede Schleife. 31. 6-6. ÜBUNG: Zeichne einen Würfel: Ich werde jetzt dein Wissen testen. Jetzt haben wir einige Loops abgedeckt. Und wir werden einen Würfel zeichnen. Und was heißt das? Nun, wenn der Benutzer zum Beispiel die Zahl fünf eingibt und wir die Eingabetaste drücken, zeichnet er den Würfel. Sie können sehen, dass fünf Asterix drüben und fünf unten sind. Wenn der Benutzer sechs eingibt, ist es sechs quer und sechs unten Wie erreichen wir das? Schauen wir uns den Code hier an. Nun, im Moment macht es nicht viel. Wir bitten den Benutzer , eine Zahl einzugeben, und dann speichern wir seine Antwort in einer Variablen namens num. Wir machen gar nichts. Wie gehen wir mit diesem Problem um? Wie zeichnen wir diese Würfel? Nun, wir brauchen einen Mechanismus, mit dem wir so lange Asterixe auf dem Bildschirm zeichnen können, bis wir die Benutzernummer erreicht haben Wenn etwas dauernd etwas tut, denken wir in unserem Kopf Wir brauchen etwas, um weiter etwas zu tun, wir brauchen etwas, das sich ständig in unserem Kopf Wir sollten denken, okay, wir brauchen hier eine Schleife. Ich bin mir nicht sicher, wie viele Loops oder welche Art von Loop, aber ich weiß, dass ich einen Loop brauche, also das ist ein guter Anfang. Als ich über vier Schleifen im Vergleich zu Drahtschleifen gesprochen habe, habe ich gesagt, dass vier Schleifen gut sind, wenn man weiß, wie viele Wiederholungen sie machen werden Sie können eine Drahtschleife verwenden, aber ich sage nur, dass eine Schleife mit vier Schleifen besser wäre In diesem Fall wissen wir, wie viele Iterationen es sind, weil wir die Zahl haben, die der Benutzer eingegeben hat, was der Größe des Würfels entspricht Eine Vier-Schleife wäre ein guter Anfang um dieses Problem nicht anzugehen. Lassen Sie uns beginnen, eine Vierer-Schleife zu erstellen das hier angegebene Schlüsselwort verwenden Nun das Format der vier Schleifen. Es braucht drei Dinge. Wir müssen eine Variable initialisieren. Ich nenne es y, ich werde es auf Null initialisieren Jetzt brauchen wir unseren Zustand. Ich möchte, dass es so lange läuft, bis es kleiner ist als das, was der Benutzer eingegeben hat Dann möchte ich es nur jedes Mal um eins erhöhen. Jetzt möchte ich einen Asterix auf dem Bildschirm ausgeben. Lass uns das löschen und einen Asterix hineinlegen. Lassen Sie uns unser Programm ausführen und sehen, was wir bisher haben. Geben wir die Zahl fünf ein. Sie können sehen, dass der Asterix untergeht. Wir haben fünf Asterix. Sie gehen alle vertikal. Wir haben es gerade auf halbem Weg geschafft. Aber was wir tun müssen, ist, auch die Astrixes rüber zu bringen die Astrixes rüber Jedes Mal, wenn diese vier Schleifen wiederholt werden, zeichnet sie einen Asterix und geht zur nächsten Zeile, zeichnet einen Asterix, zeichnet einen Asterix, Bei jeder Iteration brauchen wir etwas Put . Asterix geht auch diesen Weg. Jedes Mal, wenn der Loop wiederholt wird, wie kriegen wir etwas dazu, etwas weiter zu wie kriegen wir etwas dazu, etwas weiter zu machen? Nun, das ist eine Schleife Was wir tun könnten, ist eine Schleife innerhalb einer Schleife zu platzieren. Schauen wir uns das an. Wir können nicht zweimal denselben Variablennamen haben. Sie können sehen, dass y von dieser Schleife verwendet wird. Wir müssen diesen umbenennen. Nennen wir diesen ohne wirklichen Grund X. Es kann was auch immer sein. Es kann Cheeseburger sein, wenn du es wirklich willst Jetzt haben wir zwei Loops. Wir haben eine sogenannte verschachtelte Schleife. Eine Schleife innerhalb einer Schleife. Jedes Mal, wenn diese Schleife iteriert, macht sie all das. Bedenken Sie das Lassen Sie uns das Programm jetzt irgendwie ausführen und sehen, womit wir es zu tun haben. Ich gebe die Zahl fünf ein und jetzt, wow, was passiert jetzt? Wir haben 25 Sterne, die sinken. Das ist ein bisschen falsch, nicht wahr? Warum macht es das? Das liegt daran, dass jedes Mal, wenn diese Schleife ausgeführt wird, diese Schleife ausgeführt wird. Und jedes Mal, wenn diese Schleife läuft, schreiben wir hier tatsächlich den Asterix, aber auch eine neue Zeile Und jetzt ist das ein Problem für uns. Wir wollen nicht jedes Mal eine neue Zeile schreiben, wenn das läuft. Sonst bekommen wir nur vertikale Astrixe. Was wir tun können, wir können eine neue Methode namens, richtig, einführen eine neue Methode namens, richtig, Was das macht, es schreibt alles in dieser Zeichenfolge hier, all dieses Zeug hier. Aber danach wird keine neue Zeile eingefügt. Es hält es auf derselben Linie. Das ist der Unterschied zwischen der rechten Zeile , die das schreibt und dann einer neuen Zeile. Aber die rechte Seite schreibt das einfach und fügt keine neue Zeile ein. Schauen wir uns das an. Geben wir jetzt Nummer fünf ein. Jetzt kannst du sehen, oh, alle Asterix bewegen sich über die Jetzt wissen sie alle, was hier vor sich geht. Nun, das liegt daran, dass wir momentan überhaupt keine Zeilen schreiben. Es ist einfach so ziemlich das Schreiben in eine Richtung. Ich muss anfangen, diese neuen Zeilen einzufügen. Im Moment haben wir 25 Asterix, die da rüber gehen. Ich will alle fünf davon eine neue Zeile. Jetzt wissen wir, wenn der Benutzer hier die Zahl fünf eingibt, wird diese innere Schleife fünfmal wiederholt Sobald die fünfte Schleife abgeschlossen ist, beendet der Code diese Schleife und führt den Rest des Codes weiter aus, bis die erste Schleife wieder von vorne beginnt Genau hier muss ich eine neue Zeile eingeben. Wie gebe ich eine neue Zeile ein? Es gibt viele Möglichkeiten, aber mit dem Wissen, das wir bereits kennen, können wir das einfach tun. Wir schreiben nichts. Aber dann fügt es diese Zeile danach hinzu. Lass uns das ausführen. Lassen Sie uns jetzt zur Zahl sechs gehen, nur um zu beweisen, dass es kein Zufall ist, nur um zu beweisen, dass es kein Zufall ist, sondern dass aus einer anderen Zahl ein größerer Würfel Jetzt haben wir 123456 durch 123456 runter. Wir haben es so ziemlich geschafft. Lassen Sie uns diesen Code ganz schnell durchgehen. Wir können die Nummer des Benutzers nehmen. Jetzt haben wir eine verschachtelte Schleife. diese Schleife zum ersten Mal iteriert, führt sie diesen Code hier aus, was auch eine weitere Schleife ist Jetzt geht es hier rein und gibt einen Asterix auf Wenn der Benutzer beispielsweise die Zahl fünf eingibt, ersetzen wir diese. Es ist besser lesbar. Es wird das fünfmal laufen. Jetzt haben wir fünf Asterix auf dem Bildschirm. Sobald diese Schleife beendet ist, die Schleife jetzt beendet Jetzt drucken wir eine neue Zeile auf dem Bildschirm. Wir haben eine neue Zeile eingegeben, sie wird so aussehen. Jetzt starten wir zum zweiten Mal unsere Schleife , die Hauptschleife. Sobald dieser gestartet ist, wird dieser Loop erneut fünfmal ausgeführt. Jetzt wird es so aussehen. Sobald die Schleife fertig ist, druckt sie eine neue Zeile. Jetzt sieht es so aus, dann geht es wieder nach oben. So funktioniert es, sodass Sie sich vorstellen können, was hier vor sich geht. Die Antwort auf unser Problem. Wenn wir würfeln wollen und wir wollen, dass Asterix nach unten geht, dann eine Wenn wir aber auch wollen, dass sie runter und quer verlaufen, dann überlege dir etwas wie eine verschachtelte So können wir dieses Problem lösen , indem wir Loops in Sharp verwenden 32. 7-1. Das Break-Statement: Deshalb werde ich eine neue Art von Aussage einführen , die sogenannte Break-Anweisung. Als wir hier über Switch-Anweisungen gesprochen haben, haben wir uns kurz mit der Break-Anweisung befasst, aber nicht wirklich ausführlich. Aber jetzt werde ich genau erklären, was das macht und wie es funktioniert und wie es uns tatsächlich nützen kann. Pause ist der Schlüssel. Bei der Verwendung einer Switch-Anweisung gibt der Benutzer beispielsweise einen Wochentag ein. Wir speichern die Antwort in einer Variablen. Und wenn sie dann zum Beispiel Mittwoch eingeben, dann wird diese Codezeile hier ausgeführt. Sobald diese Codezeile ausgeführt wurde, diese Break-Anweisung, verschwindet sie aus dieser Switch-Anweisung und der Kontrollfluss der Anwendung wird fortgesetzt Was meine ich mit Kontrollfluss? Nun, wenn wir unsere Software starten, wird die Hauptmethode automatisch ausgeführt. Und dann wird die erste Codezeile ausgeführt, die zweite Zeile, und sie ist sequentiell, sie läuft bis zum Ende Das ist der Kontrollfluss, so wird Ihre Anwendung ausgeführt Aber die Sache mit der Switch-Anweisung ist, wenn der Kontrollfluss hier ein Break-Schlüsselwort erreicht, anstatt die nächste Zeile auszuführen, die nächste, die nächste, die nächste, die nächste ganz unten, trifft sie auf das Break-Schlüsselwort und überspringt dann sofort alles, überspringt dann sofort danach geht es weiter Das ist die Stärke der Break-Anweisung wenn sie in einer Switch-Anweisung verwendet wird Schauen wir uns an, wie die Break-Anweisung in so etwas wie einer Drahtschleife verwendet werden kann. Schauen wir uns hier ein einfaches Beispiel an , was wir tun, wir bitten den Benutzer , eine Zahl einzugeben. Was dieses Programm macht, das einfache Programm, wir zählen nur bis zu dieser Zahl. Wenn ich das Programm hier starte und der Benutzer die Zahl Acht eingibt, zählen wir einfach bis zur Zahl Acht. Sehr einfach. Wir verwenden dafür einen Wile-Loop Wir haben hier eine Bedingung. Wir sagen, wenn unser Zähler kleiner oder gleich der vom Benutzer ausgegebenen Zahl ist, erhöht der Zähler den Zähler dann um eins und wir wiederholen das einfach. Es ist sehr einfach, wie es funktioniert. Manchmal, wenn Sie eine Schleife erstellen, wie zum Beispiel eine Drahtschleife oder sogar eine Viererschleife, haben Sie möglicherweise keine Bedingung. In diesem Fall richten wir eine Bedingung ein, weil wir wissen, was der Benutzer eingeben wird, und wir zählen bis dahin. In einigen Fällen haben wir jedoch keine Bedingung. Wir können keine Bedingung haben. Wir wissen vielleicht nicht, was das Endziel ist, und wir könnten das Endziel tatsächlich in unserer Drahtschleife herausfinden . Weißt du, zu einem späteren Zeitpunkt könnte etwas herausgefunden werden. Zum Beispiel, wenn wir eine Datei aus dem Internet herunterladen und die Datei in Teilen gleichzeitig herunterladen und wir möglicherweise nicht wissen, wie groß die Datei ist, die wir herunterladen. In diesem Fall können wir also eine Drahtschleife einrichten und für immer und ewig weitermachen , bis die Datei heruntergeladen ist In solchen Fällen haben wir keine Bedingung. Was wir hier also tun können, ist eine Bedingung aufzustellen , die immer zutrifft. Das wird eine endlose Schleife machen , bis wir zum Beispiel die gesamte Datei heruntergeladen haben, und dann können wir die Schleife manuell verlassen Das kann auch durchaus üblich sein , wenn wir keine Bedingung haben und diese Drahtschleife einfach auf unbestimmte Zeit eingeschaltet haben. Was wir tun können, ist aus dieser Drahtschleife auszubrechen um zu verhindern, dass sie sich für immer wiederholt Dies ist eine gute Möglichkeit, das Break-Schlüsselwort zu verwenden. Wir können es in Switch-Anweisungen verwenden, aber wir können es auch verwenden wenn wir eine unbestimmte Bedingung haben, was immer zutrifft Schauen wir uns zum Beispiel dieses Beispiel an. Und was ich tun werde, ich werde es stattdessen mit einem Break-Schlüsselwort umschreiben, und es wird genau dasselbe tun Nehmen wir an, wir haben keine Bedingung für diese Drahtschleife. Sie wird auf unbestimmte Zeit wiederholt. Wir brauchen einen Weg, um hier herauszukommen, damit wir nicht in einer Endlosschleife feststecken Was wir sagen werden, ist, wenn der Zähler zu irgendeinem Zeitpunkt größer ist als die Zahl, die der Benutzer eingegeben hat, dann brechen wir aus der Schleife aus. Sie können sehen, dass, sobald ich das Break-Schlüsselwort eingegeben habe, auch dieses Wire-Schlüsselwort hervorgehoben wurde, und das ist Visual Studio, das uns hilft Wir könnten zum Beispiel eine Drahtschleife in einer anderen Drahtschleife haben einer anderen Drahtschleife Innerhalb einer Schleife mit vier Schleifen können wir kaskadierende Schleifen haben Und es kann ziemlich verwirrend sein, wenn ein Schlüsselwort verwendet wird. Break Visual Studio sagt nur, okay, Sie haben das Break-Schlüsselwort eingegeben, das ist die Schleife , mit der es verknüpft ist Und das ist die Schleife, aus der Sie ausbrechen werden, genau wie bei der Switch-Anweisung Mit dem Schlüsselwort break wird beispielsweise verhindert, dass sich diese Drahtschleife für immer wiederholt. Es heißt wortwörtlich, okay, diese Bedingung wird als wahr ausgewertet, lassen wir diese Schleife hinter und fahren mit dem Rest des Programms fort Das Schlüsselwort brake steuert den Ausführungsablauf des Codes. Es heißt im Grunde, lass uns von hier verschwinden und mit dem Rest des Programms weitermachen. Das ist es, was das Schlüsselwort Brake im Wesentlichen tut. Lassen Sie uns die Software ausführen und einfach bestätigen, dass sie genau dasselbe tut. Geben wir zum Beispiel die Zahl Acht ein. Sie können sehen, dass es bis zur Zahl Acht zählt. Die Verwendung des Schlüsselworts Brake ist eine weitere Möglichkeit, das Ziel zuvor zu erreichen Es wird jedoch häufig verwendet, wenn Sie beispielsweise nicht wirklich eine Bedingung haben und aus einer Schleife entkommen möchten Das ist die Stärke der Bremsaussage in C scharf. 33. 7-2. Das continue-Statement: Die fortgesetzte Aussage, was ist sie? Was macht es? Jetzt habe ich die Break-Anweisung erklärt. Und eine Break-Anweisung nur zur Auffrischung bringt Sie komplett aus einer Schleife heraus und fährt mit dem Rest des Programms Break-Anweisungen können in vier Schleifen verwendet werden. While-Schleifen, jeweils vier Schleifen, alle Arten von Schleifen. Nur um aus der Schleife zu entkommen, es ist nicht endlos der fortgesetzten Anweisung wird jedoch nur eine Iteration einer Schleife übersprungen Was ich tun werde, ich werde Ihnen zeigen, wie die Continued-Anweisung in einer Vierschleife funktioniert Betrachten Sie dieses Beispiel. Hier bitte ich den Benutzer, eine Zahl für das, was ich tun werde, einzugeben eine Zahl für das, was ich tun werde, Ich zähle bis zehn, aber ich überspringe die Zahl, die der Benutzer eingibt. Schauen wir uns dieses Beispiel an. Also werde ich die Zahl sechs eingeben und Sie können das Ergebnis hier sehen. Ich zähle von Null, ich gehe bis zehn, aber ich überspringe die Benutzernummer. Die Nummer sechs. Die Nummer 5-76 wird übersprungen Ich verwende einen Vier-Loop-Modus , um das zu erreichen. Ich zähle 0-10 Ich verwende eine Variable namens. Ich sage, wenn der Zähler nicht der Benutzernummer entspricht, geben Sie den Zähler einfach im Fenster aus Ein bisschen Wissenswertes für Sie, falls Sie von der Programmiersprache C gehört haben Und außerdem haben wir schon einmal über die Inkremente gesprochen, bei denen Sie einer Variablen eins hinzufügen, plus, plus eingeben Sie können jetzt sehen, wie Plus Plus entstanden ist , die Programmiersprache C plus, plus, es ist nur eins mehr als sein Vorgänger Das ist ziemlich cool, nicht wahr? Falls du dich jemals darüber gewundert hast. Wie auch immer, wie können wir das mit einer kontinuierlichen Aussage erreichen? Schauen wir uns das an. Ich werde das mit einer fortlaufenden Anweisung neu schreiben. Ich werde sagen, ob der aktuelle Zähler der Nummer des Benutzers entspricht , dann fahre ich fort Das wird genau das Gleiche bewirken. Das hier, lass mich das beweisen. Geben wir die Zahl sechs ein. Auch hier können Sie sehen, dass die Zahl sechs tatsächlich übersprungen wurde . Wie funktioniert das? Eine Sache wird dir auffallen, wenn continue eingibst oder den Mauszeiger darüber bewegst, genau wie bei der Brake-Anweisung, sie dir sagt, an welche Schleife sie gebunden ist Wir haben Weiter geschrieben. Es heißt, okay, wir sind hier an diese vier Schleifen gebunden. Wenn der aktuelle Zähler beispielsweise der Zahl des Benutzers entspricht, fahren Sie fort. Was macht Continue? Es verhindert, dass der Rest des Inhalts innerhalb der Schleife ausgeführt wird. Sobald es ausgeführt wird, geht es zurück zum Anfang der Vierschleife und weiter nach unten. Dieser Code hier wird nie ausgeführt. Selbst wenn ich hier eine Menge Code habe, all das hier, wenn diese Continue-Anweisung jemals ausgeführt wird, wird all dies ignoriert und der Kontrollfluss geht zurück zum Anfang der Schleife. Wir fahren weiter runter. Auch hier verändert es den Ausführungsablauf genau wie die Break-Anweisung. Aber wie die Break-Anweisung vollständig aus der Schleife ausbricht und die Continued-Anweisung fortsetzt, verhindert lediglich, dass der Rest der aktuellen Iteration der Schleife ausgeführt Und dann geht es zurück zum Anfang und setzt die Schleife dann wie gewohnt fort Das ist der Unterschied zwischen der Continue-Anweisung und der Break-Anweisung, die ich Ihnen zeigen kann Wenn ich diese Bedingung nun vollständig entferne, werden diese vier Schleifen so gut wie nichts bewirken. Weil dieser Code hier nicht erreichbar ist. Sogar Visual Studio ist abgestuft, was Ihnen sagt, dass dies niemals ausgeführt wird, da wir hier keine Bedingung haben Bei jeder Iteration dieser vier Schleifen stoßen wir einfach auf diese fortlaufende Und es wird einfach immer wieder zum Anfang in dieser winzigen Schleife hier Das ist also die Stärke der fortgesetzten Aussage in C-Sharp. 34. 8-1. Ausnahmebehandlung (try, catch, finally): Jetzt möchte ich über die Fehlerbehandlung oder Ausnahmebehandlung sprechen . In der Welt von Sharp C sind sie ein Synonym , wenn es um Ausnahmen sind Ergebnisse , die man nicht erwartet Wenn Sie sich eine Ausnahme im Wörterbuch ansehen, handelt es sich um eine Person oder Sache , die von einer allgemeinen Aussage ausgeschlossen ist , und was noch wichtiger ist, dass sie keiner Regel folgt Schauen Sie sich dieses Beispiel hier an. Wir fragen den Benutzer nach zwei Zahlen. Wir setzen ihre Eingabe, die eine Zeichenfolge ist, genau hier in eine Integer-Variable ein. Und wir verwenden die Methode für int 32. Um dieses Ziel zu erreichen, nehmen wir eine Zeichenfolge und konvertieren sie in eine Ganzzahl. Das zweite, was wir hier tun, ist, die beiden Zahlen zusammen zu dividieren und sie in eine Variable namens result umzuwandeln. Also dieses Programm, es ist ziemlich flockig. Es gibt ein paar Fehler, die auftreten können, wenn wir nicht vorsichtig sind Im Allgemeinen können Fehler auftreten , wenn wir es mit Benutzern zu tun haben, weil Benutzer Dinge tun, die wir einfach nicht erwarten. Wenn ich die Anwendung starte, gib manchmal deine erste Nummer ein. Was ist nun, wenn der Benutzer einfach Hallo eingibt? Was ist, wenn sie es falsch lesen und ihre E-Mail-Adresse angeben? Benutzer können alles tun. Was ist, wenn sie versehentlich Eingabetaste drücken und keine Zahl eingeben? Es gibt viele Dinge, die ein Benutzer tun kann , um Ihre Software möglicherweise zu beschädigen. Diese Dinge werden als unerwartete Dinge bezeichnet, wenn ich viele Buchstaben eintippe und die Eingabetaste drücke. Jetzt können Sie hier sehen, dass wir hier diese nette kleine Fehlermeldung haben . Es heißt, dass die Ausnahme nicht behandelt wurde. Das bedeutet im Grunde, okay, ein Fehler ist aufgetreten, eine Ausnahme ist aufgetreten Und es wird nicht behandelt, was bedeutet, dass wir nichts dagegen tun Der Computer kann nichts gegen diesen Fehler tun , weil er versucht, ihn in eine Zahl umzuwandeln Er kann es einfach nicht tun. Es weiß nicht, was zu tun ist. Also müssen wir dem System sagen, wie es mit dieser Art von Fehler umgehen soll. Wenn ich mir diese Software hier ansehe, tritt dieser Fehler auf, wenn wir die Eingabe des Benutzers annehmen und dann versuchen, sie in eine Zahl umzuwandeln. Wenn ich den Mauszeiger über diese Methode hier, die wir verwenden, auf 32 setze, siehst du, dass dieser Dialog erscheint Es sagt uns, was die Methode macht. Es sagt uns, was uns die Methode als Gegenleistung zurückgibt. Aber es gibt auch diese zusätzliche Information unten, die Ausnahmen besagt. Dies sind nun die beiden möglichen Fehler, die auftreten können, wenn diese Methode bis 32 verwendet wird. Die erste ist eine Formatausnahme. Das ist der Fehler, den wir gerade erlebt haben. Wir geben zum Beispiel ein Wort ein und dann wird eine sogenannte Formatausnahme ausgelöst. Das liegt daran, dass das Format nicht korrekt ist. Es wird eine Zahl erwartet, wir haben einige Buchstaben, das Format ist falsch. Der andere Fehler ist eine Overflow-Ausnahme. Ich schätze, das ist der Fall, wenn Sie eine wirklich große Zahl eingeben und sie physisch nicht in den Datentyp passt , der eine Ganzzahl ist Jetzt geht die 32-Bit-Ganzzahl auf etwa 2 Milliarden. Wenn ich versuche, 5 Billionen einzugeben, würde das wahrscheinlich den anderen Fehler auslösen, bei dem es die Overflow-Ausnahme handelt Was wir dagegen tun können, ist diese Art von Fehlern zu behandeln Wenn der Computer sagt, oh, du hast mir ein Wort gegeben, ich wollte eine Ganzzahl, kann ich diese Wörter nicht in eine Ganzzahl umwandeln. Wir können das abfangen und sagen, okay, die Benutzer haben einige Wörter eingegeben Jetzt werde ich Ihnen sagen, wie Sie damit umgehen sollen So gehen Sie dieses Problem Der zweite Fehler, der auftreten kann, ist, dass wir beim Teilen durch Null die beiden Zahlen vom Benutzer nehmen. Angenommen, sie haben zwei gültige Zahlen eingegeben, versuchen wir, sie zusammen zu dividieren. Wenn die zweite Zahl jedoch eine Null ist, tritt ein weiterer Fehler auf. Wenn ich Null eingebe, haben wir jetzt einen weiteren Fehler. Jetzt ist es wieder unbehandelt , weil wir nichts dagegen tun Und diese Art von Fehler ist eine Ausnahme, wenn man durch Null dividiert. Die Botschaft, die wir versuchen durch Null zu teilen. Der Computer kann das physisch nicht. Er weiß nicht, wie das mathematisch ist, er kann nicht durch Null teilen Aber wir sagen ihr nicht, wie sie dieses Problem umgehen kann. Das ist das Ziel dieses Tutorials. Jetzt werde ich Ihnen zeigen, wie wir mit Ausnahmen umgehen können. Jetzt geht dieses Thema ziemlich tief, aber wir werden hier nur an der Oberfläche kratzen Was wir hier verwenden, ist ein Schlüsselwort namens Tri. Es ist ziemlich einfach, DRY wie die meisten Keywords. Wir haben unsere vertrauten lockigen Zahnspangen. Wir beenden hier eine lockige Zahnspange, was Tri sagt, kannst du bitte versuchen, etwas für mich zu tun? Weil ich das Gefühl habe, dass ein Fehler auftreten wird. Wir wissen das, denn wenn wir den Mauszeiger über diese Methode bewegen, können zwei mögliche Fehler auftreten Da wir den Benutzer um Eingaben bitten, wissen wir, dass es Anzeichen dafür gibt, dass Probleme auftreten. Wir sagen im Grunde, bitte versuchen Sie es. So funktioniert das Schlüsselwort tri. Wir versuchen etwas. Was passiert nun, wenn das fehlschlägt? Ein Versuch ist entweder erfolgreich und das Programm läuft wie gewohnt, oder es kann ein Fehler auftreten. Dieser Teil ist das Schlüsselwort catch. Nochmal, lockige Zahnspangen, genau wie zuvor. Nun, ein Versuch kann nicht ohne einen Haken existieren. Wenn ich das Schlüsselwort catch hier entferne, erhalten wir eine rote Linie. Wenn ich mit der Maus darüber fahre, wird erwarteter Fang angezeigt Oder lassen Sie uns das endlich zurücklegen. Die rote Linie ist weg. In diesem Catch-Abschnitt hier ist es gut, dieser Code wird ausgeführt, wenn hier ein Fehler auftritt. Dies teilt dem System mit, wie es mit diesem Fehler umgehen soll. Sagen wir einfach, es ist ein Fehler aufgetreten. Teilen wir dem Benutzer mit, dass ein Fehler aufgetreten ist. Sehr generisch. Ich denke, wenn ich diesen Fehler sehen würde, wäre ich als Benutzer genervt , weil ich keine Ahnung habe, was das bedeutet Es ist sehr allgemein, aber darauf können wir später noch näher eingehen. Lass uns einfach sehen, ob es funktioniert. Gib deine erste Zahl ein, lass uns ein paar Wörter oder Buchstaben eingeben. Jetzt können Sie sehen, dass wir einen generischen Fehler haben. Jetzt ist ein Fehler aufgetreten. Unsere Software ist nicht abgestürzt, das ist also gut so. Aber sie sagt nicht wirklich so viele Informationen aus. Wir bekommen nur diese allgemeine Nachricht. Wir wissen nicht, warum das passiert ist, wir wissen nicht, was schief gelaufen ist. Es ist für uns nicht sehr nützlich, aber zumindest ist unsere Software nicht abgestürzt Das ist also ein gutes Zeichen. Schauen wir uns nun an, wie wir dem Benutzer besseres Feedback geben können . Wir möchten ihnen nicht mitteilen, dass ein Fehler aufgetreten ist , da es sich nicht um wirklich nützliche Informationen handelt. Der Benutzer kann dann nicht zurückgehen und herausfinden, was er falsch gemacht hat. Was wir hier neben Catch tun können, ist Klammern zu öffnen und zu schließen, eine Ausnahme einzugeben und ihr dann einen Namen zu geben Das kann alles sein, es könnte EX sein, du kannst es nennen, wie du willst Im Grunde ist es eine Variable, die wir einrichten . Der Datentyp ist vom Typ Ausnahme. So wie wir einen Datentyp int haben, dieser ist eine Ausnahme. Jetzt werden wir uns später mit dem befassen, was als Kurs bezeichnet wird, aber mach dir darüber vorerst keine Gedanken. Aber jetzt haben wir diese Variable namens E definiert, die vom Datentyp Exception ist. Wir können dies verwenden, um einige Informationen über unseren Fehler zu erhalten. Was ich hier tun werde, ist, wenn wir Zeichenketten zusammenfügen, verwenden wir hier ein Plus. Ich werde hier sagen, dass die Nachrichtennachricht eine Zeichenketteneigenschaft dieser Ausnahmevariablen ist. Sie wird uns Feedback geben, die Fehlermeldung die den Grund für die Ausnahme erklärt. Wenn ich jetzt die Anwendung starte und die erste Zahl eingebe, die aus vielen Buchstaben besteht, haben wir jetzt ein bisschen mehr Informationen, ein Fehler ist aufgetreten. Die Eingabezeichenfolge hatte nicht das Crack-Format. Wenn der Benutzer das liest, kann er denken, oh, okay, ja, ich habe die Frage falsch gelesen, ich dachte, sie würde nach meiner E-Mail-Adresse fragen oder so. Jetzt geben wir dem Benutzer also nützliche Informationen zurück. Was ist nun, wenn wir anpassen möchten? Was wird passieren? Abhängig von der Art des Fehlers, der aufgetreten ist. Denken Sie jetzt daran, dass es mit dieser Anwendung einige Probleme gibt. Ein paar Dinge , die passieren können. Erstens kann der Benutzer einige Buchstaben eingeben und sie nicht in eine Ganzzahl umwandeln. Das haben wir uns jetzt angesehen. Das andere ist, dass wir versuchen, durch Null zu teilen. Aber was hier passiert, ist, dass wir nur diese eine Codezeile machen. Was auch immer hier passiert, es passiert ein Fehler. Wie können wir das anpassen? Sagen Sie dem Benutzer vielleicht, dass er etwas falsch gemacht hat. Wenn sie versehentlich einige Buchstaben eingeben, tun sie vielleicht etwas anderes. Wenn wir durch Null teilen , können wir hier verschiedene Arten von Ausnahmen erkennen. Wenn ich das kopiere und einfüge, werde ich es hier zweimal einfügen, und ich werde bald erklären, warum. Die erste Ausnahme , die hier passieren kann, ist die Formatausnahme. Was ich hier tun kann, ist die Formatausnahme genau hier abzufangen. Was hier passieren wird, ist, wenn eine Formatausnahme auftritt, ein Fehler, der mit der Formatierung zu tun hat, wir können dem Benutzer sagen, ich weiß es nicht. Wir könnten ihnen eine wirklich sarkastische Botschaft geben. Wir könnten sagen, richtig lesen lernen, weil sie die Frage offenkundig nicht gelesen Das war zum Beispiel, eine Zahl einzugeben und dann ihre E-Mail-Adresse Die andere wurde durch Null geteilt, okay? Also dividiere durch Null Ausnahme und die Nachricht, die ich dem Benutzer vielleicht geben möchte, hey Kumpel, du kannst nicht durch Null teilen. Was du dann tust, wenn es kein möglicher Fehler ist und es kein möglicher Fehler ist, dann ist das ein generischer Fehler. Als wir diese If-Anweisung hatten, hatten wir am Ende eine weitere, ähnlich wie bei der Switch-Anweisung, hatten wir den Fall. Am Ende hatten wir dann eine Standardeinstellung. Das ist es, was das hier erreichen soll. Wenn also keiner dieser Fehler aufgetreten ist, haben wir immer unser kleines Sicherheitsnetz am unteren Rand, das nur eine Botschaft hier in der realen Welt aussendet Sie werden hier wahrscheinlich nicht nur eine Nachricht haben Sie würden das System diese Fehler wahrscheinlich anders protokollieren lassen und diese Fehler anders. Aber das ist nur ein Beispiel. Sie können jetzt sehen, ob ich die Anwendung starte, ich gebe ein Wort ein. Sie sagt mir jetzt, dass ich lernen soll, richtig zu lesen. Charmant, nicht wahr? Wenn ich jetzt zwei Zahlen eingebe, versuche ich, durch Null zu dividieren. Hey Bird, du kannst nicht durch Null teilen. Jetzt können Sie sehen, dass es sich um zwei verschiedene Dinge handelt, je nachdem, welcher Fehler aufgetreten ist. Das Letzte, worüber ich sprechen möchte, ist das Schlüsselwort final. Jetzt passt das Finaly-Schlüsselwort zu einem Tri-Schlüsselwort. Es ist optional, Sie müssen keines verwenden, aber es kann sehr nützlich sein. Schauen wir uns an, wie es funktioniert. Schließlich gehen wir entweder nach oder nach allen Fängen nach dem Versuch Wenn ein Fehler aufgetreten ist, wird der gesamte Code in diesem Finally-Block ausgeführt, auch wenn ein Fehler aufgetreten ist Wenn kein Fehler aufgetreten ist, wird dieser ebenfalls ausgeführt. Es ist vielleicht sehr nützlich, wenn Sie mit einer Datenbank oder sogenannten Threads arbeiten einer Datenbank oder sogenannten Threads und Verbindungen schließen oder alles fertigstellen können , wofür es wirklich gedacht ist Aber in unserem kleinen Beispiel hier können wir dem Benutzer einfach dafür danken, dass er das Programm benutzt Zum Beispiel danke ich dem Benutzer für die Verwendung des Programms. Schauen wir uns das ganz schnell an. Wenn ich die Software verwende und etwas Ungültiges eingebe, sagen wir dem Benutzer, dass er lernen soll, richtig zu lesen, sagen dann Danke, dass er unser Programm benutzt. Das ist ziemlich sarkastisch, nicht wahr? Geben wir nun einige gültige Zahlen ein. Jetzt erhalten wir ein aktuelles Ergebnis. Hier können Sie sehen, dass der Finaly-Block immer noch ausgeführt wird. Vielen Dank, dass Sie unser Programm verwenden. Sie können sehen, dass endlich ausgeführt wird unabhängig davon, ob ein Fehler aufgetreten ist oder nicht. Wie gesagt, es ist optional, man braucht es nicht, aber es kann sehr nützlich sein, das heißt, wie man Ausnahmen abfängt und behandelt , wenn man mit C Sharp arbeitet. 35. 8-2. 2D-, 3D- und mehrdimensionale Arrays: Ich möchte das Konzept der zweidimensionalen Arrays in C Sharp vorstellen zweidimensionalen Arrays Was wir uns bisher angesehen haben, ist ein eindimensionales Standardarray Standardmäßig wird ein Array im Shop als eine Dimension betrachtet. Was ist jedoch, wenn wir zum Beispiel ein Schachbrett simulieren wollen , bei dem acht Felder quer verlaufen , aber auch acht Felder nach oben gehen. Dann können wir uns auf diese Felder im Schachspiel beziehen, wie auf ein Rastersystem, bei dem x quer und y nach oben geht. Wir können das mit einem sogenannten zweidimensionalen Array im Shop simulieren . Schauen wir uns dieses Beispiel hier an. Wir haben hier gerade einige Zahlen definiert und speichern sie in einem Integer-Array namens Numb Und wir geben gerade die erste Zahl in unserem Array auf dem Wenn ich die Anwendung starte, ist die erste Zahl im Array eins, was richtig ist, weil dies die erste Zahl ist Ich zeige Ihnen ein Beispiel für ein zweidimensionales Array. Das ist jetzt unser eindimensionales Array. Ich werde nur ein paar Zahlen entfernen. Das Beispiel ist nicht langatmig. Um dieses eindimensionale Array hier in ein zweidimensionales Array umzuwandeln, verwende ich hier ein Komma innerhalb dieser eckigen Klammern Nun, das sagt C Sharp, hey, ich möchte jetzt ein zweidimensionales Array erstellen So visualisieren wir unser Array. Es sieht ungefähr so aus. Aber ich möchte ein Zwei-D-Array erstellen , das so aussehen wird. Weil es in der Natur von zwei Dimensionen liegt, gibt es eine Dimension, die rüber geht und eine, die nach unten geht. Und dann füllt es sich wie Millimeterpapier, ein Schachbrett, so etwas aus Das wollen wir hier nachahmen. Jetzt habe ich hier Kommas gesetzt, wir erhalten sofort eine rote Linie weil C Sharp weiß, dass wir ein Zwei-D-Array erstellen Aber dieses Format ist falsch. Das Format für ein Zwei-D-Array sieht so aus. Die äußeren geschweiften Klammern hier sind der Behälter für alles Dann befindet sich in jedem Satz geschweifter Klammern jede Zeile. Wenn ich das kopiere und das da reinlege, kopiere das. Steck das da rein. Und kopiere das. Und leg das da rein. Nun, diese Initialisierung der beiden Arrays hier sieht so ziemlich so aus Das ist dasselbe wie das. So solltest du dir das vorstellen. Nun, wie greifen wir eigentlich auf diese Zahlen zu? Auch dieses Format ist falsch. Wenn wir mit der Maus darüber fahren, können wir hier eine falsche Anzahl von Indizes sehen Das liegt daran, dass es jetzt zwei erwartet. Da wir hier ein Zweier-Array erstellt haben, können wir nur das Kommasystem verwenden, zum Beispiel 00 Das wird nun tatsächlich die erste Zahl im ersten Block ausgeben die erste Zahl im ersten Block Hier ist der erste Block, hier ist der zweite Block. Hier ist der dritte Block. Auch hier beginnen alle Indizes bei Null. Dies ist der erste Wert, der hier durch die erste Zahl repräsentiert wird, Null Die zweite Zahl hier Dies ist die Nummer des Elements innerhalb des ersten Blocks, das ist das erste Objekt dort, das eins sein sollte. Dies sollte genau hier Nummer eins ausgeben , wenn wir die Anwendung dort ausführen, Nummer eins Wenn wir die zweite Ziffer ändern, zum Beispiel zwei, dann 012, sollte es Nummer drei ausgeben , wie Sie dort sehen können Wenn wir das auf zwei erhöhen, dann sollte es hier draußen sein, weil es zwei quer und zwei unten ist, sollten wir Nummer neun bekommen. Da haben wir's. So greifen Sie auf Informationen aus einem Zwei-D-Array in C Sharp zu. Jetzt stellen Sie sich vielleicht die Frage, was ist mit drei? Was ist mit vier Arrays? Wir betrachten das als zwei. Nun, dieses Beispiel wird viel zu verrückt werden. Das minimiert es. Das wird jetzt so aussehen. Wie wäre es mit einer Reihe von drei? Nun ja, sehr einfach. Nehmen wir jedes davon und ersetzen wir jede Zahl durch ein zusätzliches Set. Wenn wir nun den Mauszeiger hier drüber bewegen und falsche Anzahl von Indizes drei erwartet hat, geben wir einen dritten ein Jetzt können Sie sehen, dass das Koordinatensystem dreidimensional ist Wenn ich das Programm jetzt starte ist die erste Zahl im Array eins, was sie auch ist. Dies ist der allererste Artikel. Sie können also sehen, dass dies quasi das Konzept von zwei Arrays ist. Drei Arrays. Und weißt du, von da an kann es weitergehen Und du stellst dir vielleicht die Frage, wie viele Dimensionen können wir gehen? Nun, die Antwort 32, falls Sie sich das jemals fragen sollten. Wir können also bis zu 32 Dimensionen in einem Array im Shop haben. 36. 8-3. Übung - Schach - Finde das Königinnenspiel: Ich werde mich jetzt einer kleinen Herausforderung stellen. Ich werde Ihr Wissen über zweidimensionale Arrays und auch über Problemlösungen testen zweidimensionale Arrays und auch über Problemlösungen Betrachten Sie diese Vorlage hier. Sie emuliert ein Schachbrett Wenn Sie mit Schach vertraut sind, dann haben Sie das vielleicht schon herausgefunden Wenn nicht, mach dir darüber keine Sorgen. Wir werden eine Software entwickeln, um alle Königinnen zu finden, was durch ein Q auf diesem Schachbrett dargestellt wird Nun, so sieht das Schachbrett aus. Wir haben ein Schloss, einen Turm, einen Bischof, eine Königin und einen König, alle Bauern, einige leere Felder, die durch Null dargestellt werden, und auch die Figuren der anderen Spieler Wenn Sie mit Schach nicht vertraut sind, wollen wir das Stichwort finden Dies ist eine Zeichenanordnung, die von Shah repräsentiert wird. In einem Zeichen stehen sie alle in einfachen Anführungszeichen und Sie können nur einen Buchstaben enthalten, andernfalls wird ein Fehler ausgegeben Was wir tun wollen, ist die Hinweise in diesem zweidimensionalen Array zu finden diesem zweidimensionalen Array und sie dann im Fenster auszugeben Also, wie machen wir das? Wie finden wir etwas? Hier ist unser 2-D-Array. Wie suchen wir uns diese Königinnen aus? Nun, was wir tun wollen, wir wollen jeden einzelnen testen. Ist das ein Hinweis, ist das ein Queue, Nein, usw., und so weiter. In deinem Kopf solltest du denken, okay, eine Schleife. Wir brauchen eine Schleife. Aber da es mehr als eine Dimension gibt, müssen wir das Ganze überprüfen. Wir müssen auch überprüfen, nach unten gehen, wir überprüfen all das. Gehen Sie einen runter, überprüfen Sie alle. Eins, check, all das. In deinem Kopf solltest du denken, okay, wir brauchen einen Loop und wir brauchen zwei davon. Wir wissen bereits, wie viele Iterationen wir brauchen, denn wir haben acht, die durchqueren und acht, die runter gehen Du solltest denken, okay, 24 Loops. Vier, weil wir die Anzahl der Iterationen und eine Schleife kennen , weil wir immer wieder etwas überprüfen müssen, machen wir 24 Schleifen Die erste Schleife, die ich machen werde , ist die Y-Schleife, und diese wird sich abwärts bewegen. Fangen wir damit Wir werden mit Null beginnen, weil alle Indizes bei Null beginnen Das ist ein leichtes 00 , y ist kleiner. Jetzt wollen wir hier die Länge dieser Dimension ermitteln. Wie machen wir das? Wir nehmen hier den Namen unserer beiden Arrays, Punkt. Und dann wollen wir die Methode get length verwenden. Wenn wir Klammern dazu öffnen, ich nach einer Dimension gefragt, nun, das ist die erste Dimension, ich werde hier Null eingeben Das ergibt die erste Dimension und dann das Semikolon und wird jedes Mal um eins erhöht Das ist unsere erste Schleife. Jetzt laufen wir runter. Wir müssen uns auch durchqueren. Wir benötigen eine weitere Schleife innerhalb unserer Schleife, die hier die X-Achse darstellt. Wir wollen die zweite Dimension hineinbringen, die durch eins repräsentiert wird. Das geht jetzt durch die erste Dimension hier unten. Das geht hier drüben durch die zweite Dimension. Jetzt haben wir unsere beiden Loops eingerichtet. Wir müssen tatsächlich jeden dieser Werte überprüfen. Wir können das mit einer if-Anweisung tun. Dass wir den aktuellen Wert angeben können wenn es sich um eine Königin handelt. Und dann sage ich einfach , dass die Königin an diesem Ort gefunden wurde. Nur damit das Sinn macht. Wenn das Objekt bei X, das durch diese vier Schleifen repräsentiert wird, und X offensichtlich bei jedem Überqueren um eins erhöht wird , geht das hier in den ersten Slot. Dann ist das zweite Y und das bewegt sich nach unten. Was wir tun, wir überprüfen jeden Wert, wir gehen den ganzen Weg rüber und dann einen runter, einen weiteren quer runter. Das macht der Loop. Und jedes Mal schauen wir nach, ob es sich bei dem Slot um eine Königin handelt. Wenn ja, die Bedingung wahr ist, dann führen wir diese Codezeile genau hier aus , die nur besagt, dass die Königin am Standort gefunden wurde. Und wir geben X und Y aus. Mal sehen, ob das funktioniert Lassen Sie uns die Anwendung ausführen. Queen wurde an Standort 03 und Queen an Standort 73 gefunden. Wenn wir Recht haben, 03, ist das Null. Das ist alles Null hier. 0123. Das ist richtig Ich glaube, der nächste war 701-23-4567 Sie können sehen, dass es erfolgreich beide Königinnen auf diesem Schachbrett gefunden hat beide Wenn du das ändern willst, können wir die Könige finden und dann können wir stattdessen einfach ein K finden, und das findet die Könige auf dem Brett Das war eine ziemlich lustige Herausforderung. Wenn irgendwas davon verwirrend ist, gehen Sie es noch einmal durch. Möglicherweise bekommen Sie es nicht beim ersten Mal, machen Sie sich darüber keine Sorgen. Aber du wirst es langsam verstehen, je mehr du dir dieses Video ansiehst und das Problem verstehst. Aber das ist so etwas wie ein Beispiel aus der realen Welt in dem wir ein Schachbrett simulieren, wenn wir zum Beispiel mit zwei D-Arrays in C Sharp arbeiten 37. 8-4. Listen: Jetzt werde ich eine neue Sammlung in C Sharp vorstellen , die als Liste bezeichnet wird. Nun, intern ist eine Liste ziemlich mächtig, sie baut eigentlich auf einem Standardarray auf, aber sie enthält viel mehr Optionen und viele Möglichkeiten, mit den Informationen innerhalb des Arrays zu arbeiten . Lassen Sie uns zum Beispiel hier über dieses Beispiel sprechen. Wir definieren ein Integer-Array in C Sharp. Wir geben ihm nur einige zufällige Zahlenwerte. Wir verwenden jeweils eine Vierer-Schleife, um jedes Objekt in der Sammlung durchzugehen jedes Objekt in der Sammlung und es auf dem Bildschirm auszugeben Wenn ich die Anwendung jetzt starte können Sie all diese Zahlen genau dort sehen Ganz einfach, ich werde eine neue Liste erstellen. Ich werde diese Funktionalität nachahmen. Sie können zum Beispiel den Unterschied zwischen einem Array und einer Liste sehen Beispiel den Unterschied zwischen einem Array und einer Liste Jetzt ist es ein etwas kompliziertes Thema. Angesichts unseres bisherigen Lernens werde ich nicht alles erklären, aber ich werde einige Dinge behandeln, die mit Listen zu tun haben. Nun, wie erstellen wir eine Liste? Nun, der Datentyp ist Liste. Jetzt gibt es eine neue Notation wir noch nicht wirklich gesprochen haben. Das nennt man Generika. Nun, ich werde nicht zu viel über Generika sprechen weil ich denke, dass es im Moment ein ziemlich kompliziertes Thema Aber was ich tun möchte, ist eine Liste zu definieren , die ganze Zahlen enthält Sie können sehen, dass Visual Studio versucht, mir hier zu helfen Es deutet tatsächlich an, was ich tun möchte. Es ist richtig Lass uns dort einfach die Tabulatortaste auf der Tastatur drücken. Und es ist in dieser Notation für uns geschrieben. Ich werde das einfach als abschließen. Also haben wir die obige Funktionalität nachgeahmt. Nun, diese Zeile hier ist genau dieselbe wie diese Zeile hier Das ist eine Art Sammlung. Dies ist eine Art von Sammlung. Es ist ein Integer-Array. Hier ist es eine Integer-Liste, und sie enthalten alle die gleichen Informationen. Das werde ich dir beweisen. Wenn ich diese Liste hier durchgehe und alle Zahlen auf dem Bildschirm ausgebe, macht es genau dasselbe. Wie definieren und initialisieren wir eine Liste in C Sharp? Nun, wir verwenden das Schlüsselwort list mit einem großen L in diesen eckigen Klammern Genau hier fügen wir den Datentyp, wir speichern möchten, in die Liste ein. In ähnlicher Weise würden wir das tun, wenn wir eine Liste von Zeichenketten haben wollten . Zum Beispiel setzen wir den Datentyp in diese eckigen Klammern, geben ihm einen Namen und verwenden dann ein Gleichheitszeichen. Und dann wollen wir dem System sagen: Okay, jetzt wollen wir die Liste initialisieren Jetzt wollen wir die Liste erstellen und einige Informationen hineinlegen Wir verwenden dieses neue Schlüsselwort und wiederholen den Datentyp erneut. Dann können wir sie in diesen Klammern entweder leer lassen oder wir können ihr eine Kapazität geben, genau wie einem Array Wir können zum Beispiel sogar eine bestehende Sammlung in sie übernehmen Was ich tun könnte, ist das zu tun. Dadurch wird hier eine Liste erstellt, die auf meinem Array basiert. Sie können sehen, dass es schon ziemlich mächtig wird. Auch hier kann ich beweisen, dass das auch funktioniert, indem ich die Anwendung starte und sie die Zahlen durchläuft die Anwendung starte und sie , die wir ihr übergeben haben. Sie können sehen, dass es in dieser Hinsicht ziemlich mächtig ist. Aber die Sache mit Standard-Arrays in C Sharp zum Beispiel, lass uns hier einfach mit unserem Standard-Array arbeiten Wenn ich mir die nativen Methoden ansehe, die mit einem Array zu tun haben, können wir damit nicht wirklich viel anfangen Wir haben einige verschiedene Methoden, die wir verwenden können, wie zum Beispiel die Länge der Arrays oder die Anzahl der Elemente im Array zu ermitteln, aber sonst haben wir nicht wirklich viel mit nativen Methoden zu tun Was ist, wenn wir diese Informationen sortieren wollen? Vielleicht die kleinste Zahl an den Anfang und dann die größte am Ende setzen ? Wie kehren wir die Reihenfolge dieser Zahlen um? Verschiedene Dinge wie diese. Nun, das ist einer der vielen Vorteile der Verwendung von Listen im Geschäft. Was wir tun können. Schauen wir uns einige Beispiele für die Arbeit mit Listen an. Hier definiere ich eine neue Liste. Ich kann eine neue Liste definieren und sie einfach leer lassen. Und später in der Anwendung, wenn wir herausfinden, was wir eigentlich in unsere Liste aufnehmen wollen eigentlich in unsere Liste aufnehmen wollen , können wir dynamisch und spontan Elemente hinzufügen. Also könnte ich diese Nummer gleich hier hinzufügen. Und dann noch einer. Vielleicht können wir die Liste definieren, wenn wir eine Anwendung erstellen wollen , in der wir Zahlen von einem Benutzer sammeln . Und später können wir die Benutzernummern hinzufügen , wenn wir die Software ausführen. Jetzt können wir sehen, dass die Liste jetzt die beiden Zahlen enthält , die wir hier mit der Methode add hinzugefügt haben . Aber wir können nicht nur Dinge hinzufügen, wir können auch Dinge entfernen. Wir können verschiedene Dinge nativ tun. Aber eines der leistungsfähigeren ist, dass wir die Daten tatsächlich sortieren können Wir können sie der Reihe nach sortieren. Wir können die Zahlen sogar umkehren. Zum Beispiel gibt es hier eine Liste mit diesen Zahlen. Und wir werden die Sortiermethode verwenden. Und was das bewirken wird, es nimmt alle ganzen Zahlen und sortiert sie der Das ist das einzige, was Sie dafür tun müssen , wenn wir die Software ausführen Jetzt können Sie sehen, dass alle unsere Zahlen in sequentieller Reihenfolge sind Das ist sehr einfach, nur dieser sehr kurze, einzeilige Code Hier können Sie mit der List-Klasse verschiedene Dinge tun und sie bietet eine leistungsfähigere Art , mit Ihren Daten zu arbeiten. Das heißt nicht, dass ein Raiser unbedingt nutzlos ist. Sie können diese Dinge mit einer Gehaltserhöhung erreichen indem Sie Erweiterungen wie Link und ähnliches verwenden, aber darauf werde ich jetzt nicht eingehen Ich möchte dieses Tutorial nicht zu sehr verkomplizieren, aber ich stelle nur einige der Vorteile vor, die die Verwendung von Listen beim Programmieren in C Sharp Zusammenfassend lässt sich sagen, dass Sie, wenn Sie über eine Sammlung von Daten verfügen , seien es ganze Zahlen, Zeichenketten oder einen anderen Datentyp, und Sie die Kapazität nicht unbedingt kennen, vielleicht während der Anwendung Werte hinzufügen möchten während der Anwendung Werte hinzufügen Vielleicht muss der Benutzer Elemente hinzufügen oder Sie möchten die Daten besser kontrollieren Dann ist List vielleicht etwas für dich. Vielleicht ist es ein Datentyp, den Sie untersuchen möchten. Aber es ist ein mächtiger Datentyp, und ich empfehle Ihnen, Listen mit Ihren Abenteuern im C-Shop zu verwenden . 38. 9-1. O-O, Klassen und Objekte: Klassen und Objekte in C Sharp. Was ist eine Klasse? Was ist ein Objekt? Was bedeutet das alles? Nun, lassen Sie mich das erklären Klassen und Objekte in C Sharp unterstützen das sogenannte Programmierparadigma. Was bedeutet das alles Programmieren ist die Abkürzung für das, was man objektorientierte Programmierung nennt , und es ist ein Paradigma Ein Paradigma ist nur ein ausgefallenes Wort eine Art und Weise, etwas wie eine Methode zu tun Wenn Sie Ihre Bemühungen im Programmieren fortsetzen, Sie dieses Wort vielleicht oft sehen, also dachte ich, ich würde es ansprechen Heute ist ein Paradigma ein Programmierstil. Stellen Sie sich einen Koch in der Küche mit rohem Hühnchen vor. Er könnte das Huhn braten. Er konnte das Huhn kochen, er konnte das Huhn braten Aber jedes davon ist ein Paradigma, eine andere Art, zum Endergebnis zu gelangen Das ist also ein Paradigma. Nun, wenn es um grundlegende Programme wie Erstellen eines Taschenrechners oder etwas ganz Einfachem geht, Paradigmen für Anfänger nicht wirklich wichtig Es ist keine Überraschung, dass Sie wahrscheinlich noch nie eines benutzt haben , wenn Software nur 2030, 40, vielleicht sogar 50 Codezeilen hat 40, vielleicht sogar 50 Codezeilen Die Art und Weise, wie Sie Ihre Software strukturieren, ist nicht wirklich wichtig, da es sich um eine ziemlich kleine Programmierung handelt, der Programmierstil ist sehr wichtig. Wenn Sie große Softwarekomponenten haben, haben Sie vielleicht 2030, 100 Leute, die an einer Software arbeiten. Die Organisation des Codes ist sehr wichtig. Betrachten Sie das zum Beispiel. Wenn Sie viele Codezeilen haben, die so aussehen, wie pflegen Sie das dann überhaupt? Es könnte 50 Seiten lang sein, 1.000 Seiten lang. Wir brauchen eine Struktur, wir brauchen eine Organisation. Und das ist eines der vielen Elemente der 00-Programmierung. Nun, 00-Programmierung, es ist ein sehr umfangreiches, kompliziertes Thema, das viele Vorteile und viele Vorteile hat , aber das ist einer davon. Nun zum Programmieren. Es geht auf die 1950er und 1960er Jahre zurück, aber soweit ich mich erinnere, hat es Anfang 2000 definitiv an Popularität gewonnen . Das war der Zeitpunkt, an dem es richtig losging. Was wir bisher wirklich gemacht haben ist die sogenannte prozedurale Programmierung, bei der das Programm startet und wir jede Zeile der Reihe nach ausführen. Wir haben vielleicht ein oder zwei Methoden. Und weißt du, die Dinge sind sehr einfach. Aber auch hier ist es bei sehr großen Softwareanwendungen ziemlich schwierig, dies aufrechtzuerhalten. Zum Beispiel 00 Programmierung, sehr großes, sehr kompliziertes Thema. Ich kann Sie jetzt mit allen Einzelheiten langweilen , aber ich glaube nicht, dass das eine gute Art ist, 00-Programmierung zu lernen. Ich denke, die beste Art zu lernen ist, sich mit einigen Beispielen aus der realen Welt auseinanderzusetzen und sie dann anhand von Arbeitsbeispielen durchzugehen. Erinnerst du dich an den Film Karate Kid, in dem Daniel Larusso das Haus malt und den Zaun malt und den Boden schleift Und heimlich lernte er all dieses Karate, wusste aber nicht wirklich warum. Und am Ende sagte Herr Magi, oh, okay, jetzt teste Also, um bei der Stange zu bleiben , möchte ich O-Programmieren genau so beibringen, und ich finde, das ist eine fantastische Art, 00-Programmierung zu lernen, indem man und ich finde, das ist eine fantastische Art anhand von Beispielen lernt dann am Ende auf Umwegen zurückkommt Wenn ich also über komplizierte Wörter wie Instanziierung, Polymorphismus, Abstraktion, Kohäsion, Kopplung spreche, all diese komplizierten Dinge , könnte all diese komplizierten Dinge Aber das Problem ist in Wirklichkeit, Und um die Motivation aufrechtzuerhalten und Sie bei der Stange zu halten, werde ich das auf diese Weise tun, und ich denke, das wird eine fantastische Art sein diese Klassen und Objekte in C Sharp zu lernen Was ist eine Klasse? Was ist ein Objekt und wie nützt es mir, und warum sollte ich es überhaupt benutzen? Wenn Sie bisher einige der Tutorials verfolgt haben, die wir bisher erstellt haben, haben wir einige grundlegende Beispiele erstellt, haben wir einige grundlegende Beispiele erstellt wie zum Beispiel zwei Zahlen miteinander multiplizieren. Hier nehmen wir zwei Zahlen von einem Benutzer und multiplizieren sie zum Beispiel miteinander. Und wenn wir eine Zahl von einem Benutzer nehmen, können wir dies als Integer-Datentyp darstellen , was ziemlich einfach ist. Und das ist alles was wir tun müssen. Wir müssen keine weiteren Informationen über diese Zahlen wissen , um sie miteinander zu multiplizieren. In ähnlicher Weise können wir, wenn wir den Namen vom Benutzer übernehmen, ihn in einem einfachen Datentyp speichern , der eine Zeichenfolge ist, und wir speichern einfach den Namen des Benutzers. Also sehr einfach. Aber wie stellen wir einen komplexen Datentyp dar, wie einen Benutzer oder vielleicht ein Konto wie ein soziales Konto oder ein Bankkonto oder sogar ein Fahrrad wie ein Objekt aus der realen Welt, oder ein Sandwich, oder sogar einen ganzen Planeten wie den Planeten Erde oder so? Nun, bis jetzt haben wir mit unserem prozeduralen Programmierstil Cano, vielleicht um einen Benutzer darzustellen , eine Zeichenfolge , die der Vorname des Benutzers sein könnte, und dann eine weitere Zeichenfolge für seinen Nachnamen. Vielleicht eine Ganzzahl für ihr Alter und dann vielleicht eine Zeichenfolge für ihren Benutzernamen. Wenn sie einen Benutzernamen haben, könnten wir vielleicht eine Dezimalzahl oder ein Doppeltes für ihre Größe verwenden. Die Liste geht weiter. Es gibt so viele Dinge, die Sie über einen Benutzer speichern können. Sie können sehen, dass ich bereits fünf Codezeilen für all diese Variablen habe. Diese Kannenseite hier wird sie sehr schnell mit vielen Informationen füllen. Vielleicht könnte ich diese fünf Datentypen hier verwenden. Diese einfachen Datentypen, string, int und double, um ein komplexes Objekt wie einen Benutzer darzustellen. Und wenn ich ein Fahrrad habe, möchte ich vielleicht die Farbe des Fahrrads, die Marke des Fahrrads, vielleicht die Maße, solche Dinge. Und so würde ich ein Fahrradobjekt darstellen. Aber wie füge ich all das in ein eigenes Objekt ein? Anstatt für jeden Benutzer in unserer Anwendung kann ich beispielsweise für jeden Benutzer in unserer Anwendung kann ich beispielsweise einfach Benutzer eingeben und wir könnten unseren eigenen Datentyp haben, z. B. einen Benutzerdatentyp. Das wäre ziemlich cool, nicht wahr? Dies ist einer der Vorteile der Verwendung von Klassen und Objekten in C Sharp. Schauen wir uns an, wie wir in C Sharp tatsächlich unseren eigenen Datentyp erstellen können . Was ich jetzt tun werde, ist eine brandneue Klasse zu erstellen, im Grunde einen brandneuen benutzerdefinierten Datentyp , den wir überall in unserer Software verwenden können. Wenn wir hier auf die rechte Seite gehen, ist das der Name unseres Projekts hier, Programmieren. Und es hat ein kleines C-scharfes Symbol mit einem Quadrat drum herum. Also werde ich mit der rechten Maustaste darauf klicken. Ich gehe zu Hinzufügen und dann gehe ich zum Unterricht. Sobald wir hier sind, können wir sehen, dass Klassen ausgewählt wurden. Hier unten können wir der Klasse einen Namen geben. Jetzt kannst du die Klasse nennen , wie du willst. Es ist jedoch üblich , sie mit einem Großbuchstaben zu beginnen , der ihrem Zweck entspricht. Was ist der Zweck dieses Kurses? Was macht sie? Welche Informationen enthält es? Oder was ist ihre Hauptfunktion? Auf diese Weise wissen Sie bei einer sehr großen Anwendung mit vielleicht 1.000 Klassen mit vielleicht 1.000 Klassen anhand des Namens genau, was damit erreicht wird und was damit angestrebt wird. Ich werde einen benutzerdefinierten Datentyp namens User erstellen . Dadurch werden Informationen über einen potenziellen Benutzer gespeichert , der möglicherweise unsere Software verwendet. Ich nenne es Benutzer und klicke dann genau hier auf die Anzeigenschaltfläche. Was das bewirkt, es schafft eine ganz neue Klasse in unserem Projekt. Das ist unser Projekt hier. Wir waren soweit, wenn Sie sich unsere vorherigen Tutorials mit der Standardklasse Programm angesehen haben , und wir haben mit der Hauptmethode gearbeitet. Sie können hier sehen, dass es eine Klasse namens program gibt und die Hauptmethode darin enthalten ist. Dies ist eine Standardklasse eines Konsolenanwendungstyps. Aber wenn wir hier rüber gehen, haben wir jetzt eine brandneue Klasse namens User. Und jetzt können wir hier einige Informationen in diese Klasse einfügen . Sie können also sehen, dass Visual Studio darauf hindeutet, was ich hier vielleicht einfügen möchte Ja, das mag eine bessere Methode sein, aber ich werde in einem zukünftigen Tutorial über Get and Set sprechen in einem zukünftigen Tutorial über Get and Set Also werde ich das etwas anders machen. Was wir hier in unserer neuen Klasse, die Benutzer heißt, tun wollen , ist, alles über unseren Benutzer zu sagen. Also vielleicht der Vorname des Benutzers, der Nachname des Benutzers, das Alter des Benutzers. Alles, was mit einem Benutzer zu tun hat. Was ich tun werde, ich werde hier einige einfache Variablen definieren . Also, was ich tun werde, nenne ich es zum Beispiel vielleicht Vorname und dann vielleicht einen Nachnamen und dann vielleicht das Alter, so etwas in der Art. Vor jedem von diesen möchte ich nur dieses interne Schlüsselwort setzen. Mach dir jetzt keine Gedanken darüber , was das bedeutet. Wir werden das in einem späteren Tutorial noch einmal behandeln. Aber was ich getan habe, ich habe hier drei einfache Datentypen definiert , zwei Zeichenketten und eine Ganzzahl. Und alle drei gehören zur Benutzerklasse. Dies ist die neue Klasse, die wir gerade erstellt haben . Was bedeutet das alles? Das ist hier unser benutzerdefinierter Datentyp So wie eine Ganzzahl ein Datentyp ist, ist eine Zeichenfolge ein Datentyp. Nun, Benutzer ist unser eigener benutzerdefinierter Datentyp und er enthält all diese Dinge. Schauen wir uns ein Beispiel an, was das bedeutet. Wenn wir hier mit der Hauptmethode zu unserer Hauptklasse zurückkehren , können wir tatsächlich eine sogenannte Instanz unserer neuen Klasse einrichten . Genau wie wenn wir eine Zeichenfolge erstellen, könnten wir so etwas tun. Aber wenn wir einen benutzerdefinierten Datentyp haben, wie zum Beispiel eine neue Klasse, ist das Format etwas anders. Es wäre unser benutzerdefinierter Datentyp , der der Name unserer Klasse ist , also user, weil wir eine Klasse mit dem Namen user erstellt haben . Sie können jetzt sehen, dass dies grün ist und tatsächlich einige Informationen über unsere Klasse enthält. Wenn ich zum Beispiel Bacon eintippe, dann siehst du, dass es schwarz ist, es gibt eine rote Linie. Das liegt daran, dass wir keinen Kurs namens Bacon haben. Jetzt haben wir eine Klasse namens User, sie ist grün. Und das können wir tatsächlich nutzen. Jetzt geben wir ihm einen Namen, genau wie wir es hier tun, zum Beispiel mit einer einfachen Variablen. Ich nenne es einfach USA. R, Abkürzung für User. Dann werde ich gleich vorgehen. Und Visual Studio gibt mir einen Hinweis darauf, was ich tun möchte. Das ist genau das , was ich tun möchte. Ich möchte eine neue Instanz unserer Klasse namens user erstellen. Und ich gebe ihr den Namen USR. Ich kann ihm einen beliebigen Namen geben , es spielt keine Rolle Jetzt habe ich eine brandneue Variable, genau wie eine Variable hier vom Typ Zeichenfolge. Ich habe hier jetzt eine neue Variable namens US-Benutzer. Wenn ich anfange, meine Variable USR zu verwenden und danach einen Pfeil setze, können Sie sehen, dass ich tatsächlich auf diese Variablen zugreifen kann , die ich gerade in unserer Klasse erstellt habe Sie können hier den Nachnamen, den Vornamen und das Alter sehen und das Alter Lassen Sie uns eine Beispiel-Benutzervariable einrichten. Wenn ich Vorname des Benutzers sage, wissen wir, dass es sich um eine Zeichenfolge handelt. Rufen wir ihn an, ich weiß es nicht. Nennen wir ihn Bob. Warum nicht? Lassen Sie uns einen Nachnamen für unseren Benutzer einrichten. Wir nennen ihn Bob Smith. Schließlich möchte Bob Visual Studio, dass ich 30 setze. Warum nicht? Ich bin mir nicht sicher, warum Visual Studio 30 anzeigt, aber los geht's. Nun, was ich hier gemacht habe, ich habe genau hier ein brandneues Benutzerobjekt erstellt . Und dann habe ich ihm einige Informationen gegeben. Diese Felder hier. Dies sind genau dieselben Felder, die wir in unserem brandneuen Benutzer definiert haben , was unserem Datentyp entspricht, und wir haben ihm hier einige Werte gegeben. Was ich jetzt tun kann, ist diese Informationen tatsächlich zu verwenden. Wenn ich die rechte Zeile in der Konsole mache, kann ich einige dieser Informationen tatsächlich auf dem Bildschirm ausgeben . Nehmen wir an, lassen Sie mich den Vornamen, Nachnamen und das Alter des Benutzers ausgeben . Lassen wir das Konsolenfenster geöffnet, damit es sich bei uns nicht schließt. Lassen Sie uns nun die Anwendung ausführen , um zu sehen, was wir hier haben. die Anwendung ausführen, können wir sehen, dass wir tatsächlich alle Werte für unseren benutzerdefinierten Datentyp auf dem Bildschirm ausgeben alle Werte für unseren benutzerdefinierten Datentyp auf dem Bildschirm Wir legen die Werte auf diese Weise fest. Wir geben die Werte unseres benutzerdefinierten Datentyps so auf dem Bildschirm Wenn Sie Klassen in C Sharp erstellen, wie zum Beispiel unsere benutzerdefinierte Benutzerklasse hier, stellen Sie sich vor, dass diese Klasse ein Entwurf, eine Alles in unserer Klasse hier hat mit einem Benutzer zu tun, es hat nicht mit einem Fahrrad oder einem Sandwich oder etwas Zufälligem zu tun oder einem Sandwich oder etwas Zufälligem Alles hier hat mit der Erstellung eines neuen Benutzers zu tun. Wir haben den Namen des Benutzers, das Alter des Benutzers, alles, was mit einem Benutzer zu tun hat. Stellen Sie sich vor, das wäre eine Blaupause dafür, oder wie ich schon sagte, eine Spezifikation Der Prozess hier, was wir machen, ist ein Objekt zu erstellen, genau wie wenn wir zum Beispiel eine einfache Zeichenkettenvariable namens name Wenn wir es mit benutzerdefinierten Klassen und ähnlichen Dingen zu tun haben, werden diese Objekte genannt. Jetzt können Sie sehen, woher der Begriff objektorientierte Programmierung stammt Weil wir Dinge aus der realen Welt wie Benutzer, Autos, Fahrräder als Objekte wie Klassen, USR darstellen Autos, Fahrräder als Objekte wie Klassen, USR Hier ist das Objekt, das ist der Datentyp , der eine Klasse ist Dieser Vorgang wird hier als Instanziierung bezeichnet. Und es heißt Instanziierung, weil Sie eine neue Instanz einer Klasse erstellen Was wir auch tun können, ist eine zweite Instanz derselben Klasse zu erstellen eine zweite Instanz derselben Klasse zu Dies ist die erste Instanz. Dies ist die zweite Instanz. Wir können 50 erstellen. Wir könnten zum Beispiel 100 erstellen. Was wir hier tun können, ist ein anderer Benutzer und vielleicht heißt er Darren Smith und er ist 75 Jahre alt Ebenso können wir seine Informationen im Fenster ausgeben. Wie Sie dort sehen können, beginnen Sie, die wahre Macht der objektorientierten Programmierung zu erkennen . Wir könnten Tausende dieser Benutzerobjekte erstellen und Tausende von Benutzern in unserer Software replizieren , wenn wir möchten Wir sind nicht darauf beschränkt, nur Benutzerobjekte zu haben. Wir könnten Kontoobjekte haben, viele verschiedene Dinge, um unsere Software zusammenzubringen. Was wir mit diesen Objekten hier machen können, wir können sie an Methoden übergeben, wir können sie in Arrays unterteilen, wir können sie in Schleifen durchgehen Die Grenzen sind endlos. Aber das ist nur eine kleine Auswahl objektorientierter Programmierung Und es beginnt mit der Erstellung von Klassen und neuen Objekten. Ich hoffe, das hat Ihnen beim Einstieg in Ihre objektorientierte Reise im C-Shop geholfen Ihre objektorientierte Reise im C-Shop 39. 9-2. Konstrukteure: Ich werde jetzt in C Sharp über Konstruktoren sprechen. Was ist ein Konstruktor? Wie funktionieren sie? Nun, schauen wir es uns hier an, wir haben ein sehr einfaches Beispiel. Wir haben eine benutzerdefinierte Klasse namens user. Wir haben drei Variablen innerhalb der Klasse, nämlich Informationen über den Benutzer und das Alter des Benutzers. Dann richten wir einfach ein neues Objekt ein, das eine Instanz der Klasse ist. Wir geben ihm einige Werte, Vorname, Nachname und Alter, und geben sie auf dem Bildschirm Sehr einfache Software. Ich werde in dieses Beispiel einen Konstruktor einführen. Nun, was ein Konstruktor macht, er hilft uns, unsere Objekte zu konstruieren Hier erstellen wir eine neue Instanz unserer Klasse. Hier ist unser Objekt. Was ein Konstruktor tut, er hilft uns bei der Einrichtung dieses Objekts Lassen Sie uns anhand eines Beispiels lernen. Ich denke, das wäre hier einfacher. Hier richten wir ein neues Benutzerobjekt ein. Ich werde dieses einfach kopieren und einfügen. Und wir werden ein neues Objekt erstellen, ein anderes Objekt. Okay, hier erstelle ich einen neuen Benutzer namens Tony, Tony Smith und er ist 41 Jahre alt. Wenn ich diesen Benutzer eingerichtet habe, können Sie sehen, dass er vier Codezeilen verwendet. Wenn wir 100 davon einrichten wollen, wird es vielleicht nicht sehr elegant aussehen, es wird ziemlich aufgebläht aussehen Dies ist einer der Vorteile der Verwendung von Konstruktoren. Was ich tun kann, wenn ich eine neue Instanz dieser Klasse erstelle, ich kann diese Werte tatsächlich als Parameter übergeben Wenn ich eine neue Instanz erstelle, kann ich sagen wir Tony, ich kann Smith übergeben und dann das Zeitalter genau hier übergeben. Dann kann ich all diese Codezeilen löschen. Und dann wird diese Zeile im Wesentlichen genau dasselbe tun, diese vier Zeilen hier. Das ist ein Vorteil von Konstruktoren, die Minimierung des Codes Es wird nur in einer Zeile dargestellt. Aber wie richten wir das ein? Weil wir gerade eine rote Linie haben. Und wenn ich mit der Maus darüber fahre, heißt es, dass der Benutzer keinen Konstruktor enthält, der drei Argumente akzeptiert Nun, lass uns eins hinzufügen. Ich gehe hier in die Benutzerklasse ein, ich muss einen Konstruktor einrichten Wie mache ich das? Es beginnt mit dem internen Schlüsselwort. Machen Sie sich jetzt keine Gedanken darüber, was intern gerade ist. Ich werde das in einem späteren Tutorial besprechen. Alle Konstruktoren nehmen den Namen der Klasse an. Der Name der Klasse ist user. Ich werde den Namen der Klasse dort eintragen. Danach setze ich Klammern und dann die bekannten geschweiften Klammern Dies ist ein einfacher Konstruktor in seiner Minimalform. Wir können mehr als einen Konstruktor pro Klasse haben , wenn wir wollen Ich möchte diese Werte hier aufnehmen und sie hier in unseren Variablen initialisieren Ich möchte diese Werte hier platzieren. Was ich tun muss, als wir mit Methoden gearbeitet haben, es sehr ähnlich funktioniert. Ich möchte sie im Wesentlichen als Parameter übergeben , die ich zuerst machen werde. Zum Beispiel Vorname, Nachname, Alter. Wenn Sie Ihren Parametern Namen geben, geben Sie ihnen aussagekräftige Namen wie Vorname, Nachname und Alter. Und stellen Sie sicher, dass sie nicht genau mit diesen lokalen Variablen hier identisch sind. Geben Sie ihnen zum Beispiel eine etwas andere Groß-/Kleinschreibung oder einen völlig anderen Namen. Ich werde das in einem späteren Tutorial besprechen , wenn ich über dieses Schlüsselwort spreche. Im Moment kommen unsere Parameter hier in unseren Konstruktor. Jetzt möchte ich diese lokalen Variablen mit diesen Werten hier initialisieren diese lokalen Variablen mit diesen Werten hier Es ist sehr einfach, das zu tun. Ich nehme hier die lokale Variable, ich setze sie als Wert des Parameters. Das ist schon erledigt und wir machen mit den anderen beiden weiter. Visual Studio hat uns dabei sehr geholfen. Lassen Sie uns einfach überprüfen, was jetzt hier vor sich geht. Die rote Linie ist weg. Wenn ich mit der Maus drüber fahre, funktioniert es. Es gibt keine rote Linie Ich übergebe eine Zeichenfolge, eine Zeichenfolge und eine Ganzzahl in den Konstruktor für die Klasse Bei der Erstellung unseres Objekts werden diese Werte als Parameter an den Konstruktor übergeben , was all das ist Dann wird der Wert der zugewiesenen Parameter hier in unseren lokalen Variablen initialisiert Nun, diese lokalen Variablen hier werden diese Werte für immer behalten , solange diese Instanz in unserem System aktiv bleibt Das ist ziemlich cool, nicht wahr? Lassen Sie mich die Software schnell ausführen , damit Sie sehen können, was vor sich geht. Ich werde das kommentieren und komme gleich darauf zurück. Lass uns das einfach da hinstellen, keine Probleme. Wir lassen die Software laufen. Im Moment können Sie sehen, dass Tony Smith, 41 Jahre alt, drauf steht. Es sieht so aus, als ob es richtig funktioniert. Lassen Sie mich diese Kommentare einfach rückgängig machen und über eine weitere Sache sprechen. Sie können etwas Interessantes sehen. Nun, da ist eine rote Linie unter diesem Teil genau hier. Wenn wir versuchen, ein neues Objekt einzurichten, funktioniert es nicht mehr. Warum ist das so? Das liegt daran, dass wir in unserer Klasse hier standardmäßig keinen Konstruktor haben. Es sieht so aus Sobald wir jedoch einen Konstruktor mit Parametern wie diesem definiert haben, können wir keine Instanz unserer Klasse mehr wie diese einrichten Instanz unserer Klasse mehr wie diese Es gibt einen einfachen Weg , das zu umgehen. Wir definieren nur einen sehr einfachen Konstruktor ohne Parameter Jetzt können Sie sehen diese rote Linie weg ist und alles glücklich ist . Wie funktioniert das? Nun, wenn wir diesen Konstruktor hier aufrufen, wenn wir dieses Objekt erstellen, übergeben wir drei Parameter Wenn diese Zeile von der Software ausgeführt wird, springt die Codeausführung Und alles ist hier eingerichtet. Wenn wir eine neue Instanz mit dieser Zeile hier erstellen, gibt es keine Parameter, dieser Konstruktor wird aufgerufen Stattdessen wird das nie ausgeführt, nur dieser Abschnitt hier, hier passiert nichts. Nun, das ist der Unterschied zwischen den beiden. In dieser Klasse gibt es jetzt tatsächlich zwei Konstruktoren. Das benutzt den ersten Konstruktor, das benutzt den zweiten Und wir können 50 Konstruktoren haben, wenn wir wollen, aber so laufen die Dinge intern in unserer Klasse ab Sie können also sehen, dass Konstruktoren es uns ermöglicht haben, Code zum Beispiel in nur einer Zeile zu minimieren haben, Code zum Beispiel in nur einer Zeile Aber was können sie sonst noch tun? Weißt du, was ist ein weiterer Vorteil? Nun, Konstrukteure, wie wir sagen, können Ihnen helfen, Ihr Objekt zu konstruieren , und das tun sie quasi hinter den Kulissen Aus dieser Datei hier müssen wir also nicht wirklich wissen, wie dieser Benutzer eingerichtet ist Wir geben ihr nur ein paar Informationen und wir können sie irgendwie zurückholen, wenn wir sie wollen. Also all diese Art von Logik ist vor uns verborgen, was ziemlich cool ist. Konstruktoren können intern einige Dinge tun , über die wir uns hinter den Kulissen keine Gedanken machen müssen hinter den Kulissen keine Gedanken machen Wenn ich diesen Konstruktor zum Beispiel aufrufe, indem ich die beiden Namen im Zeitalter übergebe, könnte ich zum Beispiel etwas in das Fenster ausgeben Ich könnte dem Benutzer sagen, dass wir einen neuen Benutzer einrichten Zum Beispiel, wenn ich die Software starte. Jetzt können Sie sehen, dass ich eine kleine Nachricht erhalte, die besagt , okay, bitte warte, ich richte gerade einen neuen Benutzer ein. Und dann gibt es die Informationen aus. Konstruktoren machen ein paar zusätzliche Dinge, sie müssen nicht nur Variablen einrichten Sie könnten sich in eine Datenbank einloggen, sie könnten mit einer Website kommunizieren Sie könnten eine Datenbankverbindung öffnen. Sie können hinter den Kulissen viele interne Dinge erledigen. Auf diese Weise können sie helfen, ein Objekt zu konstruieren, und deshalb werden sie Konstruktoren genannt Konstruktoren sind ziemlich mächtige Elemente der objektorientierten Programmierung Und Sie können anhand dieses Beispiels in diesem Tutorial sehen, wie es die Dinge vereinfacht Vielleicht nicht in der Klasse selbst , aber ich arbeite definitiv von hier aus. Sie können sehen, wie einfach alles aussieht, indem Sie nur eine Codezeile verwenden, um ein Objekt einzurichten. Und wir müssen uns keine Gedanken über die internen Dinge machen, die hier vor sich gehen. Das ist ein Beispiel für Konstruktoren im C-Shop, und ich hoffe, Sie finden es sehr nützlich 40. 9-3. Objektmethoden: Lassen Sie uns über Objektmethoden sprechen. Nun, hier habe ich eine Beispielanwendung. Was ich mache, ich erstelle hier eine neue Liste. Dann erstelle ich drei Benutzer. Sie alle haben hier einzigartige Informationen. Zum Beispiel ist Tony Smith 70 Jahre alt, Bob Holmes und Tyrone Jones Dann füge ich jedes dieser Objekte hier zu unserer Liste hinzu Jetzt wird unsere Benutzerliste alle drei Objekte enthalten. Ich verwende jeweils eine Vierer-Schleife, um alle Benutzer zu durchlaufen und diese Informationen wiederum im Konsolenfenster auszugeben. Schauen wir uns das einfach an. Jetzt können Sie sehen, dass dies das Ergebnis ist, das wir erhalten. Es werden nur all diese Objektinformationen auf dem Bildschirm ausgegeben Was ich jetzt tun möchte, ich möchte herausfinden welche dieser Benutzer in den Ruhestand gegangen sind Haben sie das Rentenalter erreicht oder sind sie Rentner? Je nachdem, in welchem Land Sie gerade leben. In Großbritannien bin ich mir bei Amerika nicht sicher, aber das Rentenalter liegt, glaube ich, bei 66 Jahren für Männer Wir verwenden einfach 66 als willkürliche Zahl. Es könnte alles sein. Tony Smith wäre in diesem Fall im Ruhestand, aber Bob Holmes und Tyrone Jones haben noch einen weiten Weg vor sich, bevor sie in Rente gehen Was ich tun möchte, ich möchte eine zusätzliche Information ausgeben, um zu sagen, ob der Benutzer im Ruhestand ist Wie wir das normalerweise machen würden ist vielleicht eine if-Anweisung einzurichten. Und wir sagen, wenn das Alter des Benutzers größer oder gleich ist, sagen wir einfach, 66 ist das Rentenalter, dann würden wir sagen, okay, er ist im Ruhestand. Wir würden sagen, im Ruhestand. Wir werden es auf False initialisieren. Wenn sie größer sind, sage ich einfach, dass Ruhestand wahr ist, aber zum Beispiel so etwas So würden wir normalerweise einen Fall einrichten , in dem wir, wenn sie im Ruhestand sind, eine Bedingung verwenden würden. Und dann geben wir diese Informationen auf dem Bildschirm aus. Es würde ungefähr so aussehen. Sie können sehen, dass wir hier unsere nette Schleife mit unserem Alter, Nachnamen und Alter haben. Aber wenn es um Rentner geht, haben wir all diese Informationen. Es sieht ein bisschen aufgebläht aus. Vielleicht können wir das woanders hinbringen. Vielleicht in unserer Klasse hier. Und dann nimm einfach noch einen Einzeiler hier. Das können wir mit Objektmethoden erreichen. In diesem Fall wollen wir diese Logik hier platzieren, diese Bedingung in unserer Klasse. Darüber müssen wir uns keine Sorgen machen. Wir wissen nicht, wie es berechnet wird, es ist uns egal. Wir wollen hier nur eine kleine Variable, das ist eingestellt und wir können diese Information anzeigen. Schauen wir uns an, wie wir eine Objektmethode erstellen können , indem wir diese Logik innerhalb unserer Klasse verschieben . Kurz bevor ich das mache, werde ich die Anwendung ganz schnell ausführen. Nur damit wir das Ergebnis hier sehen können. Sie können unter jedem Benutzer sehen , dass „ im Ruhestand“ steht, weil älter als 66 Jahre ist, und die anderen sind falsch, nur weil sie nicht 66 Jahre oder älter sind. Dadurch wird diese Logik in eine sogenannte Objektmethode überführt. Und das definieren wir in unserer Klasse genau hier. Hier ist unsere Klasse. Hier haben wir unsere Variablen, hier haben wir zwei Konstruktoren Wir wollen hier einfach eine Methode erstellen, wir werden wieder das interne Schlüsselwort verwenden. Machen Sie sich jetzt keine Gedanken darüber, was das bedeutet Wir werden es einfach hier reinstellen. Wenn wir eine Methode definieren, benötigen wir einen Rückgabetyp. Es wird ein Bullenpfandrecht sein, weil wir zum Beispiel sagen wollen, ob sie im Ruhestand sind oder ob sie im Ruhestand sind oder ob sie im Ruhestand sind, falsch sind. Jetzt ist der Name der Methode, die ich sie nennen werde, nicht mehr gültig. Es benötigt keine Parameter, weil wir über die Klasse selbst hier oben Zugriff auf das Alter haben . Verwenden Sie at age, wir werden hier einfach unsere Methode erstellen und dann wollen wir so etwas zurückgeben. Nun, Visual Studio hat bereits angedeutet, was wir vielleicht tun möchten, aber lassen Sie uns das hier betrachten. Was wir hier sagen wollen, ist, wenn das Alter des Benutzers mehr oder gleich 66 ist , Ruhestand ist wahr, wir könnten das auch sagen, was genau dasselbe ist, weil diese Bedingung als wir könnten das auch sagen, was genau dasselbe ist, wahr oder falsch bewertet wird Und dann wird das Ergebnis in einem Bolen gespeichert . Wirklich sehr einfach Ich möchte die Bedingung hier annehmen, zu unserer Klasse gehen und wir wollen das hier aus dieser Methode zurückgeben. Einfach so, weil wir hier in unserer Klasse sind. Wir haben hier Zugriff auf das Benutzeralter. Wir nehmen einfach das und legen das da hin. Wir haben eine Methode erstellt, sie hat keine Parameter, aber sie hat den Rückgabetyp Booling Wir geben „Wahr“ oder „Falsch“ zurück, wenn das Alter des Benutzers hier mindestens 66 Jahre beträgt Wenn wir wieder hierher kommen, können wir das komplett entfernen. Was wir jetzt tun können, ist unser Objekt hierher zu bringen, das Benutzer ist, weil wir das in einer Vorschleife durchgehen. Und dann können wir auf eine brandneue Methode zugreifen, die wir gerade hier erstellt haben und die heißt is retired. Und Sie können sehen, dass das einen Bolen zurückgibt. Also doppelklicke ich auf die öffnenden und schließenden Klammern weil sie keine Parameter benötigt Und jetzt können Sie sehen, dass der Code viel optimierter aussieht So einen Zustand haben wir hier nicht. Wir haben nur vier nette Codefragmente. Eins, das den Namen, eins das Alter und eins, ob sie im Ruhestand sind. Mir ist gerade aufgefallen, dass ich „Ruhestand“ falsch buchstabiert habe. Niemand ist perfekt Aber Sie können sehen, dass es jetzt viel einfacher aussieht. Aber einer der Vorteile und Vorteile von 00 ist sowieso, dass deine Logik hier irgendwie versteckt ist. Sagen wir zum Beispiel, wenn ein Mitglied Ihres Teams, wenn Sie in einem großen Team arbeiten, an diesem Kurs arbeitet und Sie hier an diesem Kurs arbeiten. Sie müssen sich keine Gedanken darüber machen wie der Ruhestand berechnet wird. Du weißt es nicht, vielleicht ist es dir sogar egal. Du weißt nicht einmal, wie hoch das Rentenalter ist. Das ist okay, denn das Einzige, was wir aufrufen müssen , ist diese Methode hier. Dann kann sich unser Freund in unserem Softwareteam vielleicht mit den Feinheiten auseinandersetzen, wenn mit den Feinheiten auseinandersetzen herauszufinden , wie hoch das Rentenalter Das Prinzip ist also, dass es die Informationen vor Ihnen versteckt, sie abstrahiert Und das ist einer der wichtigsten Punkte der objektorientierten Programmierabstraktion Sie müssen nicht wissen, wie das funktioniert. Wenn Sie beispielsweise eine Kaffeemaschine besitzen, müssen Sie nicht wissen, wie sie funktioniert. Sie wissen, wie es innerhalb der gesamten Elektronik funktioniert . Sie müssen es nur mit Wasser auffüllen und die Taste drücken. Das versuche ich hier also irgendwie zu erklären. Wir müssen nicht wissen, wie das funktioniert, wir müssen nur die Methode aufrufen und sie erhält einen wahren oder falschen Wert. Das ist also einer der Vorteile der objektorientierten Programmierung und so funktionieren Objektmethoden in Sea Shop. 41. 9-4. Zugriffsmodifikatoren (öffentlich, privat usw.): Jetzt werde ich im Shop über Zugriffsmodifikatoren sprechen. Klingt ein bisschen kompliziert, aber ich werde es aufschlüsseln Es ist also sehr einfach und Sie werden alles verstehen, was mit Zugriffsmodifikatoren im Shop zu tun Was ist also ein Zugriffsmodifikator? Bevor wir nun über die Art von Aufgabe gesprochen haben, die eine Klasse haben würde, modelliert sie quasi ein Objekt aus der realen Welt. In diesem Beispiel. Hier habe ich einen Videospielkurs. Wenn ich zum Beispiel ein neues Videospiel erstelle, braucht es den Namen des Videospiels, seinen Herausgeber und eine Bewertung für das Spiel. Sie können also sehen, dass eine Klasse hier ein Videospielobjekt darstellt. Es ist wie ein Objekt aus der realen Welt. Und wenn wir Klassen erstellen, wollen wir, dass alles in der Klasse ist. In diesem Videospielkurs zum Beispiel es nur um das Videospiel. Wir wollen hier also über nichts anderes als das Videospiel sprechen . Vielleicht zum Beispiel, was wir essen , während wir das Videospiel spielen. Oder vielleicht ein paar Informationen über den Benutzer, der das Spiel spielt. Weil diese Benutzerinformationen vielleicht einer Benutzerklasse gehören könnten. Oder vielleicht wäre das Essen, das der Benutzer beim Spielen des Videospiels isst , in einem Essenskurs. Das ist bei der 00-Programmierung sehr wichtig, man hält die Klassen so, wie man sie nennt, sehr kohäsiv Und das bedeutet einfach, dass alles in der Videospielklasse direkt mit einem Videospiel zu tun Das ist das allgemeine Prinzip. Wie dem auch sei, das kommt nicht nur der Organisation des Codes zugute, sondern ermöglicht es auch verschiedenen Personen , an diesem Projekt zu arbeiten. Zum Beispiel vielleicht 100 Leute. Sie können also ein oder zwei Personen delegieren , um beispielsweise an diesem Kurs zu arbeiten Eine andere Person könnte sich hier zwar auf diesen Hauptkurs konzentrieren , aber er hat mehrere Vorteile Aber wie hängt das mit Zugriffsmodifikatoren und ähnlichen Dingen Nun, betrachte dieses Beispiel hier. Was ich mache, ich konstruiere hier vier Videospielobjekte. Ich gebe einige Beispieldaten ein. Was passiert hier hinter den Kulissen, Was passiert hier hinter den Kulissen wenn ich diese vier Objekte konstruiere Ich richte hier nur einige Variablen ein. Der Name, der Herausgeber und die Bewertung. Sie können sehen, dass die Parameter in den Konstruktor aufgenommen werden, und ich setze nur die Werte Im Geheimen in dieser Klasse generiere ich jedoch generiere ich eine neue eindeutige ID für jedes Objekt, das wir Was hier passiert, ist, dass ich hier eine Methode habe. Es geht nur darum, diese Variable hier auf eine eindeutige ID einzustellen. Sie müssen sich keine Gedanken darüber machen, was das bewirkt, aber was es tut, es generiert eine eindeutige ID, die einzigartig ist und es sollte niemals ein Duplikat geben. Dies ist eine eingebaute Funktion Sie dafür verwenden können Und es geht nur darum, diese Variable hier auf eine eindeutige ID zu setzen. Wenn wir hier also ein Spiel mit diesem Konstruktor erstellen, es immer eine eindeutige ID Aus diesem Teil des Programms hier geht hervor, dass wir keine Ahnung haben, dass das passiert Wir geben nur drei Werte weiter. Wir wussten nicht einmal, dass es eine eindeutige ID hat. Wir haben keine Ahnung, was hinter den Kulissen vor sich geht. Und das ist das Schöne an objektorientierter Programmierung. Wir müssen es nicht wissen und es muss uns auch nicht darum kümmern. Zum Beispiel habe ich hier gerade dieses Objekt namens Game One erstellt . Wenn ich hier reingehe, kann ich den Herausgeber erneut bearbeiten. Ich kann es auf einen anderen Wert ändern. Jetzt habe ich es gebaut. Nehmen wir zum Beispiel an, World of Warcraft Blizzard wurde von Riot Games übernommen Dann möchte ich zum Beispiel den Herausgeber später in der Software auf Riot Games umstellen Das kann ich problemlos machen. Was ist jedoch, wenn jemand diesen ID-Wert hier versehentlich ändern kann ? Ich gehe hier raus, Spiel eins, und du kannst dieses ID-Feld hier sehen. Ich könnte das ändern , was ich will. Die Sache ist, ich möchte nicht, dass jemand dieses ID-Feld ändert. Es ist bereits einzigartig. Ich möchte nicht, dass ein anderes Teammitglied diesen Wert ändert. Dadurch könnten die Daten beschädigt werden , da die ID eindeutig ist. Und jeder könnte diesen ID-Wert einfach in beispielsweise Ham Sandwich ändern . Wissen Sie, das könnte viele negative Auswirkungen haben. Erstens könnte es die Software kaputt machen. Zweitens könnte es, Sie wissen schon, zu Informationsverlust führen. Wissen Sie, es könnte viele negative Auswirkungen auf die Software haben. Also, was ich tun möchte, ich möchte diese ID für die Klasse geheim halten . Ich möchte nur, dass die Klasse selbst über diese ID Bescheid weiß und die ID intern für diese Klasse verwaltet. Ich möchte nicht, dass jemand anderes in der Software irgendwelche anderen Klassen oder Teile der Software verändert, diese ID berührt. Vielleicht können sie es sich einfach ansehen, aber ich möchte nicht, dass sie es zum Beispiel bearbeiten. Hier kommen Zugriffsmodifikatoren ins Spiel. Zugriffsmodifikatoren erzwingen jetzt eine sogenannte Kapselung. Sie stellen sicher, dass sensible Daten, wie in diesem Fall die ID, vor Benutzern oder Personen oder sogar vor anderen Softwareteilen verborgen sind, oder sogar vor anderen Softwareteilen die niemals Zugriff darauf haben sollten Das ist ein Beispiel für Kapselung und warum Kapselung bei der Generierung objektorientierter Programme wichtig ist Schauen wir uns an, wie wir den Zugriff auf bestimmte Variablen oder sogar Methoden mithilfe von Zugriffsmodifikatoren einschränken können bestimmte Variablen oder sogar Methoden Lass uns in unsere Klasse gehen. Lassen Sie uns über verschiedene Zugriffsmodifikatoren sprechen wir in C Sharp haben können Nun, der erste ist das, was als öffentlich bezeichnet wird. Sie können es hier öffentlich sehen. Das bedeutet einfach alles, was als öffentlich definiert ist, Sie könnten zum Beispiel eine Variable haben, oder Sie können sogar eine Methode haben. Zum Beispiel diese hier unten, wenn ich sie öffentlich mache. Und das heißt, wenn wir ein Objekt dieser Klasse erstellen, können wir von außerhalb der Klasse darauf zugreifen. Wir können von überall in unserem Projekt darauf zugreifen. Überall in unserer Lösung. Ich habe Spiel eins eingegeben, dann ein kleines T dort, und jetzt können wir auf ID zugreifen Wir können hier auf die Methode „ Neue ID generieren“ zugreifen. liegt daran, dass diese öffentlich sind und wir von überall auf sie zugreifen können. Jetzt ist der andere Teil, der als intern bezeichnet wird. Wir können hier Variablen haben, wir können interne Konstruktoren haben, wir können interne Methoden haben Der Unterschied zwischen öffentlich und intern besteht darin, dass intern nur innerhalb der aktuellen Assembly oder des aktuellen Projekts darauf zugegriffen der aktuellen Assembly oder des aktuellen Projekts Was bedeutet das? Nun, komm her. Bisher haben wir an einem Projekt gearbeitet. Was wir jetzt tun können, wir können ein anderes Projekt in unserer Lösung haben . Wir könnten zum Beispiel 50 Projekte haben. Was das in unserem Projekt bedeutet. Hier, unserem Standardprojekt, nur die Klassen innerhalb können nur die Klassen innerhalb des Projekts auf interne Dinge zugreifen. Wenn wir in einem anderen Projekt sind, repräsentiert dieses Projekt vielleicht die Datenbank, wie die Datenschicht oder vielleicht das Frontend wo sich all die vielleicht grafischen Dinge befinden. Dann können sie nicht auf interne Dinge zugreifen , weil es nur intern im aktuellen Projekt ist. Wir werden später mehr über mehrere Projekte sprechen, aber das ist im Grunde das interne Schlüsselwort. Ein weiterer Zugriffsmodifikator wird als geschützt bezeichnet. Wir werden später über geschützt sprechen, also machen Sie sich darüber vorerst keine Gedanken Das Letzte, über das ich sprechen möchte, ist privat. Nun, privat ist sehr wichtig für das Beispiel, das ich gerade gegeben habe es um den Zugriff auf die ID von außerhalb dieser Klasse geht. Welche Privatsphäre wird dadurch erzwungen? Lokale Variablen wie diese oder sogar Methoden wie diese sind nur innerhalb der aktuellen Klasse zugänglich Was ich getan habe, ich habe diese ID in privat geändert und ich habe diese Methode auf auch privat geändert. Wenn ich hier zu meinem Hauptprogramm zurückkehre und einen Punkt hinter dieses Objekt setze, können Sie sehen, dass die ID-Eigenschaft, die ID-Variable, in dieser Liste fehlt. Sie werden auch feststellen, dass die Methode zum Generieren einer neuen ID ebenfalls in dieser Liste fehlt. Sie können sehen, was hier passiert. Es erzwingt die Kapselung. Es versteckt sensible Informationen , weil wir nur wollen, dass die Videospielklasse neue IDs generieren kann und Sie die ID für das Videospiel kontrollieren Niemand sonst in dieser ganzen Software muss etwas über IDs wissen. Es ist einzigartig für Videospiele und sollte auch für Videospiele einzigartig bleiben. Daher sollten diese Felder privat sein, da nur das Videospiel davon wissen muss , es handelt sich um private Informationen. Stellen Sie sich das zum Beispiel so vor. Der Name des Herausgebers ist jedoch öffentlich. Lassen Sie uns das Rating intern machen. Solange ich an demselben Projekt arbeite, sollte ich auf Namen, Herausgeber und Bewertung zugreifen können. Was ich hier tun kann, Bewertung benennen und Herausgeber angeben. Im Moment ist die ID privat. Wenn ich zum Beispiel versuche, das trotzdem zu verwenden, geben Sie dort einige Informationen in die ID ein. Sie können sehen, dass ich hier einen Fehler habe. Und wenn ich mit der Maus darüber fahre, wird angezeigt, dass auf die Videospiel-ID aufgrund der Schutzstufe nicht zugegriffen Das liegt daran, dass es privat ist. Wir können nicht wirklich auf diese Informationen zugreifen , wenn wir versuchen die Software auszuführen und zu kompilieren, sie werden nicht einmal in Buchstaben umgewandelt. Sie können also sehen, wie streng es durchgesetzt wird. Sobald ich diese ID auf öffentlich oder intern ändere, wird die rote Linie verschwinden. Der Schutz ist verschwunden. Wir können das Programm wie gewohnt ausführen. Das ist also die Macht der Zugriffsmodifikatoren in C Sharp. Es erzwingt die sogenannte Kapselung und schützt unsere sensiblen Daten entweder vor anderen Softwareteilen, anderen Segmenten der vorhandenen Software und sogar vor Benutzern, die an verschiedenen Teilen der Software arbeiten verschiedenen Teilen der Es gewährleistet die Datenintegrität und verhindert viele nachteilige Probleme , die dadurch auftreten können Dies sind Zugriffsmodifikatoren in C Sharp und warum sie bei der Erstellung von Klassen und Objekten sehr nützlich Abschließend möchte ich darüber sprechen, was Zugriffsmodifikatoren haben kann Hier haben wir eine Methode mit einem Zugriffsmodifikator. Wir haben hier ein paar Konstruktoren, die Zugriffsmodifikatoren und auch einige lokale Variablen haben Zugriffsmodifikatoren und auch einige lokale Variablen Sie haben hier auch Zugriffsmodifikatoren. Sie werden jedoch feststellen, dass die Klasse, die all diese Elemente enthält, auch einen Zugriffsmodifikator hat Jetzt ist öffentlich der schwächste Zugriffsmodifikator. Wenn etwas veröffentlicht wird, kann jeder überall in der gesamten Lösung auf dieses Objekt zugreifen Die Klasse selbst ist jedoch als intern gekennzeichnet. Und das bedeutet, dass nur Klassen innerhalb des vorhandenen Projekts oder der Assembly auf diese Klasse zugreifen können. Standardmäßig überschreibt dieser stärkere Zugriffsmodifikator alle schwächeren internen Werte Wir werden hier all diese Modifikatoren für den öffentlichen Zugriff überschreiben. Und das liegt daran, dass die umgebende Klasse als intern markiert ist Standardmäßig erfolgt der Zugriff für diese alle intern. Wenn sie öffentlich sind, wird es ungefähr so aussehen. Selbst wenn sie als öffentlich markiert sind, wird auf diese Weise auf sie zugegriffen. Wenn ich die Klasse jedoch als öffentlich markiere, ist das kein Problem, da dies der schwächste Zugriffsmodifikator ist der schwächste Zugriffsmodifikator Diese werden alle öffentlich sein, falls du jemals mit Datei- und Ordnerberechtigungen für Betriebssysteme gearbeitet hast und verschiedene Einstellungen die Unterordner überschreiben können Das funktioniert ganz ähnlich Zur Verdeutlichung: Wenn ich diese Klasse als privat markieren könnte, dann ist standardmäßig alles, was sich darin befindet privat, unabhängig vom Zugriffsmodifikator Das ist der Punkt, den ich versuche zu vermitteln. Jetzt ist das Schreiben von Zugriffsmodifikatoren in C Sharp optional. Wenn ich den Zugriffsmodifikator aus der Klasse entferne, sind standardmäßig alle Klassen intern Ich könnte das schreiben und das wäre genau das Gleiche wie das Es ist optional, wird aber standardmäßig als intern vorausgesetzt. Alles innerhalb der Klasse, Methoden, Konstruktoren, Eigenschaften oder Variablen ist jedoch standardmäßig alle privat, sofern sie nicht explizit als öffentlich oder intern gekennzeichnet sind . Dann wird davon ausgegangen, dass sie privat sind Das zu schreiben wäre genau dasselbe wie das zu schreiben. In diesem Fall ist privat optional. Wir könnten den Modifikator für den privaten Zugriff aus der Methode und der Variablen hier oben entfernen aus der Methode und der Variablen hier oben Und es wird genau den gleichen Effekt haben denn standardmäßig wird alles innerhalb der Klasse als privat angesehen, alles innerhalb der Klasse wenn es keinen Zugriffsmodifikator gibt 42. 9-5. Eigenschaften: Ich werde über Immobilien im Geschäft sprechen. Jetzt werden wir uns auch mit den Schlüsselwörtern get und set befassen, auch bekannt als Getter und Setter Also, was bedeutet das alles? Nun, lassen Sie uns einen Blick darauf werfen. Wenn Sie sich bisher an die anderen Tutorials zur objektorientierten Programmierung gehalten haben, dann wird das absolut Sinn machen und darauf aufbauen. Falls nicht, dann empfehle ich Ihnen dringend, sich diese anzusehen , damit Sie gleich verstehen was ich Ihnen zeigen werde. Was ist eine Ladenimmobilie? Warum sollten wir sie verwenden? Shop-Eigenschaften erzwingen also eines der Kernprinzipien der 00-Programmierung, nämlich die Kapselung Und damit wird nur sichergestellt, dass vertrauliche Informationen von nirgendwo anders zugänglich sind Beispiel, als wir hier über diese private Variable gesprochen haben, sie ist nur innerhalb der Klasse zugänglich, und dann hat zum Beispiel niemand, der auf sie zugreift , die Kontrolle darüber. Das wird das also noch einen Schritt weiter vorantreiben . Deshalb werde ich hier ein Szenario vorstellen und Ihnen einen der Vorteile der Verwendung von Sharp-Eigenschaften, Getter und Setter zeigen Verwendung von Sharp-Eigenschaften , Getter und Setter In diesem Beispiel haben wir hier eine Videospielklasse definiert. Sie hat hier verschiedene Variablen, die wir verwenden können und einen Konstruktor mit drei Parametern Hier richten wir vier Videospielobjekte ein. Spiel 123.4 Im Konstruktor erstellen wir einen Namen für das Videospiel, den Herausgeber des Spiels und eine Bewertung für das Spiel. Sagen wir, wenn unser Programm gestartet wird, werden all diese Daten in das System geladen Irgendwann später in der Software möchte der Benutzer Änderungen vornehmen Zum Beispiel der Name dieses Spiels hier. Sie haben auf die Schaltfläche Bearbeiten geklickt, vielleicht in dem Typen, und wollen den Namen ändern Aus welchem Grund auch immer, vielleicht hat das Videospiel jetzt einen anderen Namen Wir werden den Benutzer hier nach einem neuen Namen für dieses Spiel fragen , Game One. Und sie werden etwas in das System eingeben. Nehmen wir zum Beispiel an, wir fragen sie nach einem neuen Namen, können wir mit dem Variablennamen hier festlegen. Vielleicht haben sie versehentlich G auf der Tastatur gedrückt und dann Enter gedrückt. Was wir hier tun, wir geben nur ihre Eingabe in diese Variable weiter. Überhaupt kein Problem. Wir machen mit unserem Tag weiter. Aber vielleicht ist das keine gute Idee. Vielleicht möchten wir diese Eingabe zuerst validieren. Vielleicht möchten wir sicherstellen, dass der Spielname mindestens zwei Zeichen hat oder keine numerischen Zeichen oder ähnliches enthält . Vielleicht müssen wir das überprüfen. Hier können C-scharfe Eigenschaften ins Spiel kommen. In diesem speziellen Szenario gibt es viele Gründe für die Verwendung von C-Sharp-Eigenschaften, aber das ist nur ein Beispiel, das wir durchgehen werden. Was ich in diesem Fall tun könnte , ist , dass ich, anstatt die Namensvariable direkt zu setzen, hier eine Methode namens update name erstellen kann. Und das kann unseren neuen Namen vom Benutzer übernehmen. Was es kann, ist, dass es verschiedene Validierungsprüfungen durchführen kann. Es kann sagen, okay, ist der neue Name weniger oder gleich einem Zeichen? Wenn ja, können wir den Namen nicht aktualisieren und wir können den Namen auf andere Weise überprüfen. Und dann können wir den Namen endlich aktualisieren. Ich kann hier zum Beispiel sagen, Spiel eins, um den Namen zu aktualisieren. Anstatt eine Variable zu setzen, kann ich jetzt eine Methode verwenden. Um dies zu erreichen, gebe ich unseren potenziellen neuen Namen ein , den uns der Benutzer gibt. Dann gibt diese Methode entweder true zurück , wenn sie kann, oder false, wenn sie nicht kann. Und dann aktualisiere die interne Variable in einer Namensvariable hier intern innerhalb der Klasse. Und das ist in diesem Fall durchaus akzeptabel , anstatt eine Methode zu verwenden, denn was passieren könnte, ist, dass wir vielleicht eine Methode benötigen , um dann den Herausgeber zu aktualisieren, oder wir brauchen dann eine andere Methode, um die Bewertung zu aktualisieren. Aber jetzt verwenden wir Methoden , um zum Beispiel den Namen zu aktualisieren. Nun, wir können immer noch auf den Namen selbst zugreifen, also müssen wir den Zugriff auf den Namen einschränken, da wir nur das Namensfeld mit unserer neuen Methode, dem Namen aktualisieren, aktualisieren möchten . Hier kommen also im Wesentlichen die Eigenschaften von C-Sharp ins Spiel. Und das Prinzip, lokale Variablen nur für eine Klasse privat zu machen , Sie können in unserer Klasse hier sehen dass wir all diese Variablen haben, genau hier haben wir drei öffentliche und eine private. Wir sind ein Beispiel durchgegangen und ich werde dir jetzt sagen, dass es üblich ist , all deine Variablen innerhalb von Klassen privat zu machen . Das bedeutet, dass niemand außerhalb der Klasse diese Variablen in irgendeiner Weise ändern kann . Wenn ich auf das Spiel zugreife, ein Objekt. Jetzt kann ich nicht direkt auf den Namen zugreifen. Ich kann nicht auf die Publisher-Variable zugreifen, nichts. Ich kann nur mit unserer Aktualisierungsmethode auf den Namen zugreifen oder ihn aktualisieren. Und genau das wollen wir denn wenn der Benutzer hier eine Eingabe eingibt, wollen wir, dass sie validiert wird. Wir wollen sicherstellen, dass der Name mindestens so viele Buchstaben oder, du weißt schon, verschiedene andere Dinge hat mindestens so viele Buchstaben oder, . Und dann wollen wir es endlich aktualisieren. Diese Methode hier ist also eine akzeptable Lösung , wie das geht. Und es erzwingt, dass alle unsere Variablen hier privat sind , weil sie sensibel sind Wir wollen nicht, dass andere Leute, wissen Sie, auf diese zugreifen und irgendwelche alten Werte eingeben, und erzwingt die Kapselung ebenso wie Aber was wäre, wenn ich dir sagen würde, dass es einen einfacheren Weg gibt , diese Methode anzuwenden ? Wir müssen nicht jedes Mal, wenn wir eine Variable aktualisieren, eine solche Methode schreiben . Vielleicht gibt es einen anderen Weg. Hier kommen die Eigenschaften von C-Sharp ins Spiel. Also werde ich eine neue C Sharp-Eigenschaft erstellen. Wenn wir jetzt eine Eigenschaft erstellen, geben wir ihr einen Zugriffsmodifikator Ich nenne es öffentlich, weil ich möchte, dass jeder auf unser Namensfeld zugreifen Dann ist der Name eine Zeichenfolge. Wie Sie hier sehen können, ist Name eine Zeichenfolge, dann muss ich ihr einen Namen geben. Wenn Sie nun beispielsweise Eigenschaften und Variablen erstellen , werden diese auch als Felder bezeichnet. Die Felder selbst werden normalerweise und in der Regel alle in Kleinbuchstaben geschrieben. Sie können hier sehen, dass all dies Groß- und Kleinschreibung ist. Die Eigenschaften selbst haben nur einen Großbuchstaben als Anfangsbuchstaben. Wenn die Variablen hier zwei Wörter haben, dann würde es ungefähr so aussehen. Zum Beispiel Groß-/Kleinschreibung ohne Leerzeichen. Das ist gängige Praxis. Die lokalen Felder hier, die lokalen Variablen in Kleinbuchstaben und die Eigenschaften werden am Anfang immer groß geschrieben Das ist einfach eine gute Praxis. Sobald wir das gemacht haben, werde ich Ihnen jetzt eine Eigenschaft mit dem Scharfen C in ihrer Grundform zeigen . Jedes Mal, wenn wir den Namen des privaten Feldes aktualisieren möchten, gehen wir diese Eigenschaft hier durch, genau wie damals, als ich über das Beispiel gesprochen habe. Jedes Mal, wenn wir das Namensfeld aktualisieren möchten, verwenden wir diese Methode. Nun, anstatt diese Methode hier zu verwenden, werden wir stattdessen diese C-Sharp-Eigenschaft verwenden. Immer wenn wir hier auf diese lokale Variable zugreifen wollen, werden wir stattdessen immer unsere Eigenschaft verwenden. Betrachten Sie dies hier als Accessor für unsere lokale Variable. Damit die Variable tatsächlich ihren Wert erhält, wird sie sie mit dem Schlüsselwort return zurückgeben Jedes Mal, wenn wir einen Wert setzen wollen, die lokale Variable diesem speziellen Schlüsselwort, entspricht die lokale Variable diesem speziellen Schlüsselwort, das hier als Wert bezeichnet wird. Das ist der Wert, der hier übergeben wird. Schauen wir uns jetzt ein Beispiel dafür an. Wenn wir hier auf unsere Hauptklasse eingehen, anstatt diese Methode hier in unserem Beispiel zu verwenden, möchte ich nur den Namen des ersten Spiels sagen. Das ist unser Ladeneigentum genau hier. Dann können wir dem tatsächlich einen Wert wie zum Beispiel geben. Nun, was hier passiert, wir verwenden den Eigenschaftsnamen, aber intern innerhalb dieser Klasse geht es tatsächlich hier rein und legt den Wert fest. Dieser Abschnitt genau hier in dieser Get-Anweisung. Hier wollen wir diese Validierung durchführen. Lassen Sie uns das alles hier kopieren und dann diese geschweiften Klammern in eine neue Zeile setzen Lassen Sie uns das vorerst löschen. Was wir hier tun ist, dass jedes Mal, wenn wir diese Shot-Eigenschaft setzen, diese Set-Anweisung aufgerufen wird. Sie können hier sehen, wenn wir ein Gleichheitszeichen mit einem neuen Wert für diese Shop-Eigenschaft verwenden , intern diesen Set-Block, all das wird am Ende ausgeführt, wir wollen nur unsere lokale Variable hier, name, auf den Wert setzen , der übergeben wird Dieser magische Schlüsselwort-Wert, über den ich gerade gesprochen habe , wird genau diesem Wert hier entsprechen, was auch immer zugewiesen wird Jedes Mal, wenn diese Eigenschaft hier gesetzt ist, was wir tun, setzen wir sie auf, dann führen wir die ganze Überprüfung hier durch. Wir müssen das magische Schlüsselwort Value verwenden, das ist der Wert, den wir tatsächlich überprüfen. Dies würde genau das Gleiche bewirken wie diese Methode hier. Value ersetzt in dieser Instanz nur den Namen Lassen Sie uns das einfach überprüfen und noch einmal durchgehen. Wir geben dem Namen der Shop-Immobilie genau hier einen Wert. Jetzt wird der Wert gleich sein, es könnte was auch immer sein. Es ist nicht wirklich wichtig. Dann kommt der Ausführungsablauf hier rein, und diese Set-Methode wird aufgerufen, weil wir hier einen Wert setzen, dieses magische Schlüsselwort. Der Wert wird gleich sein , weil das der Wert ist, der übergeben wird. Jetzt überprüfen wir , ob die Länge des Namens des Benutzers kleiner oder gleich eins ist. Wenn ja, nun, wir können es nicht aktualisieren, dann Pech gehabt, wir führen jede andere Validierung durch, was auch immer es sein mag. Wenn wir es endlich aktualisieren können, werden wir unseren privaten Variablennamen, der das ist, auf den Wert setzen , der übergeben wird. Das ist der Zauber, wenn man hier eine Shop-Property und das festgelegte Schlüsselwort verwendet hier eine Shop-Property und das festgelegte Schlüsselwort Wir brauchen keine ganz neue Methode. Um dies zu erreichen, können wir eingebaute Funktionen verwenden Die wichtigste Erkenntnis daraus ist, dass Ladenimmobilien den Zugriff auf vertrauliche Informationen kontrollieren Und diese Artikel sind alle unsere lokalen Bereiche, hier gelten sie alle als sensible Informationen Wir möchten nicht, dass Benutzer hier einfach irgendwelche alten Werte eingeben. Wir wollen vielleicht eine Überprüfung, um sicherzustellen , dass die übergebenen Werte korrekt sind. Sie wissen, dass sie gültig sind oder aus irgendeinem anderen Grund. Und wenn sie es dann endlich sind, können wir in diesem Fall unsere sensiblen und wertvollen privaten Variablen aktualisieren unsere sensiblen und wertvollen . Das ist also der Vorteil der Verwendung von C-Sharp-Eigenschaften. Wir haben ziemlich ausführlich über das Schlüsselwort set gesprochen. Lassen Sie uns das Schlüsselwort get ganz schnell behandeln. Das Schlüsselwort get erhält nur den Wert unserer privaten Variablen. Auch hier können wir unterwegs verschiedene Dinge tun , bevor wir es letztendlich zurückgeben. Wir können hier alles tun, was wir wollen, genau wie bei dem eingestellten Schlüsselwort hier. Wir können alles tun, was wir wollen. Aber letztendlich werden wir es endlich hier rausbringen. Was wir hier tun können, lassen Sie uns den Namen des Spiels hier im Konsolenfenster ausgeben . Wenn diese Zeile hier ausgeführt wird, geben wir im Spiel nur einen Namen im Fenster aus. Du kannst es also genau hier sehen. Also, was passiert, ist intern, wenn wir diesen Wert tatsächlich bekommen, also wollen wir den Namen des Spiels herausfinden. Intern wird dieser Get-Block aufgerufen. Wir können hier alles machen, was wir wollen, alle Prüfungen, jede Validierung, die wir in einer Datenbank oder einer Datei protokollieren könnten. Und dann können wir endlich unsere sensiblen Informationen hier zurückgeben , das private Feld hier raus und dann raus zum Fenster. Sie können das Schlüsselwort get sehen, in diesem Fall das Abrufen unserer lokalen Variablen hier steuert . In ähnlicher Weise steuert das Schlüsselwort set die Initialisierung eines Werts für unser wertvolles sensibles lokales Feld genau hier. Und auch hier ist es immer eine gute Praxis, für jedes Ihrer privaten Felder eine C-scharfe Eigenschaft zu haben eine gute Praxis, für jedes Ihrer privaten Felder eine C-scharfe Eigenschaft . Und standardmäßig sollten Sie Ihre lokalen Felder immer privat machen, es sei denn, es gibt mildernde Umstände oder besondere Gründe Eines der anderen Dinge, die wir mit C-Sharp-Eigenschaften tun können , ist , sie schreibgeschützt zu machen. Damit meine ich, dass der Benutzer auf die privaten Variablen zugreifen kann, sie aber nicht initialisieren kann, er kann ihnen keinen Wert geben Nehmen wir zum Beispiel das Publisher-Feld an, wir möchten, dass es schreibgeschützt ist. Was meine ich damit? Sagen wir zum Beispiel, wenn ich den Herausgeber für eines dieser Spielobjekte ermitteln möchte , würde ich Game One Publisher verwenden. Und das wäre so, als ob ich nur lesen kann, wenn ich auf die Informationen zugreifen könnte. Aber wenn ich tatsächlich versuche, die Daten einzustellen, zum Beispiel den Namen festzulegen, kann ich das nicht tun. Es lässt mich nicht, wie mache ich das? Vielleicht ist es eine nützliche Sache. Was wir hier tun können, ist eine neue Immobilie für unseren Verlag zu erstellen . Auch hier haben wir unser vertrautes Format, wir schreiben Großbuchstaben, nur um es sich zu merken. Dann hilft uns Visual Studio, indem es uns Hinweise gibt, was wir vielleicht tun möchten Das ist großartig, ich werde sie benutzen. So macht man eine Eigenschaft schreibgeschützt. Das tun wir, wir definieren einfach überhaupt kein festgelegtes Schlüsselwort. Gehen Sie nur hier rein. Du kannst kein Set alleine haben , du brauchst immer einen Get. Aber du kannst auch einfach einen Get haben , der es nur zum Lesen macht. Schauen wir uns das Beispiel an. Wenn wir nun Publisher auf dem Bildschirm anzeigen möchten , können wir das einfach tun. Wir können den Herausgeber auf dem Bildschirm anzeigen. Es ist überhaupt kein Problem, es wird funktionieren. Wenn ich versuche, hier tatsächlich einen Wert einzugeben, möchte ich diesen Herausgeber auf etwas wirklich aktualisieren. Sie können sehen, dass hier ein Fehler vorliegt, es gibt eine rote Linie. Wenn ich mit der Maus darüber fahre, können Sie hier sehen, dass Eigenschaft oder ein Indexer nicht zugewiesen werden kann, sie sind schreibgeschützt Das liegt nur daran, dass wir hier kein festes Schlüsselwort festgelegt haben Schlüsselwort festgelegt Es gibt keinen Setter, wir können hier keinen Wert festlegen. Dies ist sehr nützlich, wenn Sie hier sensible Felder haben hier sensible Felder , für die Sie nur Lesezugriff wünschen Vielleicht möchten wir hier unser ID-Feld lesen, aber wir möchten nicht, dass der Benutzer es zum Beispiel festlegt. Dann hätten wir so etwas , bei dem wir hier nur Lesezugriff auf unsere lokalen Variablen gewähren . Eine andere Sache, die wir sogar tun können, ist Zugriffsmodifikatoren zu unseren hinzuzufügen und Schlüsselwörter festzulegen Hier haben wir unseren Namen hier, wir wollen, dass jeder den Namen bekommt Aber vielleicht wollen wir die Einstellung dafür privat machen. Nur Dinge in unserer Klasse hier können das tatsächlich tun. Was wir hier tun können, wir können den Setter privat machen. Und das heißt, wenn wir versuchen, diesen Namenswert hier von irgendwo außerhalb dieser Klasse zu setzen , wird er nicht in Buchstaben umgewandelt Wenn ich hier also zur Hauptdatei gehe, versuche ich, den Namen als Wert zu initialisieren . Ich bewege den Mauszeiger darüber Sie können sehen, dass es in diesem Zusammenhang nicht verwendet werden kann , da auf das Setzubehör nicht zugegriffen Wir können es eigentlich nicht von irgendwo außerhalb dieser Klasse aus einstellen irgendwo außerhalb dieser Klasse Sobald ich das entferne, können Sie sehen, dass der Fehler verschwindet und wir können den Namen erneut festlegen. Sharp-Eigenschaften sind eigentlich ziemlich mächtig, wir haben sie gerade erst angesprochen, aber ich denke, das wird ausreichen, um Ihnen Einstieg in Ihre Bemühungen, sie zu nutzen Was Sie daraus mitnehmen sollten , ist, dass Eigenschaften in C Sharp, die den Zugriff mithilfe von Getter und Setter auf Ihre privaten Felder kontrollieren , die Teil Ihrer C-Sharp-Klassen sind Danke fürs Zuschauen. 43. 9-6. Vererbung: Okay, Erbschaft in C Sharp. Sie haben das Wort vielleicht schon einmal gehört, vielleicht haben Sie es nicht gehört, aber ich werde es jetzt erklären. Was ist also Vererbung in C Sharp? Im Grunde besteht das Kernprinzip der Vererbung darin, die Wiederverwendbarkeit von Code zu erhöhen Und das ist selbst in Bezug auf objektorientierte Programmierung sehr wichtig , nicht in Bezug auf objektorientierte Die Sache ist, wenn wir Code kopieren und duplizieren, dann wird es irgendwann wirklich schwierig sein, unsere Software zu warten Es wird eine große Dateigröße haben und Sie werden eine Menge Probleme haben. Immer, immer Code wiederverwenden, wo immer möglich. Schauen wir uns ein Beispiel für Vererbung in C Sharp an. Also, was ich hier habe, ist eine sehr einfache Anwendung. Ich habe ein neues Tierobjekt erstellt und dafür habe ich eine Tierklasse. Schauen wir uns die Tierklasse an. Also hier ist mein Tierunterricht. Hier gibt es zwei private Felder, Name und Alter. Der Name des Tieres könnte also Rocky sein und Rocky könnte sieben Jahre alt sein, als ob Rocky zum Beispiel ein Hund sein könnte. Ich habe hier zwei grundlegende Methoden, bei denen nur der Name des Tieres im Konsolenfenster wiedergegeben wird, und noch eine andere Methode, die das Alter des Tieres wiedergibt Ich habe hier zwei Ladenflächen, zwei öffentliche Grundstücke, die mir die Kontrolle über meine privaten Felder, Name und Alter, ermöglichen Kontrolle über meine privaten Felder, Name und Alter, Es ist also eine sehr einfache Klasse. Ich habe hier ein Tierobjekt geschaffen. Ich habe die Namen Property und Rocky Age auf sieben gesetzt. Jetzt verwende ich hier nur diese Methoden, die diese Werte einfach auf dem Bildschirm wiedergeben, wenn wir die Anwendung ausführen. Jetzt können Sie sehen, dass es sehr einfach ist. Mein Name ist Rocky, ich bin sieben Jahre alt. Das ist also eine grundlegende Tierklasse. Nehmen wir an, ich möchte meine Anwendung erweitern. Vielleicht möchte ich eine Software, mit der ich einen Zoo mit Tieren erstellen kann. Vielleicht möchte ich einen Hundekurs, Rattenkurs, einen Katzenkurs, einen Hamsterkurs Ich möchte vielleicht 20 Klassen denen jeder auf seine Art ein Tier repräsentiert Wenn wir jetzt hierher kommen, können wir hier mit der rechten Maustaste auf das Projekt klicken und eine neue Klasse hinzufügen. Und nehmen wir an, wir wollen eine Hundeklasse einrichten. Dieser Kurs wird alles mit einem Hund zu tun haben. Zum Beispiel hat der Zoo vielleicht Hunderte von Hunden und wir möchten unsere Hunde in einer eigenen Hundeklasse verwalten . Das ist absolut vernünftig. Auch hier könnten wir einen Katzenkurs, einen Hamsterkurs, viele Dinge Aber was wir wollen, unsere Hundeklasse, wir wollen all diese Funktionen dieser Tierklasse hier haben, weil unser Hund einen Namen haben wird, er wird ein Alter haben Aber vielleicht hat es noch ein paar andere Dinge, wie vielleicht Methoden, die mit dem Graben zu tun haben Und nicht alle Tiere können graben, zum Beispiel vielleicht etwas, das für einen Hund spezifisch ist Aber wir wollen diese Kernfunktionalität. Unser Hund wird einen Namen und ein Alter haben. Ich will all das Zeug und das werde ich in meinen Hundeunterricht geben. Also jetzt kann ich irgendwie darauf aufbauen. Ich kann einige Methoden hinzufügen, weißt du, wenn der Hund gräbt oder der Hund um Leckerlis bettelt, oder vielleicht bestimmte Hundetricks Aber das Problem ist, dass wir all diese Kernfunktionen kopiert haben all diese Kernfunktionen , was funktionieren wird, kein Aber das Problem ist, wenn ich eine andere Klasse habe, vielleicht eine Katzenklasse oder eine Meerschweinchenklasse, möchte ich, dass sie auch diese Kernfunktionalität haben . Und das Problem ist, dass ich all diese Informationen in etwa 20 verschiedenen Klassen haben werde und es wirklich schwierig sein wird, sie zu verwalten. Und nicht nur das, es wird, wie ich schon sagte, die Dateigröße der Anwendung erhöhen . Wie umgehen wir dieses Problem hier? Oder der Laden hat etwas, das wir nutzen können , und das heißt Vererbung. Inheritance in C Sharp ist sehr einfach zu starten, aber vielleicht komplexer zu meistern. Aber lassen Sie uns anfangen und einen Blick darauf werfen, wie wir das machen können. In unserer Klasse benötigen wir keine dieser Funktionen. Was wir tun können, ist die Funktionalität der Tierklasse zu erben die Funktionalität der Tierklasse Das ganze Zeug hier, der ganze öffentliche Kram sowieso Und wir können zu unserer Hundeklasse gehen und einen Doppelpunkt verwenden und dann die Klasse eingeben, von der wir die Funktionen erben wollen von der wir die Funktionen erben In diesem Fall wird es einfach tierisch sein, wenn wir das tun. Ein sehr kleiner Code hier. Jetzt kennt unsere Hundeklasse alle öffentlichen Methoden hier und alle öffentlichen Eigenschaften, die wir in dieser Klasse haben könnten. Schauen wir uns ein Beispiel an. Im Moment können Sie sehen, dass unsere Hundeklasse völlig leer ist. Unsere Tierklasse hat all diese Logik. Lassen Sie uns ein neues Objekt für einen Hund erstellen und sehen, ob wir einige dieser Eigenschaften und Methoden hier tatsächlich verwenden können . Lassen Sie uns ein neues Objekt für einen Hund erstellen. Ich nenne ihn einfach Do. Wir können dem Hund einen Namen geben. Bingo, warum nicht das Alter des Hundes? Wir können es zum Beispiel auf drei setzen. Ich werde sie einfach umbenennen. Sie können hier sehen, dass es unter diesen Immobilien keine roten Linien gibt. Bei der Verwendung dieser Methoden treten keine Fehler auf. Wir können die Anwendung sogar ausführen, kein Problem. Und jetzt schau, mein Name ist Bingo. Ich bin drei Jahre alt. Sie können hier sehen, dass der Hund alle Funktionen vom Tier geerbt hat , alle öffentlichen Methoden und Eigenschaften vom Tier. Sie können hier die Hundeklasse sehen. Sie ist völlig leer. Aber Sie können sehen, dass wir den ganzen Code hier wiederverwenden , was wirklich effizient ist und das ist der Punkt der Vererbung. In diesem Beispiel hier sagen wir, dass Tier entweder die Elternklasse ist, so wie Sie einen Elternteil und ein Kind haben, wo das Kind die Fähigkeit erben könnte, zu atmen, bluten oder Dinge in Ihrer DNA zu essen Daher stammt die Terminologie. Das Tier wäre in diesem Fall der Elternteil und der Hund wäre das Kind. Aber einige andere Synonyme dafür wären die Basisklasse oder die Oberklasse Hund wäre das Kind, die abgeleitete Klasse oder die Unterklasse sind alles Synonyme, aber sie bedeuten im Grunde dasselbe Wenn Sie über Erbschaft in C Sharp nachdenken, müssen Sie eine Sache berücksichtigen, ein Gedanke muss Ihnen durch den Kopf gehen, und das ist a ist ein Hund, ein Tier ist eine Katze. Ein Tier ist eine Ratte, ein Tier. Wenn ja, dann ist Erbschaft perfekt für Sie. Und du missverstehst das Konzept nicht. Denken Sie immer daran, wenn Sie in einem Geschäft erben es sich um eine Beziehung handelt Erbschaft ist ein sehr langwieriges Thema. Aber noch eine Sache werde ich erklären, damit absolut klar ist, was ich tun werde. Ich werde eine Methode innerhalb unserer Hundeklasse definieren , die für Hunde einzigartig ist. Ich möchte, dass das zum Beispiel Bellen ist. Weil alle Hunde bellen, lassen Sie mich eine Methode entwickeln , bei der Hunde bellen. Sie können also sehen, dass ich hier eine Methode namens Bark erstellt habe. Und alles, was es tut, es schreibt in das Konsolenfenster. Wuff, wuff. So sehr einfach Und genau wie bei Menschen, wenn man eine hat, kann man Dinge erben, wenn man geboren wird, wie ich bereits erwähnt habe Aber der Elternteil kann nicht vom Kind erben. Wenn das Kind zum Beispiel eine neue Fähigkeit besitzt, wie zum Beispiel das Bellen, dann weiß das Tier davon nichts Genau wie in einer Eltern-Kind-Beziehung Wenn Ihr Kind eine neue Fähigkeit besitzt, es vielleicht Künstler geworden Das heißt nicht, dass der Elternteil ein Künstler ist. Weißt du, Erbschaft funktioniert so nicht. Lass mich dir jetzt ein Beispiel dafür zeigen. Also haben wir in der Hundeklasse eine Methode namens Bell definiert. Wenn ich hier zu unserem Hauptkanonenprogramm gehe und hier einen kleinen Punkt nach dem Tier setze, können Sie sehen, dass das Tier keine Ahnung von der Bellmethode hat Es steht nicht einmal in dieser Liste, was erwartet wird. Aber wenn wir hier zum Hund gehen und eintippen, haben wir dann unsere Methode namens Bellen, die wir gerade entwickelt haben? Wir können die Anwendung jetzt ausführen, Sie können sehen, dass Sie es können. Der Hund bellt also und dann wiederholen wir nur den Namen und das Alter des Das ist ein sehr einfaches Beispiel für Erbschaft in einem Geschäft. 44. 9-7. Methoden-Override (Polymorphismus): Okay, Methode statt Reiten. Wenn Sie das vorherige Tutorial zur Vererbung noch nicht gesehen haben, empfehle ich Ihnen dringend, es sich anzusehen, da es auf das folgt, was ich hier habe. Ich habe eine grundlegende Tierklasse. Wir geben der Tierklasse einen Namen und ein Alter. Jetzt habe ich einen Hundekurs. Und wieder hat der Hund einen Namen und Alter und auch hier gibt es eine Katzenklasse. Und sie machen verschiedene Dinge mit dem Tier. Ich sage den Namen Alter und mache ein Geräusch für den Hund und dasselbe für die Katze. Wenn ich hier in meinen Tierunterricht gehe, haben wir die üblichen Dinge, die Methoden aus dem letzten Tutorial. Aber wir haben hier noch eine weitere Methode und sie heißt Make Noise. Alles, was sie tut, ist etwas auf dem Bildschirm wiederzugeben, das zufällige Tiergeräusche macht Ich habe eine Hundeklasse, die von einem Tier erbt. Sie erbt alle öffentlichen Funktionen, die wir für sie definiert haben Und eine Katzenklasse, die auch von Tieren erbt, aber sie tun nichts Der Katzen- und Hundeunterricht bringt nichts Wenn wir das Programm ausführen, das Sie hier sehen können, heiße ich Henry Ich bin fünf Jahre alt. Macht zufällige Tiergeräusche. Und das Gleiche gilt für die Katze. Was wir hier tun, wir erben all diese Funktionen Aber Sie können insbesondere sehen, dass wir hier diese Methode namens make Noise erben Nun, das ist Teil der Tierklasse, wir wissen zum Beispiel vielleicht nicht, was für ein Tier wir haben, wir haben nur ein generisches Tier namens Henry Aber in meinem Hundeunterricht weiß ich, dass Hunde bellen. Zum Beispiel S, ich möchte, dass Lassie eine Bar macht. Ich möchte nicht, dass Lassie zufällige Tiergeräusche macht. Gleiche gilt für die Katzenklasse. Wir haben Felix. Ich hätte zum Beispiel gerne, dass die Katze das macht. Ich könnte das ganz einfach tun, indem ich hier eine neue Methode definiere , die in der Hundeklasse bellen heißt. Dann kann ich in der Katzenklasse eine Methode namens make noise oder per, miau oder so ähnlich definieren , die nur bei Katzen vorkommt Aber was wir tatsächlich tun können, ist diese Methode, die hier als Make Noise bezeichnet wird, außer Kraft Das bedeutet, dass wir diese Noise-Funktionalität erben können diese Noise-Funktionalität erben Aber das wird es nicht tun, es wird etwas anderes tun Das ist etwas anderes, das wir in unserer Kinderklasse definieren können. Zum Beispiel die Hundeklasse. Wie überschreiben wir diese Methode? Wie erben wir das und wie überschreiben wir es? Nun, in der Kinderklasse hier, Hund, erben wir die Methode schon , weil wir zufällige Tiergeräusche machen Aber wir wollen, dass der Hund bellt. Also, wie machen wir das? Was wir in der Elternklasse tun müssen, also in diesem Fall Tier, müssen wir die Methode zu dem machen, was man virtuell nennt. Und was das ist, es ist ein neues Schlüsselwort namens virtual. Und das sagt einfach, okay, jeder, der diese Klasse erbt, kann dieser Methode seine eigene Definition geben, wenn Sie möchten. Es ist deine Wahl Das musst du jetzt nicht. Das mache ich nicht mal. Ich führe das Programm aus, ich erbe all diese Funktionen. Virtual bedeutet im Grunde , okay, die Option besteht darin, Ihre eigenen Inhalte neu zu definieren Für diese Methode ist es optional, müssen Sie nicht. Das ist virtuell. Aber was wir tun wollen, ja, wir wollen tatsächlich unsere eigene Funktionalität. zum Beispiel in dieser untergeordneten Klasse hier, Machen Sie zum Beispiel in dieser untergeordneten Klasse hier, was ich tun möchte , wenn ich hier die Methode make noise aufrufe. Ich möchte bellen. Ich will, dass der Hund bellt. Um das zu tun, sage ich bellen oder wuffen, oder vielleicht beides. Warum nicht? Ich habe diese Methode von oben kopiert, aber wir setzen hier keine virtuelle Methode ein. Wir verwenden ein neues Schlüsselwort namens override. Und das ist wieder ein spezielles Schlüsselwort. In der Basisklasse, der Elternklasse, verwenden wir das Schlüsselwort virtual. In der untergeordneten Klasse verwenden wir das Schlüsselwort override. Das heißt im Grunde, okay, ich erbe diese Methode von der Elternklasse animal, aber ich möchte meine eigene Definition Ich möchte deine Cano-Logik überschreiben und meine eigene Override setzen, die immer in die untergeordnete Klasse geht, in diesem Fall Hund In der Basisklasse müssen wir es auf virtuell setzen. Wenn wir nicht virtuell angeben, können wir es nicht überschreiben. Sie passen zusammen wie ein Paar in unserer Katzenklasse. Nun, ich will die Katze jetzt zu mir es zum Beispiel so einfach, ist es zum Beispiel so einfach, als ob ich die Anwendung starte. Jetzt können Sie hier sehen, dass ich Henry heiße. Jetzt ist Henry ein generisches Tier. Er ist kein Hund oder er ist keine Katze. Henry macht zufällige Tiergeräusche. Lassie or Less ist jedoch ein Hund. Wenn wir die Methode „Hier Lärm für den Hund machen“ nennen, dann wird der Hund bellen und wuffen. Nun, die Katze wird keine zufälligen Tiergeräusche machen , weil die Katzenklasse auch die virtuelle Methode überschreibt Mach Lärm und die Katze miaut. Sie können sehen, dass das ein ziemlich einfaches Beispiel dafür wie wir diese Methode hier wiederverwenden können, Geräusche machen, ist, wie wir diese Methode hier wiederverwenden können, Geräusche machen, die in unserer Elternklasse definiert sind, aber ihr unsere eigene Definition geben Dies ist die Wiederverwendung von vorhandenem Code wie dieser Methode hier. Aber wir wollen diese Funktionalität nicht, wir wollen unsere eigene. Der Prozess der Definition unserer eigenen Definition ist ein Beispiel für den sogenannten Polymorphismus Was ist das? Es ist ein griechisches Wort, das viele Formen oder viele Formen bedeutet. Aber es ist ein Schlüsselprinzip der objektorientierten Programmierung. Sie haben also die ganze Zeit ein Beispiel für Polymorphismus gemacht , vielleicht ohne es zu merken Aber das ist das Schlüsselprinzip der 00-Programmierung und es ist sehr wichtig, wie Sie bereits gesehen haben Es wird durch Vererbung und Wiederverwendung von Code erreicht. Aber nicht nur das, sondern auch die Bereitstellung einer eigenen Definition für etwas Das ist also Polymorphismus. Das ist also ein Beispiel für das Überschreiben von Methoden in C Sharp. 45. 9-8. Mehrstufige Vererbung: Okay, mehrstufige Vererbung. Wenn Sie die vorherigen Tutorials zur Vererbung noch nicht gesehen haben, empfehle ich Ihnen dringend, sie sich jetzt anzusehen, da sie auf diese mehrstufige Vererbung aufbauen. Schauen wir uns also hier ein Beispiel an. Hier habe ich einen Tierkurs, hier ist er genau hier. Es definiert einige grundlegende Dinge, die mit Tieren zu tun haben, besonders diese Methode macht hier Lärm. Diese Methode ist nun virtuell, was bedeutet, dass alle untergeordneten Klassen dieser Basisklasse Tier optional ihren eigenen Inhalt für diese Methode definieren können . Okay, wir haben darüber gesprochen, jetzt haben wir zwei neue Klassen. Eine heißt Fleischfresser und ihre Elternklasse ist Tier und eine heißt Der Fleischfresser ist wie Fleischfresser und ein Pflanzenfresser ist Pflanzenfresser und ein Pflanzenfresser ist ein Tier . Es erfüllt also diese Art von Beziehung. Und der Pflanzenfresser setzt die Methode der Tiere der Elternklasse außer Kraft und definiert seine eigene Funktion, nämlich dass ich ein Pflanzenfresser bin , Pflanzenfressgeräusche mache und das Gleiche gilt für Fleischfresser definiert seine eigene Funktion, nämlich dass ich ein Pflanzenfresser bin , Pflanzenfressgeräusche mache und das Gleiche gilt für Fleischfresser. Es überschreibt die virtuelle Methode und definiert seinen eigenen Code. Es überschreibt die virtuelle Methode und definiert seinen eigenen Code. Ich bin ein Fleischfresser und macht Geräusche beim Fleischessen. Okay? Wenn wir ein Objekt erstellen, das ein Fleisch- oder Pflanzenfresser ist, und diese Methode ausführen, erhalten wir dieses wir Jetzt Katze und Hund. Jetzt ist Katze ein Fleischfresser. Der Hund ist auch ein Fleischfresser. Sie können sehen, was hier passiert, ist, dass der Hund fast wie der Enkel eines Tieres ist Der Fleischfresserunterricht findet zwischen Hund und Tier statt. Die Basisklasse ist hier Tier, dann Tiere, Kind ist der Fleischfresser, dann ist das Kind des Fleischfressers der Hund Das ist ein Beispiel für Vererbung auf mehreren Ebenen . Wir haben hier eine Hierarchie. Wir haben den Enkel, den Hund. Der Vater ist der Fleischfresser. Der Großvater wäre zum Beispiel das Tier. Hier gibt es mehrere Vererbungsebenen, können Sie perfekt machen, was Sie in C Sharp finden Das ist nur ein Beispiel. Sie können hier sehen, dass der Hund auch die Methode Make Noise überschreibt Es bellt, wuff. Schauen wir uns also ein Beispiel an. Hier erstelle ich ein neues Tier, das ist die Basisklasse, wie den Großvater Ich erschaffe einen neuen Hund, der wie der Enkel und eine neue Katze ist , und dann rufe ich bei jedem von ihnen die Methode Make Noise auf Ich habe kein Objekt für Fleischfresser. Ich habe kein Objekt für Pflanzenfresser. Lassen Sie uns die Anwendung hier ausführen. Macht zufällige Tiergeräusche , weil wir nicht wissen, welches Tier Henry ist Das haben wir damals definiert. Hund und Katze haben ihre eigenen Definitionen für Lärm machen. Bell, Wolf und O, was passiert, wenn ich diese Methode hier von Hund entferne? Was passiert? Erbe ich Fleischfresser? Erbe ich ein Tier wie der Großvater von diesem? Nun, ich zeige es dir gleich, es erbt die übergeordnete Klasse, also kannst du jetzt sehen, dass ich keine Methode namens make noise Wenn der Hund Geräusche macht, schaut er sich seine Elternklasse an, und in diesem Fall ist es ein Fleischfresser Carnivore überschreibt eigentlich das Geräusch von make noise und gibt eine eigene Definition, wenn Das ist Henry, das zufällige Tier Noise. Lassen Sie uns das einfach mal ins Auge fassen. Das ist Henry, das ist der Hund. Weil die Hundeklasse das jetzt nicht außer Kraft setzt. Jetzt springt es zu seinem Elternteil, dem Fleischfresser , der es Jetzt sagt der Hund, ich bin ein Fleischfresser, macht Fleischfressgeräusche und die Katze hat immer noch ihre eigene Methode definiert, und die Katze hat immer noch sodass die Katze immer noch miaut definiert Aber das ist ein sehr einfaches Beispiel mehrstufige Vererbung in C Sharp und Wie viele Vererbungsebenen können Sie haben? Wie groß kann zum Beispiel dieser Tierstammbaum sein? Nun, es gibt kein wirklich festgelegtes Limit, aber wenn Sie Software erstellen, möchten Sie sie nicht absolut lächerlich machen. 234 Stufen vielleicht, das hängt vielleicht von der Größe Ihrer Anwendung ab. Bei zehn oder 50 Erbschaftsstufen kann ich mir kein Beispiel vorstellen, kann ich mir kein Beispiel vorstellen warum Sie das jemals tun wollen würden. Aber der Zweck dieses Tutorials ist nur, Ihnen zu zeigen, dass das möglich ist und Sie wissen, dass es so ist, Leute es in der realen Welt benutzen. Es gibt noch eine andere Art der Vererbung, die als Mehrfachvererbung bezeichnet wird. Hier kann eine Klasse, zum Beispiel eine Katze, zum Beispiel eine Katze, nicht nur von einem Tier erben, sondern vielleicht auch von etwas anderem wie Katzen oder Also zwei Klassen. Nun, Shop unterstützt dies nicht nativ, aber es kann über Schnittstellen erreicht werden, auf die wir in einem späteren Tutorial eingehen Es gibt also verschiedene Layouts für die Vererbung, aber dies ist nur ein Beispiel für mehrschichtige Vererbung Also kann ich dir damit anfangen? Ich hoffe, dieses Tutorial hat Ihnen geholfen, viele der Möglichkeiten der Vererbung im Geschäft in Betracht zu ziehen. 46. 9-9. Das versiegelte Keyword: Ich möchte im Shop über das Schlüsselwort Sealed sprechen und es sieht genauso aus. Das Schlüsselwort sealed ist sehr nützlich, um die Vererbung auf Klassenebene einzuschränken . Was bedeutet das? Hier habe ich ein Beispiel für mehrstufige Vererbung in C Shop. Ich habe eine Spielklasse, die wie die Mutter ist , zum Beispiel. Ich habe ein Videospiel, das ist das Kind. Und dann habe ich Super Mario, das Enkelkind Es sieht also ungefähr so aus. Also hier ist das Basisklassenspiel. Es gibt nur eine Methode , die sagt, was cool ist, und sie ist als virtuell gekennzeichnet. Das bedeutet, dass alle untergeordneten Klassen dieser wählen können, diese Methode zu überschreiben, wenn sie möchten. Dann habe ich unter dem Basisspiel ein Spiel namens Videospiel, das vom Spiel erbt und diese Methode überschreibt Aber anstatt zu sagen, dass das Spiel cool ist, heißt es, dass dieses Videospiel cool ist Dann habe ich die Enkelklasse in dieser Anwendung, die vom Videospiel übernommen wurde Auch sie überschreibt die What-Is-Call-Methode. Jetzt heißt es, dass Super Mario angerufen wird. Wenn ich mir diese Anwendung hier ansehe, in der ich drei Objekte einrichte und diese Methoden einfach aufrufe, wird sie nur die Ergebnisse dieser Methoden ausgeben . Das ist Polymorphismus Was ich mit dem Schlüsselwort sealed machen kann, ist, dass ich die Vererbung auf eine Klasse einschränken kann Ein Videospiel ist wie das Füllen dieses Sandwichs. Sein Elternteil ist Game, aber sein Kind ist Super Mario. Wenn ich zum Beispiel sage, dass dies eine versiegelte Klasse war, bedeutet das, dass keine anderen Klassen von dieser Klasse erben können, sie kann also keine weiteren Kinder haben Stellen Sie sich vor, es wäre vielleicht eine Phasektomie oder etwas Ähnliches Aber du willst versuchen, dich daran zu erinnern , dass jetzt, wenn ich zum Kinderkurs gehe, du siehst, dass es ein Problem gibt Super Mario kann nicht von einem Videospiel der versiegelten Klasse abgeleitet werden, weil Videospiele keine weiteren Kinder haben können. Es ist versiegelt Es verhindert hier die Vererbung auf Klassenebene, was meine ich auf Klassenebene? Das heißt einfach in dieser Zeile genau hier. Wir können es jedoch auch auf Methodenebene verwenden. Und das schränkt jede weitere Vererbung einer Methode ein, nicht der gesamten Klasse, sondern nur einer Methode Wir können dies nicht als Faustregel in die Basisklasse aufnehmen, wir können es niemals in die Master-Klasse, die ultimative Elternklasse, Was wir tun würden, wir definieren hier eine Methode namens What is cool. Wir markieren es als virtuell. Wenn etwas als virtuell markiert ist, bedeutet das, dass die untergeordnete Klasse ihre eigene Definition bereitstellen kann , indem sie die Methode überschreibt Wir haben das schon einmal gemacht. Jetzt gehe ich zum unmittelbaren Kind, das ist ein Videospiel. Ich setze diese Methode außer Kraft, oder? Dies ist das erste Mal, dass wir diese Methode überschreiben , weil sie das unmittelbare Kind ist Hier kann ich das Schlüsselwort sealed verwenden. Sie können Sealed nur mit Override verwenden. Sie können es nicht mit Virtual verwenden. Es muss mindestens eine Stufe niedriger sein. Jetzt schränke ich jeden weiteren Zugriff auf diese Methode ein. Was jetzt cool ist, die arme Super Mario-Klasse, sie kann diese Methode nicht mehr verwenden. Du kannst sehen. Also kann das geerbte Mitglied nicht überschrieben werden, was so heißt , weil es versiegelt ist. Die Verwendung des Schlüsselworts sealed verhindert auf Klassenebene jegliche weitere Vererbung der Klasse selbst. Und eine Methodenebene verhindert die Methode weiter außer Kraft gesetzt wird, solange die Methode als versiegelt gekennzeichnet ist Das ist also die Stärke des Schlüsselworts sealed in C Sharp. 47. 9-10. Abstrakte Kurse und abstrakte Methoden: Lassen Sie uns über abstrakte Klassen und abstrakte Methoden sprechen. Was sind sie? Warum sollten wir sie benutzen? Schauen wir uns dieses Beispiel hier an und knüpfen an das vorherige an. Wenn Sie die anderen Tutorials noch nicht gesehen haben, empfehle ich Ihnen dringend, sie anzusehen , da sie einem von diesen folgen. Wir haben hier unsere Basisklasse, Tier, und wir sind gerade dabei, ein Tier namens Henry einzurichten. Wir haben unseren Hund, der vom Tier erbt, und wieder eine Katze, die vom Tier erbt Und wir wiederholen nur den Namen des Tieres, des Hundes und der Katze Hier ist unser Tierkurs. Es macht nicht viel. Wir haben drei Methoden. Wir haben markiert, machen Lärm, sagen Alter und sagen Namen. Alles war virtuell. Wenn die untergeordneten Klassen diese überschreiben wollen, können sie das tun. Wir überschreiben jetzt denselben Namen. Wenn wir den Namen des Hundes bekommen, heißt es: Oh, mein Name ist dann der Name des Hundes und dann Wuff am Ende Und das Gleiche gilt für die Katze. Es ist nicht viel los. Wir haben nicht wirklich darauf aufgebaut. Wir führen das Programm aus, das können Sie zum Beispiel sehen. Es ist ganz normal. Stellen Sie sich nun vor, Sie haben eine sehr große Software. Sie haben zehn weitere Leute, die an der Software arbeiten, und Sie möchten für jedes Tier einen Kurs. Sie emulieren zum Beispiel einen Zoo. Du entwickelst eine Software für Zoo oder sogar ein Pokémon-Spiel Und du willst eine Klasse für jeden Charakter oder jedes Tier. Sie könnten all diese Klassen von einer Person in Ihrem Team erstellen lassen, aber in Teams von vielleicht zehn oder 100 Personen werden Sie das delegieren Sie werden nicht der Einzige sein, der diese Klassen erstellt In diesen Klassen hier haben wir einen, der sagt, mach Lärm und es bellt und wummelt. Wir haben einen, in dem es heißt, sag den Namen und es sagt den Namen des Tieres, zum Beispiel den Hund hier Und der Hund wirft, nachdem er seinen Namen wiederholt hat. Das Gleiche gilt für die Katze Aber was ist, wenn unser Teamkollege Randy zum Beispiel eine Hamsterklasse ins Leben ruft Vielleicht vergisst er, diese Methode zu überschreiben. Er erinnerte sich daran, den Namen zu sagen, aber vielleicht hat er vergessen, das Geräusch zu machen, wenn die Anwendung läuft, anstatt make noise zu überschreiben und es macht Hamstergeräusche Es wird hier nur den Standardsound der Klasse „Can Apparent“ erzeugen , zufällige Tiergeräusche Wie können wir also Randy, unserem Freund, sagen, dass du vergessen hast, diese Methode außer Kraft zu setzen, dass deine Hamster keine Hamstergeräusche machen Nun, wir können das sogar in unserer Elternklasse Tier durchsetzen in unserer Elternklasse Tier Was wir in Animal tun können, wir können sagen, okay, ich werde einen Vertrag aufsetzen und sagen dass jede Klasse, die diese Klasse erbt, sagen wir, diese drei Methoden hier überschreiben muss sagen wir, diese drei Methoden hier Sonst kompiliert die Software nicht einmal. Wir können nicht einmal die Software ausführen , die sicherstellt, dass unser Freund Randy zum Beispiel die Methoden überschreibt, die unser Freund Randy überschreiben soll Wir können etwas einführen, das abstrakte Klassen genannt wird. Was tun abstrakte Klassen, um das zu erreichen? Stellen Sie sich das in Ordnung vor, wenn ich eine abstrakte Klasse und eine abstrakte Methode haben möchte, jede Klasse, die diese Klasse hier erbt muss jede Klasse, die diese Klasse hier erbt, diese Methoden überschreiben Sie müssen eine Definition angeben. Wenn das eine abstrakte Methode ist die zu einer abstrakten Klasse gehört, wenn Randy, unser Freund, eine Hamster-Klasse erstellt, dann läuft die Software nicht einmal Wenn er keine eigene Definition für diese Methoden bereitstellt , ist das der Vorteil einer abstrakten Klasse und einer abstrakten Ich werde dir zeigen, wie man das einrichtet. Das Erste, was wir tun, um eine abstrakte Klasse einzurichten , ist, die Klasse als abstrakt zu markieren. Das ist genauso einfach, wie das abstrakte Schlüsselwort dort zu schreiben. Das macht ein paar Dinge. Sobald wir eine Klasse als abstrakt markiert haben, können wir aus dieser Klasse kein Objekt mehr erstellen. Was bedeutet das? Wenn wir hier zum Programm gehen, können Sie sehen, dass wir hier ein tierisches Objekt namens Henry erstellen . Jetzt wissen wir nicht, welches Tier Henry ist, er wurde nur in unserem Beispiel verwendet. Aber Sie können jetzt hier sehen, dass sich unter dieser neuen Instanzzeile genau hier eine rote Linie befindet. Wenn ich mit der Maus darüber fahre, wird angezeigt, dass keine Instanz des abstrakten Typs oder des Interface-Animals erstellt abstrakten Typs oder des Interface-Animals Das liegt daran, dass Sie, wenn Sie eine Klasse als abstrakt markieren , keine Instanz dieser Klasse mehr erstellen können Nun, Henry, wir müssen entscheiden, was für ein Tier Henry zu diesem Zeitpunkt ist. Er ist entweder ein Hund, ein Hamster, eine Katze oder etwas anderes Aber jetzt haben wir diese Tierklasse als abstrakt markiert. Wir können kein Exemplar eines Tieres erstellen. Henry muss gehen und wir müssen entscheiden , wer Henry ist. Aber das ist beabsichtigt. Wenn Sie eine abstrakte Klasse haben, können Sie keine Instanz dieser Klasse erstellen. Jetzt abstrakte Methode. Also haben wir unsere abstrakte Klasse eingerichtet. Jetzt werden wir eine abstrakte Methode erstellen. Wie ich bereits erwähnt habe, muss, wenn eine Methode abstrakt ist, jede untergeordnete Klasse jede untergeordnete Klasse, die diese Klasse erbt, eine Definition bereitstellen Zum Beispiel erbt unsere Hundeklasse Do von Animal. Was ich tun werde, ich werde diese beiden Methoden löschen Der Hund erbt einfach das normale Zeug. Jetzt markiere ich diese Methode als abstrakt. Das ist eine abstrakte Methode. Wenn ich eine Methode als abstrakt markiere, können wir keine Definition für die Methode angeben. Wie ich bereits erwähnt habe, erzwingt sie in allen untergeordneten Klassen, ihre eigene Definition anzugeben , weil wir nicht einmal eine Instanz dieser Klasse erstellen können und wir lediglich erzwingen untergeordnete Klassen ihre eigene Definition angeben Dann macht es keinen Sinn, hier überhaupt eine Definition zu haben , weil sie irrelevant ist Sie würde niemals aufgerufen oder erreicht , wenn Sie eine abstrakte Methode definieren, es ist nur eine Vorlage. Es heißt nur, okay, für alle untergeordneten Klassen müssen Sie Ihre eigene Definition für diese Methode angeben. In der Katzenklasse machen wir genau das. Wir haben hier unsere eigene Methode und wir überschreiben sie, wenn Sie eine Methode als abstrakt definieren , um Ihre eigene Definition bereitzustellen, genau wie bei virtual verwenden Sie hier das Schlüsselwort override In der Hundeklasse können Sie jetzt sehen, dass ein Fehler vorliegt Wenn ich hier mit der Maus über den Hund fahre, heißt es: Schau, Hund implementiert nicht das vererbte abstrakte Mitglied Tier, das Geräusch macht Sie können sehen, dass die Software nicht einmal kompiliert. Wir können die Software einfach nicht kompilieren. Aus diesem Grund müssen wir diese Methode definieren. Unser Freund Randy, der seine Definition für seinen Hamster vergessen hat , der Hamstergeräusche macht Nun, die Software kann physisch nicht kompiliert werden , es sei denn, unser Teamkollege denkt daran, diese Methoden zu überschreiben. Das ist eine sehr gute Verwendung einer abstrakten Methode. Wir können das für all diese Methoden tun. Sagen Sie zum Beispiel Name. Dafür können wir eine Vorlage definieren. Sie fragen sich vielleicht, welchen Sinn es hat, überhaupt eine Methode zu haben? Warum dann zum Beispiel überhaupt sagen, gut altern? Das liegt daran, dass all unsere Kinderklassen wie Katze und Hund hier immer noch sagen wir, Alter gebrauchen können. Zum Beispiel können wir in diesen Methoden sagen, Alter aufrufen , wir können sie aus jeder untergeordneten Klasse dieser Methode verwenden. Diese Methoden sind immer noch nützlich. Das ist also eine Standardmethode, aber das ist eine abstrakte Methode. Bei den abstrakten Methoden zwingen wir im Grunde alle Tierklassen, etwas zu implementieren. eine Definition, eine Funktion zu geben , genau das ist eine abstrakte Methode. Sie zwingt alle untergeordneten Klassen , eine Definition für sie zu implementieren. Wir können jedoch immer noch normale Methoden verwenden, wie zum Beispiel das Alter. Wir können immer noch virtuelle Methoden verwenden und Hund und Katze die virtuellen Methoden überschreiben lassen. Diese sind völlig in Ordnung, aber das ist der Sinn der Zusammenfassung. Verwendung abstrakter Klassen hier, wie bei Animal, erzwingt also nicht nur die Abstraktion, über die wir zuvor mit Zugriffsmodifikatoren gesprochen haben, sondern auch den Polymorphismus, bei dem wir unsere eigene Funktionsdose für diese Methoden definieren können Die Verwendung abstrakter Klassen hier, wie bei Animal, erzwingt also nicht nur die Abstraktion, über die wir zuvor mit Zugriffsmodifikatoren gesprochen haben, sondern auch den Polymorphismus, bei dem wir unsere eigene Funktionsdose für diese Methoden definieren können . Nicht nur das, abstrakte Klassen können auch erzwingen, dass abstrakte Klassen können auch erzwingen jede untergeordnete Klasse, die von animal erbt , diesen Methoden eine gewisse Funktionalität verleiht Betrachte es als eine Blaupause oder einen Vertrag oder etwas Ähnliches jede untergeordnete Klasse, die von animal erbt, diesen Methoden eine gewisse Funktionalität verleiht. Betrachte es als eine Blaupause oder einen Vertrag oder etwas Ähnliches. Ich weiß, dass dieses Tutorial viel zu verarbeiten sein mag, aber Sie können es gerne immer wieder abspielen, bis Sie es verstehen aber Sie können es gerne immer wieder abspielen, bis Sie es Aber das ist das generische Prinzip hinter abstrakten Klassen und abstrakten Methoden im Shop 48. 9-11. Das Keyword: Ich werde über dieses Schlüsselwort in C Sharp sprechen, es sieht einfach so aus. Was das ist, es ist im Grunde eine Abkürzung für eine Instanz einer Klasse. Hier haben wir eine Klasse namens Dog, und ich erstelle eine Instanz. Dies kann eine Abkürzung für diese Instanz hier sein. Wenn ich mir meine Hundeklasse hier ansehe, gibt es eine Methode namens Make Noise. Wenn wir diese Methode aufrufen, schreiben wir einfach Bark Woof in das Konsolenfenster. Wenn wir uns das ansehen, rufen wir jetzt Make Noise an. Wenn ich das Programm starte, können Sie sehen, dass es nicht viel tut. Wenn ich in diese Hundeklasse gehe, kann ich auf diese aktuelle Instanz verweisen , wenn diese Methode aufgerufen wird. Ich gehe zum Beispiel hier rein Wenn ich das eintippe, kann ich mich auf alles beziehen , was mit dieser aktuellen Instanz zu tun hat, die hier erstellt wird. Schauen wir uns ein Beispiel dafür an, nur damit ich es Ihnen beweisen kann. Ich habe eine Klasse namens Helper erstellt. Jetzt macht Helper nicht viel. Es gibt eine Methode namens Make More Noise. Es benötigt einen Parameter, nämlich den Typ Hund, und es gibt die Instanz des Hundes. Dies wird als Parameter an diese Methode übergeben. Wir schreiben gerade eine Zeile, ich mache mehr Lärm wegen des Hundenamens. Wenn ich hier in meine Hundeklasse gehe, werde ich eine neue Instanz von Helper erstellen , damit ich die Klasse benutzen kann. Dann werde ich Hilfe benutzen, mehr Lärm machen. Ich möchte einen Fall von Hund weitergeben. Was ich tun kann, ist das Schlüsselwort this einzugeben, weil es die Instanz darstellt , die ich hier erstellt habe. Wenn wir die Methode für diese Instanz aufrufen. Stellen Sie sich vor, Sie erinnern sich hier daran. Nun, das ist genau dieser Fall. Stellen Sie sich vor, das wäre das. Wenn wir nun Helper aufrufen, rufen wir die Methode auf, machen mehr Lärm. Diese Instanz wird übergeben . Es hat einen langen Weg zurückgelegt. Jetzt wiederholen wir nur den Namen des Hundes, der zu dieser aktuellen Instanz gehört Wenn ich das Programm jetzt starte, kannst du Barkworfi'k sehen. Mehr Lärm Was? Es ist leer, weil wir dem Hund keinen Namen gegeben haben. Geben wir dem Hund einen Namen. Also, Hundename. Nennen wir ihn Rocky. Warum nicht Jetzt hat der Hund einen Namen. Lass es uns noch einmal ausführen. Jetzt mache ich mehr Lärm für Rocky. Sie können sehen, das ist die Stärke des Schlüsselworts, das. Es benötigt die aktuelle Instanz, es ist im Grunde eine Abkürzung dafür. Stellen Sie sich vor, das wäre eine Abkürzung für die aktuelle Instanz. Und wir können damit machen, was wir wollen. Wir können auf Eigenschaften zugreifen, auf alle privaten Felder oder sie sogar als Parameter an verschiedene Methoden übergeben. Das ist die Stärke dieses Keywords im Shop. Eine andere Sache, die wir mit diesem Schlüsselwort in C Sharp machen können. Hier ist ein gutes Beispiel. Ich sehe, dass Leute das oft tun, wenn wir einen Konstruktor für eine Klasse wie Animal haben , zwei Parameter berücksichtigt, zum Beispiel Name und Alter In unserem Konstruktor wollen wir unser Objekt konstruieren. Was wir tun, wir setzen unseren lokalen Feldnamen auf den Parameter, wie folgt Dann setzen wir auch das Alter auf den Parameter , einfach so. Jetzt haben wir das getan. Wir können dieses Schlüsselwort tatsächlich verwenden , um diese Namensinstanz zu unterscheiden. Dies ist der Parameter aus dieser Namensinstanz. Dies ist das private Feld. Was wir tun können, um es offensichtlicher zu machen, ist Folgendes zu sagen. Nun, dieser Name bezieht sich auf diese, weil dies die aktuelle Instanz dieser Klasse ist, sie wird sich auf diese beziehen. Das Gleiche gilt für das Alter. Das bezieht sich auf die Instanz, die hier ist. Der Name bezieht sich hier jedoch auf diese Instanz, da sie sich nicht in der aktuellen Instanz befindet. Es wird als Parameter übergeben. Sie werden das oft sehen, wenn Sie Konstruktoren einrichten, und es unterscheidet nur die Namen, sodass es keine Mehrdeutigkeit gibt Es ist eindeutig offensichtlich, was vor sich geht. Die aktuelle Instanz hier entspricht dem Parameter. Sie werden das bei Ihren zukünftigen Bemühungen ziemlich oft sehen. 49. 9-12. Das Basis-Keyword und die Basis-Klassenkonstrutoren: Das Basisschlüsselwort im Shop. Was ist das Basis-Keyword? Jetzt würden Sie das Basisschlüsselwort verwenden, wenn Sie versuchen von einer untergeordneten Klasse wie Dog aus darauf zuzugreifen. Hier ist dies eine untergeordnete Klasse, wir wollen auf alles in der Basisklasse zugreifen, daher das Basisschlüsselwort. Betrachten Sie es als eine Abkürzung für den Zugriff auf Methoden, Eigenschaften und ähnliches. Hier habe ich zum Beispiel eine Basistierklasse, die ein paar private Felder und einige Methoden hat. Zum Beispiel diese Methode hier, sie heißt Tiermethode, sie ist öffentlich und Teil der Tierklasse. Was ich von der Kinderklasse Hund aus machen kann, ich kann hier reinkommen und Base sagen und dann kann ich Tiermethode zugreifen, weil in diesem Fall eine Kinderklasse ist. Base ist optional, aber Sie können sehen, wie es funktioniert. Es sorgt für ein bisschen Klarheit. Was ich hier habe, ich habe zum Beispiel eine Methode namens Info, die nur auf dem Bildschirm ausgibt einige Informationen über diesen aktuellen Hund auf dem Bildschirm ausgibt. Wenn ich hierher gehe, habe ich hier ein neues Objekt erstellt , eine Hundeinstanz. Ich habe ihm einen Namen, ein Alter und eine Rasse gegeben. Und dann gebe ich die Informationen hier einfach aus. Wenn wir das Programm ausführen, können wir also einige Informationen über den Hund sehen Was Sie häufig sehen werden, ist nur ein bisschen mehr Klarheit, da Name und Alter hier beide in der Basisklasse Tier definiert sind . Sie können also den Namen und das Alter sehen , das sorgt für mehr Klarheit. Wenn Sie sich den Code ansehen, können Sie schnell erkennen, oh okay, sind Mitglieder der übergeordneten Klasse, um dort nachzuschauen. Allerdings ist Breed ein Mitglied dieser Klasse, also nicht das Basisschlüsselwort, aber du kannst ganz einfach erkennen, dass du weißt, wo diese hingehören, wenn du dir nur dieses Schlüsselwort ansiehst. Aber das ist nicht das Hauptmerkmal der Basisklasse. Worüber ich jetzt sprechen möchte, ist, ob Sie in der Elternklasse zum Beispiel ein Tier haben . Wenn ich einen Konstruktor in Animal This einrichte, können Sie sehen, dass es damit ein kleines Problem gibt Wenn ich jetzt versuche, das Programm auszuführen, wird es mich nicht zulassen. Wenn ich zu meiner untergeordneten Klasse übergehe, zu einer der untergeordneten Klassen, dieser Fehler aufgetreten Diese kleine rote Linie. Wenn ich mit der Maus drüber fahre, erscheint hier eine etwas kryptische Fehlermeldung Jetzt werden Konstruktoren standardmäßig nicht vererbt, weil sie nicht wirklich Mitglieder einer Klasse sind Aber jetzt habe ich hier einen Konstruktor in Animal definiert. Jetzt hat es ein Problem. Ich kann meine Software nicht einmal kompilieren. Was wir hier tun werden, ist hier einen Konstruktor in Dog zu definieren . Also, wenn ich hier mein Hundeobjekt erstelle, muss ich nicht all diese Eigenschaften einstellen Ich kann sie hier einfach in Parameter eingeben , wenn ich unsere neue Instanz erstelle. Schauen wir uns an, wie wir das machen können. Wenn wir ein Hundeobjekt erstellen, möchte ich einen Namen angeben , der in der Elternklasse enthalten ist, ein Alter, das auch in der Elternklasse enthalten ist , und auch eine Rasse. Ich will das, da alle Parameter und Rasse Teil der Hundeklasse ist, nicht der Basisklasse. Wenn ich hier zur Hundeklasse übergehe, der Kinderklasse, fange ich an, einen Konstruktor zu erstellen Ich möchte den Namen des Hundes, das Alter des Hundes und auch die Rasse angeben Es sieht ungefähr so aus. Jetzt gibt es hier eine Abkürzung. Was wir hier tun können, ist Name und Alter an die Basisklasse zu übergeben . Das machen wir so, dass wir hinter dem Konstruktor hier einen Doppelpunkt und das Schlüsselwort base setzen Dann öffnen und schließen Sie hier Klammern. Das ruft so ziemlich den Konstruktor der Basisklasse auf. Unser Konstruktor verwendet hier zwei Parameter. Base ist in diesem Fall eine Abkürzung für den Konstruktor der übergeordneten Klasse Der Konstruktor akzeptiert zwei Argumente. Wenn wir hierher zurückkehren, nimmt es den Namen und das Alter an Jetzt haben wir es hier mit diesen beiden Parametern zu tun. Sie werden in die Basisklasse geworfen und der Konstruktor wird aufgerufen Dann müssen wir nur noch etwas mit der Rasse machen , das stellen wir hier Jetzt können wir hier unsere Parameter einrichten , wenn wir die neue Instanz erstellen. Jetzt brauchen wir nichts davon. Im Grunde wird das genau das Gleiche tun , wenn ich das Programm starte. Jetzt können Sie sehen, dass es alle Informationen ausgibt. Noch einmal, wie funktioniert das? Wir erstellen eine neue Instanz der Hundeklasse. Wir rufen den Dog-Konstruktor auf , der drei Parameter aufnimmt Hier ist unser Hundekonstruktor. Ja, es werden drei Parameter berücksichtigt. Sobald der Konstruktor aufgerufen wurde, nimmt er diese beiden Parameter auf und überträgt sie in die Basisklasse Oben in der Basisklasse können Sie sehen, dass es zwei Parameter gibt. Hier ist er, der Konstruktor wird mit zwei Parametern aufgerufen Wir haben nur einen Konstruktor. Er hat zwei Parameter, dann wird dieser aufgerufen Dadurch werden hier unsere Eigenschaften, Name und Alter, festgelegt, wodurch anschließend unsere privaten Felder durch Getter und Setter Sobald der Konstruktor konstruiert hat geht unser Animal-Object-Flow wieder raus und dann wird der Rest des Dog-Konstruktors Das bestimmt nur das hiesige Feld, hier brüten, um zu brüten Das ist im Grunde so, wie es im Hintergrund funktioniert. Es ruft nur den Basisklassenkonstruktor auf. Schreiben Sie hier, Sie fragen sich vielleicht , warum wir das nicht einfach entfernen können? Und ich mache Basisname gleich Name und dann zum Beispiel Alter Nein, es wird nicht funktionieren weil diese Terminologie hier oben, die Doppelpunktbasis, tatsächlich den Konstruktor der übergeordneten Klasse selbst aufruft den Konstruktor der übergeordneten Klasse Es ist also erforderlich und dann löst sich dieser Fehler ohne das von selbst Und selbst wenn Sie diese Basen dort einfügen, wird dieser Fehler immer noch hier ausgegeben, weil der Konstruktor der übergeordneten Klasse nie erstellt wird Es erzeugt also nie dieses Tierobjekt, weil es die übergeordnete Klasse ist Die Kinderklasse Hund hängt davon ab. Deshalb ist es hier erforderlich. Und das ist die Stärke des Basis-Keywords im Shop. 50. 9-13. Schnittstellen: Schnittstellen im Shop. Schnittstellen sind eine weitere Möglichkeit, Abstraktion im Geschäft zu erreichen Wir haben bereits ein wenig über abstrakte Klassen gesprochen. Abstraktion ist ein wichtiges objektorientiertes Prinzip, bei dem lediglich die internen Details versteckt und nur die Funktionalität angezeigt werden Schauen wir uns die Benutzeroberflächen im Shop als kleine Auffrischung Ich beziehe mich hier nur auf dieses Projekt, bei dem wir einen abstrakten Tierkurs gemacht haben hier nur auf dieses Projekt, bei dem wir einen abstrakten Tierkurs gemacht Hier ist unsere abstrakte Tierklasse. Wir haben hier einige private Felder und öffentliche Methoden und auch einige öffentliche Immobilien. Ich habe hier eine abstrakte Methode, weil die Hundeklasse hier von der abstrakten Klasse Tier erbt, sie muss diese abstrakte Methode überschreiben Sie ist gezwungen, das zu tun. Und das ist der Sinn abstrakter Klassen durch Polymorphismus Wir überschreiben diese Methode, machen Lärm. Und wir geben nur Wuff, Wuff für unseren Hundeunterricht aus Wenn wir ein neues Hundeobjekt erstellen und die Methode ausführen, machen wir Lärm, wir bekommen nur wuff, wuff. Im Prinzip ist das dort die abstrakte Klasse. Wir sind gezwungen, diese abstrakten Methoden zu überschreiben. Schauen wir uns hier an, wie wir eine Tierschnittstelle erstellen können und wie sich Schnittstellen auch von abstrakten Klassen unterscheiden. Schnittstellen im Shop, ziemlich ähnlich wie abstrakte Klassen. Was ich tun werde, ist eine brandneue Oberfläche im Shop zu erstellen . Dann werde ich Ihnen einige Unterschiede zwischen abstrakten Klassen und Schnittstellen zeigen . Dann wird unsere Hundeklasse hier unsere brandneue Oberfläche verwenden. Das wird gleich alles klar werden. Wenn wir hier auf der rechten Seite zu unserem Projekt gehen, klicken wir mit der rechten Maustaste, gehen wir zu Hinzufügen und dann zum Kurs Aus dem Menü hier wählen wir einfach Interface. Jetzt können wir der Schnittstelle einen beliebigen Namen geben , aber ich möchte eine Tierschnittstelle erstellen. Bei der Erstellung von Schnittstellen empfiehlt es sich immer vorher ein großes I zu verwenden. Das liegt daran, dass wenn Sie Schnittstellen hinzufügen oder zumindest ein wirklich großes Projekt mit vielleicht Dutzenden oder Hunderten von Schnittstellen haben , Sie diese von normalen Klassen unterscheiden können. Hier haben wir Tiere und man kann Tiere sehen. Das ist eindeutig ein Interface, nur weil wir es so benannt haben. Das ist einfach eine gute Übung. Der Unterschied zwischen einer Schnittstelle wie dieser hier und einer Klasse, dieser hier. Hier ist nur der Unterschied zwischen dem Schlüsselwort, das darin besteht, dass wir ein Klassenschlüsselwort für eine Klasse und das Interface-Schlüsselwort für eine Schnittstelle haben. So ziemlich alles andere hier ist dasselbe. Das ist der einzige subtile Unterschied hier. Jetzt können Sie Schnittstellen in C Sharp als so gut wie zu 100% völlig abstrakt betrachten . Was bedeutet das? Nun, wenn Sie sich das Tutorial zur abstrakten Klasse wie dieses hier angesehen haben, haben wir hier einige abstrakte Methoden. Wenn wir eine abstrakte Methode haben, definieren wir dafür keinen Körper. Weil unsere Klassen diese abstrakte Klasse erben, definieren sie ihre eigenen Methoden für sie, wie zum Beispiel die Hundeklasse und die Katzenklasse Sie stellen Code zur Verfügung. Wenn wir zu unserer abstrakten Klasse gehen, hat sie zum Beispiel keinen Hauptteil. Eine abstrakte Klasse kann jedoch ihre eigenen Methoden definieren , z. B. den Namen, das Alter. Sie können auch verschiedene andere Dinge tun. Dies gilt nicht für Schnittstellen. Betrachten Sie eine Schnittstelle als eine rein abstrakte Klasse, in der Sie keine Körper definieren. Es gibt eine kleine Ausnahme für diese Regel, die sich auf private Mitglieder bezieht, aber darauf werde ich vielleicht später oder zu einem anderen Zeitpunkt eingehen . Betrachte Interfaces als eine rein abstrakte Klasse. Wir definieren für unsere Methoden keine Körper in Schnittstellen. Wenn ich hier zu meiner Hundeklasse komme, die von dieser abstrakten Tierklasse erbt, können Sie sehen, dass ich eine Methode, die Geräusche macht, überschreibe und ihr dann meine eigene Funktionalität gebe Ich möchte dasselbe in meiner Oberfläche tun. In meiner Schnittstelle möchte ich eine Methode namens make noise definieren, die abstrakt sein wird , weil das der Zweck der Schnittstelle ist. Wenn ich eine neue Methode namens make noise definiere, wie du sagst, weil sie abstrakt ist, habe ich hier keinen Körper. Und das ist standardmäßig öffentlich. Der Zugriffsmodifikator ist standardmäßig öffentlich. Und das liegt nur an der Gestaltung von Schnittstellen, weil wir wollen, dass jeder diese Schnittstellen benutzt Also haben wir einfach so unsere allererste Methode in unserer Schnittstelle definiert . Sehr einfach, nicht wahr? Weil es standardmäßig öffentlich und abstrakt ist. Wir benötigen keine Zugriffsmodifizierer wie public. Es ist optional und wir benötigen das abstrakte Schlüsselwort nicht. So definieren Sie beispielsweise eine öffentliche abstrakte Methode in C Sharp für eine Schnittstelle. Jetzt gehe ich rüber zu meinem Hundeunterricht. Im Moment erbt es von dieser abstrakten Klasse und mir geht es gut. Ich möchte die Schnittstelle implementieren. Also werde ich einfach ein I voranstellen. Also verwendet es jetzt unsere Schnittstelle statt unserer abstrakten Klasse. Nun, wie können wir das umschreiben , damit es mit unserer Schnittstelle hier funktioniert? Nun, wenn wir von einer abstrakten Klasse erben und wir eine abstrakte Methode haben, wie wir bereits erwähnt haben , verwenden wir hier das Schlüsselwort override Aber bei Schnittstellen verwenden wir das Schlüsselwort override nicht, es wird überhaupt nicht benötigt Das ist völlig ausreichend. Zum Beispiel eine andere Sache. Wenn wir uns dafür entscheiden, keine Methode für unsere Schnittstelle zu definieren und es einfach so zu belassen. Wenn wir hier mit der Maus drüber fahren, heißt das, dass Dog das Interface Member Make Noise nicht implementiert , genau wie abstrakte Klassen Es zwingt uns, eine Implementierung für diese Methode bereitzustellen , damit es uns dazu zwingen kann Wenn Sie zum Beispiel große Teams haben, ist das sehr praktisch, weil dann alle Ihre Klassen einigermaßen standardisiert sind. Und dann werdet ihr hier alle diese Methode außer Kraft setzen , genau wie wir es bereits in abstrakten Klassen besprochen haben. Jetzt habe ich diesen Hundekurs hier. Es implementiert die Make Noise-Methode, die wir in unserer Oberfläche definiert haben , und definiert durch Polymorphismus seine eigene Funktionalität Wenn ich hier zu dem Programm übergehe, in dem wir ein brandneues Hundeobjekt erstellen , und wir die Methode make noise aufrufen die Methode make noise die über die Schnittstelle verfügbar ist, erhalten wir genau das gleiche Ergebnis Lassen Sie mich also auf einige Gemeinsamkeiten und auch einige Unterschiede zwischen abstrakten Klassen in C-Shop und auch zwischen Schnittstellen eingehen einige Gemeinsamkeiten und auch einige Unterschiede zwischen abstrakten Klassen in . Denn oberflächlich betrachtet erreichen sie vielleicht schon einmal etwas sehr Ähnliches, erreichen sie vielleicht schon einmal etwas sehr Ähnliches wenn wir versuchen, eine Instanz einer abstrakten Klasse zu erstellen . Es würde uns nicht lassen. Es ist nicht möglich, und das liegt am Design. Selbst wenn ich zum Beispiel versuche, dasselbe mit einer Oberfläche zu tun , wird es mir nicht möglich sein selbst Visual Studio bietet dafür keine Autocomplete-Funktion an Wenn ich hier mit der Maus über diesen neuen Instanzversuch fahre, heißt das, dass er keine Instanz des abstrakten Typs Interface Animal erstellen kann des abstrakten Typs Interface Es ist also nicht möglich. In einer abstrakten Klasse können wir einen Konstruktor haben, aber er wird nur von den untergeordneten Klassen aufgerufen, nicht irgendwo außerhalb dieser Vererbungskette mit Schnittstellen Sie können keinen Konstruktor haben , weil Sie unter keinen Umständen eine Schnittstelle konstruieren würden unter keinen Umständen eine Schnittstelle konstruieren Die Schnittstelle verhält sich einfach wie ein Vertrag, sodass alles, was die Schnittstelle implementiert die verfügbaren Methoden überschreiben kann Keine Konstruktoren in Schnittstellen. Wenn wir das tun wollen, dann ist der Zweck, dass wir eine Klasse haben und dann eine Schnittstelle implementieren, oder wir erben von einer abstrakten Klasse und definieren dann unsere eigenen Überschreibungen für diese Aus diesem Grund erstellen wir beispielsweise keine neuen Instanzen abstrakter Klassen und Schnittstellen und benötigen daher keinen Konstruktor Etwas anderes, das wir auch angesprochen haben, war die Tatsache , dass abstrakte Klassen genau hier Felder haben können, die man in einer Schnittstelle nicht haben kann Auch hier können wir in Methoden Körper in abstrakten Klassen definieren. Bei Schnittstellen können wir das jedoch nicht, weil es rein abstrakt ist. Dies sind hier einige Unterschiede. Möglicherweise stellen Sie sich die folgende Frage. Warum sollte ich überhaupt eine Schnittstelle verwenden , wenn ich in einer abstrakten Klasse zum Beispiel Felder verwenden kann, ich kann Methodenkörper definieren, wenn ich will. Warum sollte ich eine Schnittstelle verwenden? Was ist der Sinn? Es scheint begrenzter zu sein, ja. Vielleicht ist es zum Beispiel zu 100% abstrakt, aber warum sollte ich eines verwenden? Nun, Schnittstellen unterstützen zum Beispiel die Idee der Mehrfachvererbung in C Sharp. Wenn ich ein Tierinterface wie Animal habe, kann ich zum Beispiel ein Interface namens Maybe Carnivore erstellen namens Maybe Carnivore Dann kann unsere Hundeklasse tatsächlich von Tier und Ikonivorre oder vielleicht etwas anderem wie Pflanzenfressern implementieren und Ikonivorre oder vielleicht etwas anderem wie Pflanzenfressern Es kann also von mehreren Klassen hier oben aus implementiert werden, mehrere Schnittstellen, mehrere Schnittstellen, und das kann man mit abstrakten Klassen nicht machen Das ist also eine der Hauptstärken von Schnittstellen in C Sharp. Schauen wir uns jetzt ein Beispiel an. Wenn ich hierher komme, klicke ich mit der rechten Maustaste auf das Projekt und gehe zu Klassenschnittstelle hinzufügen. Ich werde einfach Iconivorre kreieren, weil Hunde Fleischfresser weil Hunde Es ist auch ein Tier. Vielleicht gibt es eine bessere Art, das darzustellen, aber lassen Sie uns einfach dieses Beispiel durchgehen. Sie können also sehen, was das für einen Sinn hat. Bei Fleischfressern werde ich einfach eine Methode definieren, die vielleicht Fleisch essen heißt , weil alle Fleischfresser Einfach so. Auch hier ist es standardmäßig abstrakt und öffentlich. Das ist alles, was wir in diesem Fall brauchen. Wenn ich nun mehrere Schnittstellen erben oder von ihnen implementieren möchte , trenne ich wie zuvor die Klasse vom Doppelpunkt Und dann füge ich die Klasse oder Schnittstelle ein, die ich implementieren oder von der ich erben möchte Aber wenn ich von mehreren Schnittstellen erben möchte, setze ich hier einfach ein Komma Dann kann ich zum Beispiel das nächste Schnittstellen-Icon einfügen. Jetzt können Sie sehen, dass es eine rote Linie gibt, weil sie unser neues Mitglied Eat Meat nicht implementiert, was wahr ist Wir haben dafür keine Methode definiert. Wenn ich hierher gehe und Fleisch essen eintippe, implementiere ich jetzt diese Methode hier von iconivor Ich implementiere diese Methode jetzt von Animal aus. Jeder ist glücklich, es gibt keine roten Linien, alles ist zufrieden. Ich kann dann meine eigene Definition festlegen, so etwas wie Fleisch essen. Wenn ich dann hier zu meiner Bewerbung komme, gebe ich zum Beispiel Fleisch essen ein. Nun, das ist die Methode, die wir über unser brandneues Schnittstellensymbol implementieren. Oder Fleisch essen. Oh, lassen Sie uns das loswerden, weil wir keine neue Instanz einer Schnittstelle erstellen können . Jetzt erstelle ich ein neues Hundeobjekt und esse jetzt etwas Fleisch. Und das ist ein Mitglied unserer neuen Oberfläche. Sie können hier sehen, dass dies ein sehr schnelles Beispiel für Mehrfachvererbung in C Sharp ist. Und das wird durch die Verwendung von Schnittstellen erreicht, was mit abstrakten Klassen nicht möglich ist. Das sind die Vorteile von beiden. Sie können sehen, dass wir durch die Verwendung von Schnittstellen in C Sharp und auch durch abstrakte Klassen C Sharp und auch durch abstrakte Klassen Abstraktion erreichen können, was ein wichtiges Prinzip der objektorientierten Programmierung ist Testen Sie jetzt Ihr Wissen über Vererbung oder fragen Sie vielleicht einfach ab, ob Sie dieses Thema vollständig verstehen Wenn ich zum Beispiel hier zu meiner Hauptanwendung übergehe, kann ich hier eine neue Methode erstellen. Ich nenne es zum Beispiel Make Noise. Es wird keinen Wert zurückgeben, es wird nur ein Geräusch über unsere Tiere im Konsolenfenster machen . Und hier wird ein Parameter benötigt , weil der Hund unsere Schnittstelle Tier implementiert , weil wir wissen, dass ein Hund ein Tier ist, wenn wir über Erbschaft sprechen , bevor ein Hund Befriedigungsmittel eine Beziehung ist Ebenso unsere Katzenklasse. Eine Katze ist ein Tier, ein Hamster ist ein Tier Dann können wir einfach hierher gehen und Tier als Parameter eingeben, weil unser Hund dieses Interface hier implementiert Dann können wir Dinge von hier aus erledigen. Wir können sagen, mach Lärm. Was wir hier tun können, wir können ein Hundeobjekt erstellen. Dann können wir unseren Hund an diese Methode namens Make Noise weitergeben . Dann, weil der Hund ein Tier ist, wird das funktionieren, kein Problem. Es wird hier die Methode Make Noise für das Objekt aufrufen , bei dem es sich um ein Tier handelt. Es ist ein Tier. Wenn ich ein Katzenobjekt erstelle, kann ich dieselbe Methode verwenden da Cat Tiere implementieren würde. In diesem Fall könnte ich eine Dolphin-Klasse erstellen , solange sie Animal implementiert. Auch hier kann ich diese Methode aufrufen, kein Problem. Sie können sehen, dass dies die Macht der Vererbung ist, aber Sie können auch Dinge wie Schnittstellen verwenden. Das funktioniert auch mit abstrakten Klassen, genau wie zuvor, kein Problem. Solange meine Hundeklasse von der abstrakten Klasse Tier erbt Sie können jetzt sehen, ob ich dieses Programm starte, Sie können sehen, dass es jetzt wuff, wuff sagt Ähnlich verhält es sich, wenn ich eine Katzenklasse wie diese hier habe, implementiert sie aus Animal die Methode make noise und überschreibt hier ihre eigene Logik, nämlich O. Dann gehe ich zum Programm, erstelle ein neues Katzenobjekt, dann möchte ich mit der Katze Krach machen Und solange es unsere Schnittstelle implementiert, wird es funktionieren, kein Problem Sie können sehen, welche Macht Vererbung und warum wir Schnittstellen verwenden. Wir müssen nur die Schnittstelle an die Software weitergeben , zum Beispiel als Methodenparameter oder sogar als Rückgabe von einer Methode oder so ziemlich allem. Auch hier gilt: Wenn ich das Programm starte, können Sie durch den Polymorphismus erkennen, dass wir die Methode make noise für Hund und Katze außer Kraft setzen, aber auch Schnittstellen verwenden, aber auch Schnittstellen verwenden um das Objekt an das Programm weiterzugeben Sie können sehen, dass es ziemlich mächtig ist und die Möglichkeiten auch endlos sind Sie können hier sehen, ob ich diese Schnittstelle zu unserer abstrakten Klasse ändere . Gehen Sie zur Klasse und stellen Sie sicher, Gehen Sie zur Klasse und stellen Sie dass sie die abstrakte Klasse implementiert. Bei abstrakten Klassen verwenden wir das Schlüsselwort Override, weil das der Unterschied zwischen diesen Klassen und Interfaces ist. Das spiegelt sich auch in der Hundeklasse wider. Und dann geh zurück zu unserem Hauptprogramm hier. Dann führe das Programm aus. Sie können sehen, dass wir eine abstrakte Klasse weitergegeben haben und sie funktioniert genauso wie eine Schnittstelle. Aber es gibt subtile Unterschiede, wie wir bereits besprochen haben, zwischen Schnittstellen und abstrakten Klassen. Dies ist jedoch ein Beispiel sowohl Vergleich als auch für die Vorteile der Verwendung von Schnittstellen zur Erfüllung Mehrfachvererbung in C Sharp. Ich hoffe, dieses Tutorial hat dir geholfen und danke fürs Zuschauen. 51. 9-14. O-O-Zusammenfassung: Wir haben also gerade einige Tutorials zur objektorientierten Programmierung fertiggestellt zur objektorientierten Programmierung Jetzt haben wir so ziemlich jedes Prinzip des Programmierparadigmas durchgesehen jedes Prinzip des Programmierparadigmas Und jetzt schließen wir einfach den Kreis und reflektieren, was wir gelernt haben, und einige Stichwörter und ähnliches fallen lassen Also nochmal, wie ich zu Beginn unserer 00-Reise erwähnt habe , C sharp ist eine objektorientierte Programmiersprache. Und die Verwendung von 00 hilft Ihnen wirklich dabei, Ihre Projekte zu strukturieren. Wenn Ihre Projekte sehr umfangreich werden, werden sie viel einfacher zu verwalten sein. werden Sie in Zukunft viel Wert auf Wiederverwendbarkeit von Vielleicht werden Sie in Zukunft viel Wert auf Wiederverwendbarkeit von Code legen Wenn Sie diese Reise fortsetzen, werden Sie mit anderen Menschen zusammenarbeiten Vielleicht in einem Unternehmen , das sich auch mit Programmieren auskennt . Sie werden alle dieselben Techniken zum Schreiben von Software kennen und bereits verstehen. Sie werden also sehr schnell durchstarten. Lassen Sie uns einige der Begriffe noch einmal durchgehen , damit Sie sie vollständig verstehen. Und dann werden wir zu etwas anderem übergehen . Objektorientierte Programmierung. Auch hier ist es ein Paradigma , also eine Art, etwas zu tun Wir haben über Unterricht gesprochen. Jetzt modellieren Klassen Objekte aus der realen Welt. Wenn Sie also eine Software über eine Bibliothek haben, dann könnte ein Kurs ein Buch sein. Da es sich bei einem Buch um ein Objekt aus der realen Welt handelt, sollte Ihr Kurs sehr zusammenhängend sein Das bedeutet, dass es in dem Kurs über das Buch nur um das Buch gehen sollte Es sollte nicht darum gehen, dass der Benutzer das Buch liest. Wenn Sie also eine Buchklasse haben, sollten sich alle Methoden, alle Eigenschaften immer auf das Buch beziehen. Das ist eine sehr gute Praxis, und Ihre Kurse sollten lose miteinander verknüpft sein Das bedeutet, dass es in Ihrem Buchunterricht um das Buch gehen sollte. In Ihrer Benutzerklasse sollte es um den Benutzer gehen. Und sie sollten nicht wirklich viel mit anderen Objekten gemeinsam haben . Jetzt erstellt Objects eine neue Instanz einer Klasse. Eine Klasse ist so etwas wie die Vorlage mit allen Methoden und Eigenschaften. Und wenn wir eine neue Instanz davon erstellen wollen, können Sie eine oder Tausende haben, wenn Sie möchten. Das nennt man das Erstellen eines Objekts. Ein Objekt ist also nur eine Instanz einer Klasse, und wenn Sie eine Instanz erstellen, wird das als Instanziierung bezeichnet Nun, Vererbung, Vererbung fördert die Wiederverwendung von Code, und wenn Sie Code wiederverwenden, wird er wartungsfreundlicher Wir müssen Code nicht kopieren und in jede einzelne Klasse einfügen, denn wenn wir eine Klasse wie Hund haben, dann kann sie von Animal erben Wenn wir eine Klasse namens Katze haben, kann sie wiederum vom Tier erben Und viele dieser Klassen werden dieselben Funktionen haben. Sie werden also viel weniger Code verwenden und schreiben. Und wenn Sie viel weniger Code schreiben, bedeutet das, dass Ihr Code viel wartungsfreundlicher und einfacher zu verwalten sein wird einfacher zu verwalten Nicht nur das, die Dateigröße der Software wird minimal sein Und wenn Sie auch die Software testen, können Sie viel weniger Code zum Testen haben. Alles in allem ist Vererbung also ein sehr gutes Prinzip, das es zu praktizieren gilt. Wir haben über Polymorphismus gesprochen, dieses seltsame griechische Wort, das viele Formen oder viele Formen bedeutet, was wir durch die Überlastung von Methoden erreicht haben Wenn wir über Methoden sprechen, wie wir verschiedene Parameter haben können aber denselben Methodennamen In jüngerer Zeit haben wir aber auch über Polymorphismus mit Methodenüberschreibung gesprochen . In einer Basisklasse wie Animal können wir sagen, dass wir Lärm machen Wenn wir dann in einer Hunde-, Katzen- oder Hamsterklasse von dieser Klasse erben , können wir diese Methode überschreiben und Wir können das Ergebnis sehen , wenn wir die Anwendung ausführen, zum Beispiel wenn wir die verwenden, bellt der Hund , wenn wir die Methode make noise verwenden Wenn man die Katzenklasse benutzt, miaut die Katze Wir können dieselbe Methode wiederverwenden , aber unterschiedliche Funktionen bereitstellen Das ist Polymorphismus. Die letzten beiden Jetzt verwirren die letzten beiden Personen die beiden , weil sie sich sehr ähnlich sind und Hand in Hand gehen. Und das ist Verkapselungsabstraktion. Jetzt verbirgt die Kapselung die interne Funktionalität eines Objekts Sie ermöglicht nur den Zugriff über einen öffentlichen Funktionsumfang. Zum Beispiel, als wir über öffentliche und private Zugriffsmodifikatoren gesprochen haben, weil wir unsere sensiblen Informationen, wie zum Beispiel unsere privaten Felder, verbergen möchten wie zum Beispiel unsere privaten Felder, Aber greifen Sie nur über öffentliche Methoden auf sie zu, damit wir die Daten überprüfen und sicherstellen können , dass niemand etwas kaputt Solche Dinge zum Beispiel. Und auch Seeshop-Immobilien. Wenn man von Abstraktion spricht, bedeutet das, nur wichtige Informationen anzuzeigen und die wichtigsten Details zu verbergen . Und das haben wir mit abstrakten Klassen und auch mit Interfaces gemacht. Stellen Sie sich also wie bei einer Kaffeemaschine vor, wenn Sie einen Kaffee zubereiten möchten, drücken Sie den Kaffeebrühknopf. Wenn du ein Auto starten willst, drehst du den Schlüssel. Sie müssen nicht wissen, wie ein Anlasser in einem Auto funktioniert, wie ein Generator funktioniert oder wie die Batterie aufgeladen Als Benutzer, als Entwickler müssen Sie nur den Schlüssel drehen, damit das Auto funktioniert Ähnlich wie bei einer Kaffeemaschine brühen Sie einen Kaffee, Sie müssen nicht wissen, wie die Elektronik funktioniert, wie das Wasser erhitzt wird. All das wird dir weggenommen , es sind unnötige Informationen Wenn Sie nur ein Endverbraucher dieser Dinge sind, wie zum Beispiel eine Kaffeemaschine oder der Fahrer eines Autos, müssen Sie das einfach nicht wissen Und das ist Abstraktion. Und das sehen wir im täglichen Leben, jeden Tag, mehrmals am Tag Und das ist der Unterschied zwischen Verkapselung und Abstraktion Auch hier sind beide wichtige Begriffe der objektorientierten Programmierung wichtig, aber sie gehen häufig Hand in Hand Und manchmal kann es sich aus diesem Grund oft so anfühlen, als ob die Grenze zwischen Verkapselung und Abstraktion etwas verschwommen ist Grenze zwischen Verkapselung und Abstraktion etwas verschwommen Verkapselung und Abstraktion Herzlichen Glückwunsch, wir haben alle Prinzipien der objektorientierten Programmierung durchgesehen Prinzipien Und wenn Sie sich für eine andere Sprache wie C plus Plus oder Java entscheiden , können Sie diese Prinzipien vermitteln und fast sofort mit der Arbeit beginnen Es ist nicht an C gebunden. Sharp ist sehr beliebt und wird auch in vielen Programmiersprachen verwendet. 52. 10-1. Übung - Pyramiden zeichnen: Heute werden wir Pyramiden zeichnen und zwar in unserem Konsolenanwendungstyp Und wir lassen den Benutzer entscheiden wie groß seine Pyramide sein soll Wenn der Benutzer beispielsweise 45 eingibt, wird hier eine Pyramide generiert. Und sie wird 45 Zeilen hoch sein, wie Sie hier sehen können. Es sieht ziemlich cool aus, nicht wahr? Wenn der Benutzer jedoch beispielsweise die Zahl Fünf eingibt, wird seine Pyramide nur fünf Zeilen hoch sein. Das ist ein bisschen eine Übung. Es wird nicht nur Ihre C-Sharp-Programmierkenntnisse testen, sondern auch Ihre logischen Fähigkeiten. Wie Sie ein Problem betrachten und eine Lösung entwickeln können, indem es in kleine Untergruppen aufteilen und dann das Problem angehen Also werde ich dieses Problem lösen und Ihnen zeigen, wie ich an diese Aufgabe herangehen würde , damit Sie sehen können, wie mein Verstand funktioniert und wie ich dieses spezielle Problem Es ist durchaus üblich , solche Übungen zu sehen , wenn man ein Vorstellungsgespräch führt. Der Interviewer könnte Sie zum Beispiel fragen, wie Sie ein kleines bisschen Software entwickeln , um eine Form oder eine Pyramide oder etwas Ähnliches zu erzeugen eine Form oder eine Pyramide oder etwas Ähnliches Weil jeder Syntax und Code im Internet nachschlagen kann Syntax und Code im Internet Aber was viele Arbeitgeber heutzutage gerne tun, ist zu testen, wie Ihr Verstand funktioniert, zum Beispiel logisches Denken. Sie heraus, ob Sie vor Ort und vielleicht auch unter Druck eine Lösung finden können. Also werde ich eine Lösung dafür entwickeln und Ihnen Schritt für Schritt zeigen, wie ich darüber denke, damit Sie sehen können , wie mein Verstand funktioniert und wie ich dieses Problem angehe. Lass uns gehen. Der erste Schritt besteht darin, das Problem zu analysieren. Wenn der Benutzer eine Zahl eingibt, bezeichnet dies die Höhe der Pyramide Nicht nur die Höhe der Pyramide, sondern auch die Anzahl der Linien, die gezeichnet werden Sie können sehen, dass es hier fünf Linien gibt. Die Pyramide endet, wenn es ein Pfundsymbol gibt, und die Basis der Pyramide bedeckt hier die gesamte Linie. Aber Sie können hier sehen, dass es die Höhe der Pyramide ist, die mit dieser Zahl bezeichnet wird Die Pyramide ist fünf Linien hoch, das ist zu beachten Das zweite, was zu beachten ist, ist, dass all diese Quadrate bevölkert sind. Falls sie hier nicht mit Hashes gefüllt sind, das Pfund-Symbol für die Pyramide Dann werden sie mit dem Hintergrund gefüllt, der durch Bindestriche gekennzeichnet ist. Hier können Sie sehen, dass die Spitze der Pyramide ein Pfundsymbol hat und dann auf beiden Seiten In der nächsten Zeile können Sie sehen, dass die Pyramide um zwei statt um eins zunimmt Hier sind es jetzt drei, und dann gibt es auf jeder Seite einen Bindestrich weniger Auch unten wächst die Pyramide um zwei pro Zeile, und dann schrumpft der Bindestrich Wir haben hier ein paar Regeln. Mit jeder neuen Linie wächst die Pyramide um zwei. Und jede neue Zeile, der Bindestrich, wird auf jeder Seite um eins geschrumpft Eine letzte Bemerkung ist, dass in diesem Beispiel, in dem ich eine Pyramidenhöhe von fünf habe, wir hier neun Zeichen entlang der Breite haben, fünf unten und neun Wir haben eine Menge Daten, mit denen wir arbeiten können. Lassen Sie uns sehen, wie wir eine Lösung für dieses Beispiel entwickeln können. Wenn Sie unseren Tutorials zuvor gefolgt sind, haben Sie vielleicht das Beispiel gesehen, das wir gemacht haben, als wir einen Würfel auf dem Bildschirm gezeichnet haben. Nun, diese Übung ist etwas anders, sie ist etwas komplexer, aber die Prinzipien und Verfahren hinter den Kulissen sind ziemlich ähnlich. In diesem Beispiel verwenden wir einige Schleifen, wir verwenden vier Schleifen. Dieses Beispiel sollte nicht anders sein. Wenn wir in unserem Kopf sich wiederholende Daten wie diese und solche sehen , sollten wir denken: Okay, da muss es sich um eine Schleife handeln. Etwas muss sich in einer Schleife drehen und iterieren, um diese Bindestriche hier zu erzeugen Dann brauchen wir eine weitere Schleife, um dann diese Pfundsymbole zu generieren Und dann vielleicht eine dritte Schleife hier, um mit den Bindestrichen Es gibt ein paar Möglichkeiten, wie wir dieses Problem angehen können. Vielleicht könnten wir eine Schleife haben, in der wir einfach den Charakter gegen den Pyramidenteil austauschen. Ja, das könnte auch funktionieren. Bei der Entwicklung solcher Lösungen. Es gibt eine ganze Reihe von Lösungen für das Problem, aber Sie haben die Wahl. Wenn Sie diese Entscheidung treffen, möchten Sie die einfachste und zeiteffizienteste Entscheidung treffen . Generieren Sie aber auch den Code , der besser wartbar ist, in Zukunft von Ihnen selbst besser wartbar ist, aber von allen Teamkollegen, die Ihren Code tatsächlich übernehmen und ihn in Zukunft entwickeln, besser wartbar Ihren Code tatsächlich übernehmen Es gibt viele Dinge, über die man nachdenken muss. Ich denke, ich würde dieses Problem so angehen , dass eine Hauptschleife entlang der Y-Achse verläuft. Wir haben eine Hauptschleife, die jede Zeile nacheinander generiert. Dann werde ich innerhalb dieser Schleife eine Schleife haben, die diese Bindestriche generiert Eine zweite Schleife, die den Pyramidenteil generiert, und das ist Und dann eine dritte Schleife, die mit diesen Bindestrichen weitergeht, eine Hauptschleife, die die Y-Achse Dann innerhalb dieser Schleife, glaube ich, drei separate Das ist eine perfekte Lösung, um dieses Problem anzugehen. Schauen wir uns das jetzt an und schauen ob wir so etwas entwickeln können. Also hier ist der Code, den wir bisher haben, er macht überhaupt nichts, er gibt nur einige Nachrichten an den Benutzer heißt ihn in der Software willkommen Danke, dass du die App benutzt. Das ist es, was es tut. Und dann stellen wir dem Benutzer die Frage. Wir nehmen die Eingabe des Benutzers, konvertieren sie in eine Ganzzahl und speichern sie in einer Integer-Variablen. Was ich jetzt tun möchte, ich werde eine Methode erstellen. Denn wenn ich eine Methode erstelle, kann ich sie von mehreren Stellen aus mehrmals aufrufen und dann Pyramiden generieren, wo immer ich will Ich denke, die gesamte Logik zum Generieren der Pyramide mit der benutzerdefinierten Größe sollte hier in eine Methode gehören Und dann ist es leicht für alles andere wiederverwendbar. Ich werde eine Methodenvorlage erstellen. Jetzt hat die Methode keinen Rückgabetyp mehr , weil ich nur möchte, dass die Methode die Pyramide zeichnet. Es wird ein Parameter erstellt , und das entspricht nur der Größe der Pyramide. Da ist unsere grundlegende Methode. Als Erstes habe ich gesagt ich eine Schleife erzeugen würde, die jede Zeile nacheinander ausdrucken würde, und zwar entlang der Y-Achse. Ich werde dafür eine Schleife erstellen. Diese Schleife hier steht also für die Höhe der Leinwand. In diesem Fall also die Höhe der Pyramide, da die Pyramide die Oberseite der Leinwand, auf der wir zeichnen, und auch die Unterseite berührt , kann man mit Sicherheit sagen, dass unabhängig von der Zahl , die der Benutzer angibt, die volle Höhe der Pyramide angibt, wir haben keinen Hintergrund über der Pyramide und keinen Hintergrund unter der Pyramide. Wenn Sie die Y-Achse von einer Achse aus nehmen, die kleiner oder gleich der Größe der Pyramide ist, und die um eins erhöht, stellen Sie sicher, dass wir die Pyramide entlang der Y-Achse zeichnen , die nach unten verläuft. In dieser Schleife habe ich erwähnt, dass eine mögliche Lösung darin besteht , drei separate Schleifen zu haben Die erste, um die Bindestriche auf der linken Seite zu zeichnen, die zweite, um die Pyramide zu zeichnen, und die dritte, um mit den Bindestrichen auf der rechten Seite fortzufahren Lassen Sie mich diese Loops jetzt einrichten, ohne wirklich darüber nachzudenken Zum Beispiel habe ich bereits diese nette Vorlage. Ich habe diese Vorlage gerade generiert nur logisch über das Problem nachgedacht Ich brauche eine Schleife, um nach unten zu zeichnen, um der Größe der Pyramide zu entsprechen Dann brauche ich in jeder Zeile etwas, das die Pyramide und den Hintergrund auf jeder einzelnen Linie erzeugt das die Pyramide und den Hintergrund auf jeder einzelnen Linie Ich habe hier schon eine nette kleine Vorlage , ohne wirklich zu viel über das Problem nachzudenken. Wenn wir die Bindestriche auf der linken Seite zeichnen, wollen wir nur einen Bindestrich auf dem Bildschirm ausgeben Lass uns das jetzt machen. In ähnlicher Weise zeichnen wir, wenn wir die Bindestriche auf der rechten Seite zeichnen, einen In ähnlicher Weise benötigen wir beim Zeichnen der Pyramide das Pfundsymbol So ziemlich das Einzige, was wir jetzt tun müssen , ist herauszufinden, wann diese Schleifen enden. Als wir uns das Beispiel zuvor angesehen haben und der Benutzer zum Beispiel die Zahl fünf eingegeben hat, dann hatte die Pyramide eine Breite von neun, aber eine Höhe von fünf. Die allererste Zeile der Pyramide hatte ein Pfundsymbol, aber sie hatte vier Bindestriche auf jeder Seite Wir müssen herausfinden, wann wir aufhören sollen, Bindestriche zu zeichnen. Um herauszufinden, wann wir aufhören müssen, Bindestriche auf der linken Seite zu zeichnen, müssen wir herausfinden, wann wir diese Vorderschleife beenden müssen Ebenso, wie breit wir die Pyramide auf jeder Seite zeichnen sollten und wann wir aufhören sollen, Bindestriche auf der rechten Seite zu zeichnen Und wenn Sie solche Software entwickeln, werden Sie an manchen Tagen ultimative Klarheit haben Das wird für Sie einfach sein, Sie geben einfach die Werte ein. Weißt du, du hast einen schönen Tag. Aber manchmal, wenn ich einfach müde bin oder nicht in der richtigen Einstellung oder du vielleicht ein Anfänger bist und weißt, dass du es irgendwie in deinem Kopf durcharbeitest Nun, dann ist es keine Schande, so etwas wie Microsoftic Cell oder einen Notizblock zu verwenden , nur um all Ihre Zahlen aufzuzeichnen , damit Sie dann Ihren freien Gehirnraum nutzen können, um eine Lösung für das Problem oder vielleicht etwas anderes auszuarbeiten das Problem oder vielleicht Es ist also keine Schande, Knoten oder ähnliches zu erstellen , das ist völlig normal Lassen Sie mich Excel öffnen und einige dieser Zahlen hier zeichnen. Ich habe Microsoftic Cell hier geöffnet und die Lösung hier abgebildet Nun, unerwartete Lösung. Wie dem auch sei, wenn der Benutzer zum Beispiel die Zahl Fünf eingibt, dann wissen wir, dass unsere Pyramide fünf Einheiten hoch sein wird. Wenn der Benutzer fünf eingibt, wird eine Pyramide generiert , die ungefähr so aussieht. Die Lösung, die wir bisher entwickelt haben. Ich habe eine Schleife, die jede Zeile nacheinander druckt. Das ist unsere Hauptschleife. Wir haben das mit y bezeichnet. Sie können hier sehen, dass ich es gerade die Variable y genannt habe, y ist gleich eins Und es reicht bis zur Größe der Pyramide. Weniger oder gleich dem, was ich tun werde. Ich werde die Variable y genau hier platzieren. Das nächste Ding in dieser Schleife, ich habe drei Schleifen. einer Schleife wird dieser Inhalt generiert, der nächsten Schleife wird dieser Inhalt generiert und in der dritten Schleife wird dieser Inhalt generiert. Ich werde das auch hier drüben hinstellen. Das wird der erste Satz von Bindestrichen sein. Das wird die Pyramide sein, und das ist der zweite Satz von Jetzt, wo y eins ist, ist dies das erste Mal, dass unsere Schleife eine Schleife wiederholt Wir wollen vier Bindestriche auf der linken Seite erzeugen, wir wollen ein Zeichen für die Pyramide und auch vier Bindestriche auf der rechten Seite erzeugen, wenn Jetzt wiederholt sich unsere Schleife zum zweiten Mal, wir generieren diese Zeile Unsere erste Schleife wird drei Bindestriche erzeugen. Unsere zweite Schleife wird drei Segmente für die Pyramide generieren Auch hier werden die Bindestriche auf der rechten Seite gleich sein, dann drei und dann die dritte Zeile Sie können sehen, wohin das führt, zwei, die Pyramide wird fünf sein und die Bindestriche zwei, dann Zeile Nummer vier und Zeile Nummer Ich werde es einfach ausfüllen. Jetzt können Sie hier einige Zahlen darüber sehen , wie viele Zeichen für jede Iteration der Schleife gedruckt werden für jede Iteration der Schleife gedruckt Damit können Sie nun herausfinden, was Sie tun müssen. Sie haben mehr Klarheit in Ihrem Kopf. Sie müssen sich diese Zahlen nicht merken. Sie können Ihre Gehirnleistung darauf beziehen , über eine Lösung für das Problem nachzudenken Schauen wir uns an, wie wir eine Lösung für dieses Problem finden. Wenn der Benutzer die Zahl fünf eingibt, entspricht fünf der Größe unserer Pyramide. Unsere variable Größe, die in unsere Methode einfließen wird, wird fünf sein, wenn die Schleife zum ersten Mal ausgeführt wird. Denken Sie daran, dass y unsere Schleife ist. Wenn die Schleife zum ersten Mal ausgeführt wird, ist y gleich Eins. Wir können sehen, dass, wenn y eins ist, die Anzahl der Bindestriche auf jeder Seite hier eins geringer ist als die Größe der Pyramide die Schleife zum zweiten Mal ausgeführt wird, können Sie sehen, dass die Bindestriche auf jeder Seite um zwei kleiner sind als die Größe der Pyramide Eine kleine Regel finden Sie hier. Sie können sehen, dass wir, wenn die Größe fünf ist und wir eins von der Größe subtrahieren, die Anzahl der Bindestriche auf jeder Seite erhalten Wenn Y 25 ist, zwei wegnehmen ist 35, drei wegnehmen Sie können sehen, um die Anzahl der Bindestriche auf jeder Seite Wir nehmen die Größe der Pyramide in diesem Beispiel als fünf und subtrahieren Y davon Das gibt uns die Anzahl der Bindestriche auf jeder Seite. Schauen wir uns die Generierung dieser Bindestrichschleifen an. Dies sind die beiden Schleifen, die die Bindestriche hier links und auch rechts erzeugen die Bindestriche hier links und auch rechts Wir sagten, dass die Anzahl der Bindestriche für jede Zeile der Gesamtgröße der Pyramide entspricht Und wir subtrahieren Y davon. Wir sagen einfach Größe minus Y. Um die Übersichtlichkeit zu erhöhen, setzen wir dort Klammern ein, das erhöht die Lesbarkeit. Ich bin ziemlich zuversichtlich Jetzt geben wir für jede Zeile die richtige Anzahl von Bindestrichen auf der linken und auch auf der rechten Seite Viele Entwickler neigen dazu, die Anwendung frühzeitig auszuführen Dafür gibt es mehrere Gründe. Erstens können Sie sehen, ob Ihre letzte Änderung korrekt war. Und zweitens können Sie sich einfach den aktuellen Status der Anwendung ansehen. Wenn überhaupt, macht es Ihnen ein bisschen mehr Freude zu sehen, was Sie bereits getan haben. Lass uns einen Blick darauf werfen. Jetzt rufen wir tatsächlich die Methode auf, jetzt nehmen wir die Nummer des Benutzers. Wir rufen die Methode und dann wird diese Methode ausgeführt. Schauen wir uns die bisherigen Ergebnisse an. Wenn ich die Zahl fünf eintippe, können Sie jetzt sehen, dass sich alles in einer Zeile befindet . Also warum ist das so? Das liegt daran, dass wir nach all diesen drei Schleifen nicht wirklich eine brandneue Leitung ausgeben Auch hier gibt es ein kleines Problem. Jedes Mal, wenn wir ein Zeichen ausgeben, geben wir eine brandneue zweite Zeile Das ist auch ein Fehler. Jedes Mal, wenn wir ein Zeichen ausgeben, wollen wir keine neue Zeile schreiben, wir wollen nur dieses Zeichen schreiben. Also verwenden wir die Konsole, um das zu tun , wenn wir eigentlich eine neue Zeile wollen. Nun, dann machen wir das nach all diesen Loops. Schauen wir uns jetzt die Anwendung an und sehen, wie sie aussieht. Sie können jetzt also sehen, dass wir eine Art Rumbusform haben. Es sieht ziemlich interessant aus, aber Sie können sehen, dass die Anzahl der Bindestriche korrekt Wir beginnen mit 43210. Jetzt müssen wir diesen mittleren Teil hier reparieren , der die Pyramide ist Schauen wir uns an, wie das geht. Ich gehe zurück zu Excel, ich bin wieder in Excel. Jetzt möchte ich herausfinden, wie diese Zahlen anhand unserer verfügbaren Informationen generiert werden können. Wir haben die Größe der Pyramide und wir haben auch den Wert von y. Bei jeder Iteration der Schleife haben wir bereits die Anzahl der Bindestriche für jede Zeile berechnet Das sieht ziemlich einfach aus, aber wie generieren wir diese Zahl anhand der Informationen, die wir in Zeile eins haben Hier ist die Pyramide ein Zeichen, Sie können dort in Zeile zwei sehen, die Pyramide besteht aus drei. Sie können sehen, dass die Pyramide in jeder neuen Zeile um zwei Pfund-Symbole zunimmt, 13579, hier sind das alles ungerade Zahlen Wie können wir diese Zahlen anhand der Informationen, die wir hier haben, generieren anhand der Informationen, die wir hier haben Für diejenigen unter Ihnen, die gut in Mathematik sind, ist es wahrscheinlich ziemlich einfach für Sie, aber manchmal sind Entwickler heutzutage nicht wirklich gut in Mathematik. Vielleicht war es in den 70ern und 80ern alle Mathematiker und Ärzte ein bisschen programmierten, ziemlich offensichtlich, aber heutzutage ist es IT-Programmierung Es ist eine eigenständige Fähigkeit, manchmal lässt sie sich nicht direkt in die Mathematik übertragen Aber wenn Sie hier bei diesem Y-Wert etwas bemerken, nehmen wir die Zahl Drei. Wenn wir zum Beispiel drei mit zwei multiplizieren, erhalten wir sechs. Und dann subtrahieren wir eins davon, dann erhalten wir den Wert fünf Nochmals, vielleicht vier. Zum Beispiel vier mal zwei ist acht. Eins subtrahieren ist 75 mal zwei ist zehn, subtrahieren eins ist neun Und ich denke, das ist eine Regel, die im gesamten Feld funktionieren könnte , aber wir sollten in solchen Fällen immer mit 1,0 testen Eins mal zwei ist 21 ist eins. Ja, das scheint auch zu funktionieren. Ich denke, das könnte eine Regel sein, die funktioniert. Was wir sagen können ist, dass p gleich y multipliziert mit zwei ist , nimm eins weg. Das ist eine Regel, die für die Generierung der Pyramide auf der Grundlage der Zeilennummer selbst funktionieren sollte der Pyramide auf der Grundlage der Zeilennummer selbst Es gibt vielleicht noch viel mehr Lösungen für dieses Problem, aber diese ist sicherlich eine, die für uns funktionieren würde, basierend auf y hier. Zurück zu unserer Software Hier haben wir den Wert von y bei jeder Iteration der Schleife Was wir hier machen, wir wollen zum Beispiel die Pyramide auf jeder Linie erzeugen , wenn y gleich drei ist Dann wollen wir fünf dieser Pfund-Symbole erzeugen. Hier haben wir gesagt, dass Y mit zwei multipliziert und dann eins davon subtrahiert Es würde ungefähr so aussehen. Ich glaube, das würde funktionieren, aber um ein bisschen Klarheit zu schaffen, verwende ich immer zusätzliche Klammern wie diese. Es macht es nur lesbarer sodass wir sehen können, was vor sich geht. der Gebote würden Sie damit aber genau das gleiche Ergebnis erzielen Aufgrund der Masse der Gebote würden Sie damit aber genau das gleiche Ergebnis erzielen, weil Multiplikation vor Subtraktion kommt Aber in solchen Fällen würde ich es immer so schreiben Schauen wir uns zum Beispiel jetzt das Beispiel an und sehen, was vor sich geht. Wenn wir die Zahl fünf ausgeben, die Zahl fünf eingeben, können Sie sehen, dass wir jetzt eine schöne Pyramide erhalten. Das ist ziemlich cool, nicht wahr? Funktioniert das für größere Zahlen? Sagen wir 35. Das sieht ziemlich gut aus. Ja, es sieht so aus, als ob es funktioniert. Sie können sehen, so würde ich ein Problem bei so etwas angehen. Wir haben so ziemlich 90% des Codes geschrieben , indem wir nur das Problem analysiert haben. Wir mussten nicht wirklich über C Sharp und Programmierung nachdenken . Wir haben uns buchstäblich nur die Pyramide angesehen, das Problem ein wenig analysiert und es in kleinere Teile aufgeteilt Das Einzige, was schwierig war, war, die Grenzen für diese vier Schleifen herauszufinden Also, wie viele Bindestriche wir zeichnen sollten, wie viel von der Pyramide wir auf jeder Linie zeichnen sollten, und wieder die Bindestriche auf der rechten Seite Und auch eine kleine Komplikation bei neuen Linien und solchen Dingen, was Manchmal macht jeder Fehler, das ist normal. Aber Sie können sehen, wie wir diese Probleme isoliert und Microsoft Excel verwendet haben, um die Zahlen zu berechnen, sodass wir all diese Informationen nicht wirklich im Kopf behalten mussten. Wir können das Problem einfach hier nehmen, alles zerlegen, alle Zahlen berechnen und dann müssen wir nur noch herausfinden, wie wir diese Zahlen aus den Informationen, die wir haben, erhalten , entweder der Höhe der Pyramide oder dem Wert von y bei jeder Iteration der Schleife So können Sie sehen, wie wir das Problem gelöst haben, ohne wirklich darüber nachzudenken Wir haben nicht wirklich Gehirnleistung genutzt. Alles, was uns in den Sinn kam, wurde in Excel abgelegt und wir können daraus quasi eine Lösung finden So würde ich eine Situation wie diese angehen. Vor allem, wenn ich wirklich müde oder verkatert wäre und nicht denken könnte, dann, du weißt schon, lass die Tools die Arbeit für dich erledigen. zurück zu Visual Studio kommen Wenn wir jetzt zurück zu Visual Studio kommen, zeichnen wir ziemlich coole Pyramiden Wir können den Hintergrund sogar durch einen schönen leeren weißen Bereich ersetzen durch einen schönen leeren weißen Bereich Und vielleicht können wir zwei Pyramiden zeichnen. Ich meine, wir haben es in eine Methode gesteckt, sodass wir die Methode jetzt viel einfacher wiederholen können Und das ist die Macht der Methoden. Wenn ich jetzt zum Beispiel die Zahl fünf einfüge, erzeugen wir jetzt drei Pyramiden übereinander Das ist ziemlich cool, nicht wahr? Wie dem auch sei, so würde ich ein Problem wie dieses angehen. Auch dies ist eine häufige Sache, die Sie in Vorstellungsgesprächen finden können. Aber die eigentliche Stärke eines Programmierers besteht darin, logisches Denken auf die Probe zu Wie funktioniert dein Verstand? Ein guter Programmierer ist niemand, der sich Syntax merken und Informationen wiedergeben kann . Ein guter Programmierer ist jemand , der logisch denken, ein Problem aufschlüsseln und eine passende Lösung finden kann ein Problem aufschlüsseln und eine passende Lösung und Das ist es, was ein guter Programmierer ausmacht. Ich hoffe, Sie fanden diese Übung nützlich und danke Ihnen fürs Zuschauen 53. 10-2. Lösungen, mehrere Projekte und Namespaces: In diesem Tutorial zeige ich Ihnen , wie Sie mehrere Projekte in Visual Studio einrichten Ich werde ein wenig über die Terminologie wie Lösungen, Projekte, Assemblys und auch über Namensräume sprechen . Ich kann Ihnen auch zeigen, wie Sie auf Dateien aus verschiedenen Assemblys zugreifen können. Dies wird in Zukunft sehr nützlich sein. Wenn wir Visual Studio öffnen, können wir hier diesen Dialog führen in dem wir ein brandneues Projekt erstellen können. Hier klicken wir darauf und dann erstellen wir einfach eine Konsolenanwendung. Wenn ich hier auf Weiter klicke , werde ich nach dem Namen meines Projekts gefragt. Da ich mich hier für eine Konsolenanwendung entschieden habe, handelt es sich um eine grafische Benutzeroberfläche, die dem Benutzer möglicherweise angezeigt wird. In ähnlicher Weise könnten Sie eine Windows Forms-Anwendung haben, die ebenfalls Gooey ist Dies sind jedoch die Projekte mit grafischer Benutzeroberfläche, da sie ein Fenster haben, das wir sehen können, wenn wir dieses Projekt benennen ist es beispielsweise üblich, In Anwendungen ist es beispielsweise üblich, eine so genannte dreischichtige Architektur zu haben , bei ein Projekt die Oberfläche darstellt. Vielleicht hätte es auf einer Website, die über eine HTML-Konsolenanwendung verfügt, über eine HTML-Konsolenanwendung verfügt, das schwarze Fenster und jegliche Logik, die damit zu tun hat. Und dann haben Sie eine mittlere Ebene, manchmal auch Geschäftsebene genannt , und sie enthält alle Hintergrundberechnungen, die gesamte Logik, alles, was mit den Gehirnen der Anwendung zu tun hat. Und vielleicht ist die dritte Ebene wie eine Datenbank, in der es um all die Daten geht. Die Fähigkeit, Daten aus einer Datenbank abzurufen. Weißt du, vielleicht ist es mit einer Oracle-Datenbank oder einer SQL-Datenbank gekoppelt . Also alles, was mit der Datenschicht zu tun hat. Dies ist allgemein als dreischichtige Architektur bekannt. Wenn Sie dieses Projekt in C Sharp hier in Visual Studio erstellen , erstellen wir zuerst den Typen hier. Und das ist die Konsolenanwendung in diesem Beispiel. Also werde ich es so etwas nennen. Normalerweise ist das, was ich und andere Softwarefirmen tun, wenn man den Typ kreiert, man den Typen in den Namen des Projekts einfügt. Wenn das Projekt zum Beispiel Test App heißt, siehst du vielleicht so etwas, wie Test App Guy. Oder teste einen Typen. Oder vielleicht ein Typ, der Ap testet, so ähnlich. Anhand des Namens weißt du sofort, dass du es mit dem Typen zu tun hast, der grafischen Benutzeroberfläche. Also werde ich zum Beispiel einfach Apoe testen. Sie müssen es nicht so machen, aber das ist eine gute Praxis und es ist auch weit verbreitet Wenn Sie Ihre Bemühungen fortsetzen, werden Sie das ziemlich oft sehen Ich werde das Projekt jetzt erstellen. Hier haben wir unseren Mann. Es macht nicht wirklich viel. Es ist nur ein schwarzes Fenster, das sofort geschlossen wird. Aber dieses Projekt hier, wenn wir nach rechts rüberkommen, steht dieses Projekt für alles, was mit unserem Mann zu tun hat. Alles grafische, was der Benutzer sehen könnte, alles, was mit dem Typen zu tun hat, all das ist hier enthalten. Sie können hier oben sehen, dass wir eine Lösung haben. Jetzt kann die Lösung eine Reihe von Projekten enthalten, vielleicht 102030, und wir können hier verschiedene Projekte hinzufügen Lassen Sie uns zum Beispiel eine Geschäftsebene erstellen. Und das wird zum Beispiel den ganzen Code, die gesamte Logik, alle Berechnungen enthalten. Auch hier gilt: Wenn es sich bei der Erstellung einer Lösung nur um ein kleines Testprojekt handelt, zum Beispiel sehr klein, vielleicht machen Sie nur ein kurzes Modell, dann ist es ziemlich ehrgeizig, eine dreischichtige Architektur zu haben . Es wird vielleicht nicht benötigt, aber wenn Sie im Voraus wissen es sich um ein großes Projekt dass es sich um ein großes Projekt handelt oder um etwas, das mit einer Datenbank kommunizieren oder sehr komplex sein könnte . Dann müssen Sie Ihre Architektur berücksichtigen, bevor Sie mit der Erstellung eines weiteren Projekts beginnen. Jetzt werden wir die Geschäftsebene erstellen. Wenn ich also mit der rechten Maustaste auf die Lösung Hinzufügen klicke, kann ich hier zu einem neuen Projekt wechseln. Und bei der Auswahl der Projekte habe ich meinen Typ schon hier, diese Konsolenanwendung. Also ich will nicht wirklich noch eine, besonders jetzt, vielleicht in der Zukunft. Das hängt von meinen Bedürfnissen ab. Jeder hat unterschiedliche Bedürfnisse. Aber etwas für eine Geschäftsebene, in der Sie Code haben und so ziemlich nur reinen Code. Dann willst du etwas, das als Klassenbibliothek bezeichnet wird. Wenn ich hier auf Weiter klicke, kann ich die Klassenbibliothek wieder aufrufen, wie ich will. Aber wenn meine Anwendung so als Test-App bezeichnet wird, haben wir vielleicht so etwas wie B L eine Geschäftsschicht oder LL eine Geschäftslogikschicht oder so etwas Ähnliches. Etwas, das eine andere Ebene in der Anwendung darstellt . Normalerweise würde ich zum Beispiel gerne Business Layer verwenden. Dann würde dieses Projekt all die geschäftlichen Dinge beinhalten, wie die geschäftliche Seite des Systems, wenn Sie das hier sehen. Jetzt haben wir zwei Projekte. Wir haben unsere grafische Benutzeroberfläche. Jetzt haben wir hier unsere Geschäftsebene, die all die Berechnungen und solche Dinge enthalten wird . Wenn ich jetzt schreibe, klicken Sie zum Schluss noch einmal auf die Lösung. Ich könnte so etwas wie eine Datenschicht hinzufügen, vielleicht ein Datenbankprojekt oder etwas Ähnliches. Es könnte auch eine andere Klassenbibliothek sein die die Datenschicht darstellt. Etwas ganz Ähnliches. Man könnte Dow für Datenzugriffsebene sagen oder etwas, das mit Daten zu tun hat. Oder sogar DB für Datenbank. Es ist nicht wirklich wichtig. Ich könnte es so etwas nennen. Dann würde dieses letzte Projekt hier, dieses dritte, alles repräsentieren, was damit zu tun unsere Lösung an eine potenzielle Datenbank zu binden, ob es nun Oracle, SQL, meine CQL oder so etwas ist , es spielt keine Rolle Und jetzt haben wir drei Projekte. Nun, Architektur, es stehen so viele Architekturen zur Verfügung, wenn man Software entwickelt, wie beim Bau eines Gebäudes Es gibt nicht den einen Weg , ein Gebäude zu bauen. Es gibt so viele verschiedene Möglichkeiten, aber dieser ist sehr beliebt. Was passiert, ist, wenn Sie vielleicht 50 Leute in Ihrem Team haben, Sie arbeiten für ein Unternehmen. Einige Leute werden sich zum Beispiel mit HTML auskennen , aber sie werden in diesem Projekt vielleicht nichts über eine Datenbank oder komplexe C-Sharp-Berechnungen wissen vielleicht nichts über eine Datenbank . Was also passiert ist, dass sie nur an diesem Projekt arbeiten werden. Ebenso werden Sie, wenn Sie ein Datenbankfan sind, nur an diesem Datenbankprojekt hier arbeiten. Trennung Ihrer Lösungen nach verschiedenen Projekten hilft auch bei der Teamarbeit und ähnlichen Dingen. Nur Personen, die sich beispielsweise mit der Datenbank auskennen , würden mit diesem Datenbankprojekt arbeiten. Das ist quasi ein Teil der Argumentation dahinter. Wie komme ich zum Beispiel mit meinem Projekt hierher? Dieser Typ, wie bringe ich ihn dazu, mit diesem Projekt zu sprechen? Weil ich standardmäßig drei Projekte hier unter der Lösung hinzugefügt habe , aber keines von ihnen kommuniziert miteinander. Wie erreichen wir das? Wenn ich zu meiner grafischen Benutzeroberfläche gehe, zum Beispiel diesem Projekt hier, gehe ich hier zu Abhängigkeiten. Je nach Version von Visual Studio ist dies die neueste Derzeit heißt es Abhängigkeiten. Wenn Sie eine ältere Version haben, könnte es Verweise oder ähnliches heißen. Wenn Sie mit der rechten Maustaste darauf klicken und zu Projektreferenz hinzufügen gehen. Wenn ich das mache, erscheint ein Fenster. Jetzt kann ich alle Projekte in meiner Lösung sehen , wie in diesem Menü auf der linken Seite Hier möchte ich die Projekte überprüfen , die ich meinem Mitarbeiter zuordnen möchte, sagen wir, ich möchte mit meiner Geschäftsebene sprechen , wo alle Berechnungen durchgeführt werden Ich überprüfe das einfach dort und drücke OK. Und jetzt, intern, meine grafische Benutzeroberfläche, kann das jetzt im Wesentlichen mit diesem Projekt hier kommunizieren, der Geschäftsebene, auf der alle Berechnungen durchgeführt werden. Lassen Sie uns hier ein Beispiel einbauen , damit wir einfach etwas tun können. Es wird nicht viel bewirken. Richten Sie hier eine sehr einfache Methode innerhalb der sogenannten Geschäftsebene ein. Und das wird einfach die Zeichenfolge hello zurückgeben. Das ist alles, was es tun wird. Ich nenne es Hallo. Ich nenne es Hello Class. In unserer Geschäftsebene hier drüben habe ich einen Kurs namens Hello Class. Es hat eine Methode, und alles, was diese Methode tut, ist die Zeichenfolge hello zurückzugeben. Wenn ich jetzt hier zu meinem Projekt mit grafischer Benutzeroberfläche zurückkehre , teste App Guy und ich tippe zum Beispiel Hello Class ein. Sie können sehen, dass es nicht einmal in dieser Liste steht, aber ich habe das Projekt tatsächlich auf dieses verwiesen. Warum kann ich nicht darauf zugreifen? Nun, hier kommen Namespaces ins Spiel. Wenn Sie diese Tutorials bisher verfolgt haben, werden Sie diesen Schlüsselwort-Namensraum ziemlich häufig sehen, fast in jeder Datei. Und dann hat es einen Namen. In der Regel wird der Name des Namespace automatisch aus dem Namen des Projekts generiert. Zum Beispiel heißt dieses Projekt hier Test App Guy. Aber wenn ich zu meiner Geschäftsebene übergehe, meinem Geschäftsprojekt, das ich erstellt habe, können Sie sehen, dass es hier den Namen des Projekts übernommen hat. Geben Sie jetzt den Namensraum ein. Es ist einfach eine logische Art, Dinge zu organisieren. Wir haben zum Beispiel schon einmal über den Mathematikunterricht gesprochen , in dem wir Mathe-Kunst machen, absolute Kunst oder Quadratwurzel oder so. Aber wenn ich mit der Maus darüber fahre, kannst du sehen, dass sie zu einem Namensraum namens System gehört , genau hier. Wenn ich ein neues Projekt in Visual Studio erstelle, erhalte ich standardmäßig einige Namensräume All diese Namensräume hier, diese sieben, werden mir standardmäßig zur Verfügung gestellt. Im Grunde kann ich jeden Code verwenden, den Microsoft mir zur Verfügung gestellt hat und der in einem dieser Namensräume hier enthalten ist , so wie ich hier einen Namespace mit einem Namen habe Und ich habe etwas Code hier drin. Standardmäßig kann ich jeden Code in einem dieser Namensräume verwenden . Das ist dem , was wir hier haben, sehr ähnlich. Was ich tun muss, nun, ich muss mit dem Namensraum sprechen , in dem ich diese Methode definiert habe, weil das momentan nicht der Fall ist. Hier. Sie können sehen , wo wir die Methode definiert haben, in einem Namespace namens Test App PL. Wenn ich das kopiere, gehe ich zurück zu meiner Charakterebene, genau hier, genau hier oben, ich verwende ein spezielles Wort namens Benutzen was? Wenn Sie Does verwenden, können Sie einen anderen Namensraum verwenden. Wenn ich hier einfach diesen Namensraum einfüge, gefolgt von einem Sam-Dolon, wenn ich hello class eintippe, können Sie jetzt sehen, dass ich Zugriff darauf habe, im Wesentlichen, indem ich diesen Namensraum verwende. Ich habe Zugriff auf alles in diesem Namensraum, in dieser Datei. Ich hoffe, das macht jetzt Sinn, denn die Hello-Klasse ist im Test im B L-Namespace definiert, wie Sie hier sehen können, sie sich im Namespace Ich kann auf alle Funktionen zugreifen. Ich werde hier eine neue Instanz der Hello-Klasse erstellen . Jetzt kann ich Hallo sagen und Hallo zurückgeben. Und das wird mir die Saite besorgen. So kann ich mit einer anderen Klasse in einem anderen Namensraum sprechen , sich in einem anderen Projekt befindet. Der ultimativen Klarheit halber Wenn ich hier zu meiner Lösung komme, gehe ich hier zu meiner Test-App-Business-Ebene. Und ich gehe hier zum Beispiel zu einem Kurs. Man kann sagen, dass es den Standard-Namensraum hat. Wenn ich eine brandneue Klasse erstelle, klicke ich mit der rechten Maustaste auf Neue Klasse hinzufügen. Ich nenne es, wie ich will, es spielt keine Rolle. Sie können wieder sehen, dass es denselben Namensraum hat , weil es aus dem Projekt stammt. Es spielt keine Rolle, wie viele Klassen ich erstelle. Standardmäßig wird der Name des Projekts für den Namespace verwendet. Sie können den Namespace jedoch nach Belieben umbenennen . Sie können sehen, dass das die Macht von Namespaces ist. In Shop können Sie verschachtelte Namespaces haben, zum Beispiel einen Namespace innerhalb eines Namespace, Namespace innerhalb eines Namespace was in Visual Studio durchaus üblich ist. Sie können sehen, dass sich darin ein Namespace namens System befindet. Es gibt einen namens Collections. Darin gibt es eine, die als generisch bezeichnet wird. Stellen Sie sich einen Namensraum als eine Möglichkeit vor, Dinge zu gruppieren Wenn Sie etwas innerhalb eines Projekts haben, das mit einem Projekt zu tun hat, Ihren gesamten Code, zum Beispiel auf der Geschäftsebene, dem Herzstück der Anwendung, dann ist das ein Projekt, eine Assembly zum Beispiel In diesem Projekt haben Sie jedoch möglicherweise unterschiedliche Dinge. Zum Beispiel haben Sie vielleicht einen Teil des Projekts, um die Fläche eines Hauses oder etwas Ähnliches zu berechnen, aber innerhalb dieses Projekts haben Sie vielleicht etwas ganz anderes, wie die Berechnung einer Steuererklärung. Aber vielleicht müssen diese beiden Dinge aus irgendeinem Grund innerhalb desselben Projekts existieren. Und in diesem Fall würden Sie sie logischerweise in einem anderen Namensraum gruppieren Also alles, was mit der Arbeit im Bereich eines Hauses zu tun hat, könnte man den einen Namensraum nennen und den anderen für Steuererklärungen oder was auch immer. Das Beispiel könnte alles sein und das könnte ein anderer Namensraum sein Sie gruppieren also logisch vielleicht nach einer Aktivität oder einer Funktion oder was auch immer Sie entscheiden, wenn Sie an Projekte denken denken Sie an Architektur, wie Sie Ihre Lösung strukturieren Aber wenn Sie an Namespace denken, denken Sie an logischere Dinge, wie zum Beispiel, wie Sie ähnliche Codeteile gruppieren Und das ist in diesem Fall irgendwie der Unterschied. Also werde ich Ihnen nur noch eine Sache in Bezug auf mehrere Projekte und Baugruppen und solche Dinge zeigen noch eine Sache in Bezug auf mehrere Projekte . Nun, das ist ein ziemlich kompliziertes Thema, wirklich ein ziemlich umfangreiches Thema. Aber was ich Ihnen zeige, reicht aus, um den Rest dieser Tutorials gewissermaßen zu verfolgen. Aber nicht nur das, sondern wenn Sie Ihre eigenen Lösungen und Projekte starten, haben Sie eine allgemeine Vorstellung davon wie Sie die Dinge strukturieren sollen. Und auch, wie Sie Ihren Code organisieren, was sehr wichtig ist, je größer Ihre Projekte werden. Wenn wir nun hierher kommen, haben wir hier unsere Lösung mit unseren drei Projekten darunter. Jetzt stellt sich jedes von ihnen wie eine Baugruppe dar. Es ist ein Wort, das Sie oft hören werden, aber wenn Leute über Assemblys und den internen Zugriffsmodifikator sprechen , dann ist es Teil der Assembly, die normalerweise durch ein Projekt repräsentiert wird Ein Projekt pro Baugruppe. Wenn ich jetzt hier zu dieser grünen Play-Schaltfläche komme , wenn ich darauf klicke, wird unsere Lösung kompiliert, alle unsere Projekte werden kompiliert und für jedes unserer Projekte wird eine Assembly erstellt. Wenn ich jetzt zu meinem Dateisystem gehe, verwende ich jetzt ein Fenstersystem für das Guy-Projekt hier. Es macht genau hier eine EXE-Datei. Auch hier einige verschiedene Dateien damit. Sie können aber auch sehen, dass hier für jedes unserer Projekte tatsächlich eine DLL-Datei erstellt wird. Das sind hier sogenannte Assemblys, weil wir in diesem Fall drei Projekte haben, wir haben hier auch drei Assemblys. Sie können hinter die Kulissen schauen und sehen wie dies in der realen Welt dargestellt wird. Wenn Sie diese Software an Ihre Freunde weitergeben oder sie vielleicht in eine Einrichtungsdatei packen, können Sie hier sehen, wie diese Projekte als Binärdateien dargestellt werden , normalerweise eine für jedes Projekt. Eine Sache, die ich erwähnen werde, ist, dass es eher optional ist, das Schlüsselwort using hier oben zu haben eher optional ist, das Schlüsselwort using hier oben , wenn ich mich entscheide, es zu entfernen Sie können zum Beispiel sehen , nicht mehr funktionieren wird , weil es den Namensraum, in dem diese Klasse enthalten ist, nicht finden kann . Was wir in diesem Fall tun können, ist es einfach mit dem Namespace zu qualifizieren. Jedes Mal, wenn ich die Hello-Klasse verwende, muss ich dem System mitteilen, wo sie sich befindet, Beispiel in welchem Namensraum sie sich befindet. In diesem Fall kann ich es mit dem Namensraum vor dem Klassennamen qualifizieren . Aber wenn ich diese Klasse in dieser Datei vielleicht 1020 Mal verwende , werde ich hier eine Menge redundanten Codes haben Anstatt das zu tun, kann ich all diese entfernen und einfach den Namensraum oben in der Datei verwenden Und dann muss ich es nicht mehr jedes Mal qualifizieren, wenn ich es benutze. Das ist also ein Vorteil der Verwendung des Namespaces hier, NC Sharp 54. 11-1. Breakpoints und Code-Stepping: Debuggen, Debuggen in C Sharp. Was ist Debuggen Wenn Sie meinem Tutorial bisher gefolgt sind, haben wir mit der Sprache C Sharp gearbeitet, wir haben viele verschiedene Dinge getan Objektorientierung, Schleifen, Berechnungen, Methoden. Aber bei diesen Übungen zum Beispiel und bei der Arbeit mit der Sprache ist es so, dass Menschen Menschen sind. Sie werden Fehler machen, ob es nun beabsichtigt oder unbeabsichtigt oder einfach nur ein Diese Dinge passieren. Hier kommt das Debuggen ins Spiel Debuggen ist jetzt ein lockerer Begriff. Das Wort Debuggen wird in zwei verschiedenen Bedeutungen verwendet. Wir können sagen, okay, ich werde ein bisschen debuggen, und das ist der Prozess , bei dem versucht wird, Fehler zu finden Vielleicht hat Ihre Software keine Fehler, aber Sie werden versuchen , welche zu finden, nur um sicherzugehen , dass sie richtig funktioniert. Das ist ganz normal. Sie können den Begriff Debuggen auch verwenden, wenn Ihre Software ein Problem hat und Sie versuchen, das Problem zu lokalisieren Sie würden also sagen, ich werde versuchen, meine Software zu debuggen, weil ein Fehler aufgetreten ist Ich weiß nicht, wo es ist, aber ich muss versuchen, es zu finden. Es wird hier also in zweierlei Hinsicht verwendet. Also, wie ich schon erwähnt habe, Tatsache ist, dass niemand perfekt ist. Wenn jeder perfekt wäre, würden Softwareunternehmen nicht einmal Testteams für die Durchführung von Tests einstellen. Sie hätten keine sogenannten Unit-Tests. Sie müssten Ihren Code nicht testen. Aber Tatsache ist, dass wir nicht perfekt sind. Und deshalb müssen wir uns mit Debugging auskennen und versuchen, Fehler in unserer Software zu finden Bisher haben wir in dieser Tutorial-Reihe Visual Studio verwendet Jetzt ist Visual Studio großartig. Es enthält viele Tools und Funktionen, und um ehrlich zu sein, haben wir kaum die Oberfläche erkratzt Es hat einen Compiler, der unseren Code kompiliert. Es hat die IDE, in die wir tatsächlich tippen können , um Projektlösungen zu erstellen Es hat diese Autocomplete-Funktion, auch bekannt als Intellisense So viele verschiedene Dinge, aber eine andere Sache, die es auch hat, ist ein sogenannter Debugger Ein Debugger ist also eine Software, ein völlig eigenständiges Programm, das von Microsoft geschrieben wurde Und die Aufgabe des Debuggers besteht darin, sich an eine andere Software anzuhängen Dies wird als Anhängen des Debuggers bezeichnet. Also, an welche Software hängt sich dieser Debugger selbst an? Nun, das ist dein Code, deine Software. Jedes Mal, wenn Sie die grüne Play-Taste drücken, Ihre Software im Hintergrund kompiliert Wenn Sie beispielsweise Windows verwenden, wird es beispielsweise zu einem EX kompiliert Dann kann sich der Debugger in diesem Fall selbst an diese EXE-Datei anhängen , aber nicht nur Ihre Software Es kann sich an einen anderen Ausführungsprozess anhängen , den Ihr System ausführt Es ist ziemlich mächtig. Was ist also der Vorteil sich dieser Debugger an Ihre Software Was ist der Zweck davon ? Warum sollte es das tun? Nun, wenn sich ein Debugger an Ihre Software anhängt, können Sie ein gewisses Maß an Kontrolle ausüben , während Ihr Code ausgeführt wird Und es kann bestimmte Codesegmente untersuchen, wenn während der Ausführung Ihrer Software etwas schief gehen könnte Stellen Sie sich vor, Sie können Ihre Software jederzeit pausieren . Angenommen, Ihre Software wird geladen, sie läuft in einer Endlosschleife. Zum Beispiel vielleicht eine Vierer-Schleife, und Sie können die Ausführung einfach in der Mitte der Schleife anhalten die Ausführung einfach in der Mitte der Schleife Nehmen wir an, Sie haben eine Schleife mit vier und es wird bis zehn gezählt. Sie können Ihre Software zu einem bestimmten Zeitpunkt beenden, zum Beispiel, wenn sie gerade bis vier gezählt hat. Während die Software läuft, können Sie also in Ihren Code gehen und alles überprüfen. Sie können Werte von Variablen sehen. Sie können sogar die Ausführung kontrollieren. Lassen Sie diese Vorderschleife also beispielsweise manuell zwei weitere Iterationen durchführen Und das kannst du selbst machen. Hast du jemals diese Superheldenfilme gesehen, in denen der Typ wirklich schnell ist und die ganze Welt eingefroren ist Aber weil er so schnell ist, kann er in Echtzeit mit Menschen interagieren Stellen Sie sich das wie einen Debugger vor. Die Welt geht ihren Geschäften nach. Aber dieses superschnelle Wesen, dieser superschnelle Held, kann quasi mit Lichtgeschwindigkeit herumfliegen und Dinge modifizieren und kontrollieren So funktioniert ein Debugger. ist er ziemlich mächtig und Um ehrlich zu sein, ist er ziemlich mächtig und unterhaltsam in der Bedienung Und das Anhalten Ihrer Anwendung, während sie mit dem Debugger ausgeführt wird, wird als Übergang in den Unterbrechungsmodus bezeichnet. Und als ich sagte, dass Sie die Ausführung tatsächlich kontrollieren können. Wenn Ihre Software beispielsweise läuft und sie gerade dabei ist, eine Methode auszuführen, können Sie diese Methode komplett überspringen, indem Sie sie überspringen und den Ablauf Ihrer Software während der Ausführung kontrollieren , das wird Code-Stepping genannt Der Debugger ist eigentlich eine ziemlich leistungsstarke Software, und 99,999% der Entwickler würden einen Debugger verwenden, um irgendeine Art von würden einen Debugger verwenden Schauen wir uns also ein Beispiel dafür an. Nun, wie betreten wir diese Welt, in der wir ein schneller Superheld sind Und wir können die Software pausieren und Dinge ändern, Werte von Variablen ändern und Methoden überspringen und all diese Dinge Wie machen wir das? Nun, lassen Sie uns einen Blick darauf werfen. Wenn Sie also bisher unseren anderen Tutorials gefolgt sind, wir beim Schreiben von Code haben wir beim Schreiben von Code diese grüne Play-Taste hier oben gedrückt. Wenn wir die grüne Play-Taste drücken, läuft unsere Software. Und wenn wir sie töten oder beenden wollen, kreuzen wir entweder das Fenster hier ab oder drücken die rote Stopptaste hier oben. Also das haben wir bisher gemacht. Wenn Sie hier links neben dieser grünen Play-Schaltfläche gehen, werden Sie hier eine Drop-down-Liste sehen. Standardmäßig sollte dort D Bug stehen, aber darunter steht auch Release. Nun, diese beiden Punkte hier sind ziemlich wichtig. Wenn wir in dieser Liste Fehler ausgewählt haben, wird jedes Mal, wenn wir diese grüne Play-Taste drücken, auch der Debuger ausgeführt und er hängt sich auch an unsere Software an Für Neugierige: Wenn Sie in dieser Liste Version auswählen, verwenden wir dies normalerweise, wenn wir die Software an eine andere Person weitergeben möchten, da sie keine Debugging-Informationen enthält Aber jetzt wollen wir hier über Debug sprechen. Jetzt wird dies als Release-Modus bezeichnet. Im Moment wollen wir unser Programm debuggen, wir wollen einige Fehler finden und etwas Detektivarbeit leisten Wenn wir als Entwickler Software entwickeln und Fehler finden und unsere Lösung entwickeln, verwenden wir normalerweise als Entwickler Software entwickeln und Fehler finden und unsere Lösung entwickeln, diesen Release-Modus hier, Bug Und das ist der Grund, warum er Standard ist. Also, wie ich schon sagte, wenn wir die Anwendung hier ausführen und unsere Software im Hintergrund läuft, hat sich der Debugger, der Visual Studio-Debugger , an unsere Software angehängt Und das kann ich Ihnen beweisen, wenn ich den Task-Manager öffne. Hier ist mein Task-Manager hier, sind alle Anwendungen, die ich ausführe. Hier ist Visual Studio, aber darunter können Sie die Visual Studio-Debugger-Konsole sehen Das läuft im Hintergrund und ist tatsächlich an unsere Software angehängt Aber bisher haben wir das in unseren vorherigen Tutorials nicht wirklich genutzt, aber in diesem und den nächsten Tutorials werden wir es ziemlich oft verwenden . Schauen wir uns nun den Visual Studio-Debugger an. Schauen wir uns hier etwas Debugging an. Ich habe eine Beispielanwendung. Wenn diese Hauptmethode ausgeführt wird. Hier geht es in eine endlose Drahtschleife über. Die Anwendung wird niemals beendet. Jedes Mal, wenn sich diese Drahtschleife bitten wir den Benutzer, einen Wochentag einzugeben. Wir nehmen ihre Antwort, speichern sie in einer Variablen übergeben dann ihre Antwort an diese Methode hier, je nachdem, welchen Wochentag sie eingeben. Wir haben eine Switch-Anweisung, die eine benutzerdefinierte Nachricht ausdruckt , je nachdem welchen Wochentag sie eingeben. Ganz einfach: Jedes Mal , wenn eine Nachricht ausgegeben wird, wir einfach eine Leerzeile ein und kehren dann wieder zurück, um sie nach einem anderen Wochentag zu fragen Es ist eine ziemlich einfache Anwendung mit dieser Anwendung . Ich habe ein kleines Problem, wenn ich Mittwoch eintippe Es gibt mir nicht die tatsächliche Ausgabe, die ich will. Wenn ich Mittwoch eintippe, möchte ich, dass es Mittwoch oder Mythos ausgibt, was derzeit nicht der Fall ist Wenn ich beispielsweise Dienstag eintippe, erhalte ich eine Antwort für Dienstag Aber für Mittwoch können Sie sehen, dass es mir mitteilt, dass ich einen ungültigen Tag eingegeben habe. Jetzt weiß ich, dass es sich um eine sehr einfache Software handelt, aber stellen Sie sich vor, diese Software ist sehr kompliziert. Sie haben vielleicht 50 Dateien. Möglicherweise haben Sie Methoden, Methoden, Aufrufmethoden, Methoden innerhalb von Schleifen. Sie können also sehen, dass es sehr kompliziert werden kann. Schauen wir uns also an, wie wir eine solche Anwendung debuggen können eine solche Anwendung debuggen Bisher wissen wir mit unseren detektivischen Fähigkeiten , dass Dienstag funktioniert Deshalb kommt der Code in diese Methode. Die Switch-Anweisung wird ausgeführt und wir erhalten eine Antwort für Dienstag. Mittwoch funktioniert jedoch nicht. Es gibt also an dieser Stelle ein Problem mit diesem Code. Zumindest würde ich das denken. Es sieht also so aus, als ob, wenn ich Mittwoch eintippe , genau hier diese Art von Standardabschnitt ausgegeben wird Warum macht es das? Was ich in diesem Fall tun könnte, ist einen sogenannten Breakpoint hinzuzufügen. Wenn du hier auf die linke Seite kommst , ist da ein grauer Balken. Wenn ich irgendwo in dieser grauen Leiste hingehe, siehst du dort einen grauen Kreis. Wenn ich mit der linken Maustaste klicke, wird ein roter Punkt hinzugefügt. Sie können also gleich hier sehen, wie das heißt. Was bedeutet das Setzen eines Breakpoints? Warum wird es ein Breakpoint genannt? Nun, wenn ich die Software hier starte und irgendeinen Tag der Woche eintippe, können Sie sehen, wie der Code nicht mehr ausgeführt Ich kann mich daran erinnern, wann ich Ihnen erklärt habe, was ein Burger , und ich sagte, es ist wie dieser Superheld, in Echtzeit verändern kann, wissen Sie, wie die Lichtgeschwindigkeit Das ist die Untätigkeit des Debuggers. Jetzt hat sich der Debugger an unsere Software angehängt , indem einen sogenannten Breakpoint, diese roten Punkte, Hier können wir so viele einstellen, wie wir möchten. Jedes Mal, wenn der Code einen dieser roten Punkte erreicht, friert die Software ein. Es wird aufhören. Mehr kann nicht getan werden. Wenn ich versuche, meine Software zu öffnen, kann ich überhaupt nicht damit interagieren. Es ist völlig eingefroren. Und wir haben die volle Kontrolle auf Code-Ebene. Dieses gelbe Stück hier, darauf ist es eingefroren. Und das ist unser erster Breakpoint. Also kann nichts anderes passieren. Die Zeit ist eingefroren. Also, was wir tun können, solange es hier aufgehört hat, wir können Dinge inspizieren. Schau, wenn ich mit der Maus darüber fahre, kann ich den Wert unserer Variablen hier sehen Ich kann sehen, wie der Wert hier übergeben wird. Es ist also ziemlich cool, nicht wahr? Es ist, als würde man mit der Welt interagieren , während die Welt eingefroren ist. Du weißt schon, spüre die Macht. Das ist also die Macht eines Breakpoints. Es macht die Software kaputt. Und ich meine nicht zerbrechen, wie eine Glasschale oder eine Glasvase zu zerbrechen. Ich meine, Unterbrechungen in der Pause, wie Stopp. Stoppt die Hinrichtung Das ist also ein Breakpoint. Das nächste, worüber ich sprechen möchte, ist das sogenannte Code-Stepping Was ist Code-Stepping? Im Moment ist unsere Software in der Zeit eingefroren. Es ist an dieser Leitung genau hier eingefroren. Die Switch-Anweisung wurde noch nicht ausgeführt. Sie ist gelb, was bedeutet, dass sie im Begriff ist , ausgeführt zu werden, aber noch nicht. Was wir tun können, ist, dass wir die nächste Codezeile manuell ausführen können . Das nennt man Stepping, und wir können das manuell machen Wenn wir hierher kommen, siehst du all diese Symbole hier. Dieser hier, da steht: Schritt rein, dieser eine Schritt rüber, dieser eine Schritt raus. Und dieser eine Schritt zurück. Also viele verschiedene Schritttasten genau hier. Aber was ist Treten? Nun, zum Beispiel dieser hier, geh rüber. Sie sehen, die Tastenkombination hier ist Zehn. Wenn ich Zehn drücke , wird diese Aussage übersprungen. Und das bedeutet, dass der Code bis zur nächsten Codezeile oder zum nächsten Codeblock innerhalb einer Switch-Anweisung ausgeführt wird. Hier wird unsere Eingabe aufgenommen, die so ziemlich eine Garboard-Zeichenfolge ist Was passieren sollte, ist, dass diese Codezeile ausgeführt wird , weil wir keinen Wochentag haben , der unserer Eingabe entspricht Wenn ich dann F drücke, was Schritt über ist, können Sie sehen, dass der Code dann zu dieser Zeile hier geht. Jetzt haben wir den Start der Switch-Anweisung ausgeführt, und jetzt ist die Software wieder in der Zeit eingefroren. In dieser Zeile können Sie sehen, dass wir dieser Zeile keinen Breakpoint haben, aber das spielt keine Rolle, weil wir manuell darüber gegangen sind. Wenn wir möchten, dass die Software weiter ausgeführt wird, drücken wir zum Beispiel die Play-Taste. Dann würde die Software einfach weiterlaufen bis sie einen dieser roten Breakpoints erreicht Aber wenn wir Schritt für Schritt Code in all diese Dinge hineinfahren, wir manuell jeweils eine Codezeile oder einen Codeblock nach dem anderen aus, wie zum Beispiel eine Switch-Anweisung Das ist also die Stärke von Stepping, und das ist einfach das manuelle Ausführen von Segmenten Ihres Codes nacheinander, wie er normalerweise ausgeführt werden würde Jetzt ist die Software in dieser Zeile hier eingefroren. Sie haben einen ungültigen Tag eingegeben. Wenn ich erneut Zehn drücke, zeigt unser Konsolenfenster jetzt diese Zeile an. Wenn ich das Konsolenfenster öffne, können Sie sehen, dass diese Zeile jetzt ausgeführt wurde, aber auch hier ist die Software zeitlich eingefroren. Auch hier drücke ich auf diesem Unterbrechungssymbol erneut F zehn, und jetzt sind wir dabei, diese Zeile wieder in die Konsole F ten zu schreiben , und jetzt wird die Methode ausgeführt. Das ist ziemlich cool, nicht wahr? Wenn Sie in C Sharp in Visual Studio arbeiten , müssen Sie den Code manuell steuern Codeteile manuell ausführen Das ist Code-Stepping. Es ermöglicht uns, Codezeilen manuell auszuführen. Und das können wir selbst machen. Und wir können das tun, indem wir Breakpoints setzen , um den Code zunächst anzuhalten. Und dann können wir sogenannte Schrittbefehle verwenden , um rein zu gehen , rauszukommen und all diese Dinge. Aber was ist der Unterschied zwischen Hineinsteigen, Aussteigen, Hinübertreten? Was sind diese Dinge? Nun, betrachte dieses Beispiel hier. Wir haben die Anwendung ausgeführt, und ich rufe diese Methode fünfmal hintereinander auf keinem wirklichen Grund, außer um Ihnen den Unterschied zu zeigen. Wenn wir Step Into ausführen, was 11 ist, dann werden wir zu dieser Methode wechseln. Wenn ich F 11 drücke, können Sie sehen, dass die nächste Codezeile, die ausgeführt wird, die offene geschweifte Klammer genau hier ist, gefolgt von der Switch-Anweisung Ich bin auf eine Methode gestoßen, ich bin hier eingetreten Was wir auch tun können, ist die Methode zu überarbeiten. Ignoriere das alles einfach komplett. Vielleicht wissen wir, dass diese Methode perfekt ist, daran ist nichts falsch. Wir können also diese gesamte Methode überarbeiten. Und dann wird die nächste Zeile, die ausgeführt wird, diese hier sein. Da wir die gesamte Methode Schritt für Schritt durchgehen, ist das der Unterschied zwischen Schritt in Schritt und Schritt über. Wir können einfach einen ganzen Codeabschnitt überspringen. Sie haben es vielleicht erraten. Was ist Step Out Nun, wir arbeiten gerade an einer Methode. Ich kann auf Step Out Shift 11 klicken und wir können die Methode komplett verlassen. Und das tun wir, wenn wir die restlichen Methoden übernehmen. Fein. Wir wollen hier raus und wieder da sein, wo wir vorher waren und dann in etwas anderes einsteigen. Das ist also der Unterschied zwischen diesen Schrittbefehlen. Normalerweise ist es nur ein Schritt in etwas wie eine Methode, eine Klasse oder etwas Ähnliches oder eine Eigenschaft, oder wir könnten es komplett übergehen. Also ignoriere es einfach und mach mit dem Rest weiter. Und wenn wir uns in einer Methode wiederfinden und, weißt du, alles irgendwie gut aussieht, dann können wir sie hinter uns lassen. Diese werden also Schrittbefehle genannt. Und der Vorgang des Verschiebens der Codeausführung wird Code-Stepping oder Stepping genannt Das ist also der Unterschied zu denen dort. Jetzt habe ich Breakpoints erklärt. Code-Stepping, Stepping-Befehle. Lassen Sie uns versuchen, unser Problem hier zu finden. Es mag ziemlich offensichtlich aussehen, aber denken Sie daran, dass wir gesagt haben, dass am Mittwoch nicht die richtige Botschaft ausgegeben wurde. Also warum ist das so Lassen Sie uns hier also einen Grenzwert für diese Switch-Anweisung festlegen , da wir wissen, dass das Problem wahrscheinlich in dieser Switch-Anweisung liegt . Also werde ich die Anwendung jetzt ausführen und Wednesday eingeben. Ich drücke die Eingabetaste und wir sind dabei, diese Switch-Anweisung zu starten. Hier ist unsere Variable hier. Ich kann mit der Maus über die Eingabe fahren und ich kann sehen, schau Mittwoch Was jetzt passiert, ist, wenn ich hier drübergehe, können Sie sehen, dass es diesen Standardfall Keiner dieser Fälle passt also zu Mittwoch, aber das klingt komisch, weil ich gerade Mittwoch habe , Mittwoch. Wenn ich also mit der Maus über die Variable Mittwoch fahre, oh, ich sehe, schau, das Y wird genau dort groß geschrieben. Es ist in Großbuchstaben geschrieben Das ist wahrscheinlich der Grund, warum ich dieses Y jetzt in Kleinbuchstaben geändert habe. Ich bewege den Mauszeiger hier über diese Variable. Es sieht so aus, als ob es richtig passt. Das sollte also funktionieren. Jetzt könnte ich die Anwendung neu starten. Sie sehen dieses Symbol hier neben der Stopp-Schaltfläche. Es heißt Neustart. Was ich auch tun könnte, ist das Programm zu beenden oder zu streichen und es dann erneut auszuführen. Diese Neustarttaste hier, was das macht, sie startet den R-Code neu, lässt aber den Debugger im Hintergrund laufen Wenn Sie auf Neustart klicken, insbesondere wenn Sie eine große Software haben, ist es etwas schneller, wieder loszulegen Das ist der Unterschied zwischen dem Neustart und dem Stop-Play-Button. Eine Sache, die wir zum Beispiel auch tun können, ist, die Ausführung des Codes manuell zu verschieben. Was zur Hölle bedeutet das? Im Moment führen wir diese Codezeile aus. Es wird gerade ausgeführt. Wir gehen einfach drüber hinweg und jetzt sind wir dabei, diese Zeile hier auszuführen. Im Wesentlichen ist die Ausführung dieser Switch-Anweisung hier abgeschlossen. Was wir tun können, ist Maus über diesen gelben Pfeil genau hier Halten Sie die linke Taste gedrückt, und wir können die Codeausführung tatsächlich direkt zurück zum Anfang der Switch-Anweisung verschieben die Codeausführung tatsächlich direkt , als ob sie überhaupt nicht ausgeführt wurde Das ist ziemlich cool, nicht wahr? Stellen Sie sich vor, Sie ziehen die Maus hierher, als würden Sie einen Schrittbefehl verwenden, z. B. Schritt über oder hinein Sie können damit aber einen Schritt zurücktreten, aber nicht nur eine Zeile, sondern mehrere Zeilen Es ist also eine Abkürzung für diese Schrittbefehle. Aber es ermöglicht Ihnen, es zum Beispiel in großen Teilen zu tun. Jetzt sind wir dabei, die Switch-Anweisung erneut auszuführen, aber wir haben den Code hier tatsächlich geändert und unsere Software noch nicht einmal gestoppt Es ist in Echtzeit erledigt. Es ist ziemlich cool, nicht wahr? Wenn ich die Zahl zehn übertrete, können Sie sehen, dass diese Linie jetzt auf der rechten Linie liegt. Mittwochs sind nur Mittwoch, also sieht es so aus, als ob wir das Problem lösen. Es war nur, es war nur der Großbuchstabe Y am Mittwoch. Jetzt kann ich nur noch F 5 drücken, was die Abkürzung für diese grüne Play-Taste ist. Jetzt denke ich, dass das Problem gelöst ist. Ich möchte nicht mehr debuggen. Ich kann meine Breakpoints wegnehmen, wenn ich will, und dann kann ich einfach diese grüne Play-Taste drücken und schon kann die Software wie gewohnt weiterlaufen Jetzt heißt es dort Mittwoch, was perfekt ist. Das ist genau das, was ich will. Wenn ich es noch einmal wiederhole, erhalten wir genau das gleiche Ergebnis. Es sieht also so aus, als hätten wir das Problem mit unserer Software behoben. Es war nur ein Unterschied von einem Zeichen. Es könnte eine geringfügige Änderung sein. Aber selbst Dinge wie ein Unterschied um ein Zeichen können, sagen wir, Space X-Raketen auf den Boden fallen lassen und niemals den Orbit erreichen Deshalb ist es sehr wichtig , dass alles bis ins kleinste Detail überprüft wird Um das zu erreichen , ist ein Debugger ein sehr nützliches Tool, um solche Dinge zu bewerkstelligen Ich werde ein weiteres Beispiel und einige andere Debugging-Tools vorstellen , die Sie vielleicht nützlich finden Sie werden ausgeführt, um zu klicken, und sie werden zum Cursor ausgeführt. Schauen wir uns dieses Beispiel hier an. Wenn Sie die vorherigen Tutorials befolgt haben, erinnern Sie sich wahrscheinlich an dieses Beispiel. Im Wesentlichen wird in diesem Beispiel nach einer Zahl gefragt. Sie geben die Zahl 25 ein, und dann wird eine Pyramide gezeichnet , die 25 Zeilen hoch ist. Weil ich zum Beispiel 25 eingegeben habe, hat sie eine Höhe von 25 Zeilen. Aber Sie können sehen, dass es ein Problem mit dem Hintergrund dieser Pyramide gibt. Die rechte Seite hier dauert zu lange. Es sollte hier wie die linke Seite aussehen. Nach jeder Zeile können Sie sehen, wie die Pyramide breiter wird, aber der Hintergrund schrumpft einfach so Aber dieses Verhalten wird auf der rechten Seite nicht nachgeahmt Damit gibt es ein kleines Problem. Schauen wir uns an, was hier vor sich geht. Hier ist das Beispiel. Hier fragen wir den Benutzer, wie hoch die Pyramide sein soll. Wir übergeben es an eine Methode. Wir delegieren die gesamte Logik des Zeichnens der Pyramide in dieser einen Methode Hier haben wir unsere vier Hauptschleifen , die nacheinander jede Linie der Pyramide herausziehen Dann haben wir 34 Schleifen, eine für die Bindestriche auf der linken Seite, eine für das Zeichnen der Pyramide und eine für die Bindestriche auf der rechten Wir wissen, dass wir ein Problem mit den Bindestrichen auf der rechten Seite haben. Dies ist wahrscheinlich ein guter Bereich, um unseren Breakpoint festzulegen und einen Blick darauf zu werfen, was hier vor sich geht Wenn wir die Software ausführen, fragen wir den Benutzer nach einer Nummer. Fangen wir mit einer niedrigen Zahl an. Niedrige Zahlen sind einfacher zu debuggen, da es nicht viele davon Ich tippe die Zahl fünf ein. Unser Breakpoint wurde hier erreicht. Derzeit ist H nicht deklariert. Drücken wir Zehn, um rüberzugehen. Und jetzt haben wir den Header für unsere vier Schleifen initialisiert. Im Moment sind wir dabei, die erste Iteration der Schleife durchzuführen H ist eins, weil das hier sein Anfangswert ist. Dann wird H weiterlaufen, bis es kleiner oder gleich dem ist, was wie fünf aussieht. Und jede Iteration erhöhen wir um eins. In der ersten Zeile wird H fünfmal fortgesetzt, wird H fünfmal fortgesetzt weil das genau die Größe hier ist Wenn ich darüber hinweggehe, geben wir einen Bindestrich aus, dann zwei Bindestriche, Dann ist es erledigt. Die allererste Zeile auf einer Pyramide, die fünf Einheiten hoch ist, gibt fünf Bindestriche auf der Stimmt das? Stimmt das? Nein, denn in der ersten Zeile sollten vier ausgegeben werden. Es generiert hier zu viele Bindestriche. Warum ist das so? Es werden offensichtlich zu viele Bindestriche generiert, aber die Bindestriche auf der linken Seite erzeugen die richtige Menge Wie Sie hier sehen können, sollte der Bindestrich aufhören, wenn er die Größe minus Y hat. Das ist Formel , die wir Wir haben es hier offensichtlich für diese Bindestrichschleife gemacht, aber wir haben es versäumt, dieselbe Funktionalität für die Bindestriche auf der rechten Seite zu replizieren , indem wir einen Breakpoint Sie können sehen, dass wir den Wert von H untersuchen können , während die Software läuft. Lass uns das jetzt einfach machen. Sie können sehen, wir können die Werte von H untersuchen. Wir können die Größenwerte untersuchen, wir können die Werte von y untersuchen. Wir können sogar Werte hier oben untersuchen, Werte, die mit Hilfe von Schrittbefehlen wie step over oder into in die Methode kommen , wir können die Ausführung der Software steuern. Das ist ziemlich cool, nicht wahr? Nehmen wir an, wir haben hier die Lösung gefunden, wir haben das Problem herausgefunden. Nun, ich habe bereits einige Dinge über Run to Cursor und Run to Click erwähnt . Was sind sie? Nun, laufen Sie zum Cursor und laufen Sie , um auf die Tastenkombinationen zu klicken. Erinnerst du dich, als ich darüber gesprochen habe diesen gelben Pfeil hierher zu ziehen Gleich hier oben, damit wir die Hinrichtung kontrollieren können? Manuell ausführen, um zu klicken und Cursorkürzel auszuführen , um den Codefluss zu steuern. Wie Code-Stepping. Wenn ich meinen Cursor hier setze, zum Beispiel rechten Maustaste klicke und dann „Zum Cursor ausführen“ wähle, klicke darauf und dann geht die Ausführung dorthin, wo sich mein Mauszeiger befand Es ist eine Abkürzung und sehr nützlich. Ein anderer wird ausgeführt, um zu klicken. Sie können sehen, wenn ich jedes Mal, wenn ich auf eine neue Zeile klicke, dieser mysteriöse kleine grüne Play-Button erscheint. Aber du kannst es hier sehen, genau hier. Ich klicke auf diese Zeile, sie erscheint genau hier, sie ist wie ein grünes Gespenst. Das heißt also Run-to-Click. Wenn ich hier auf diesen kleinen grünen Play-Button klicke, springt die Codeausführung zu dieser Zeile. Es ist also so ziemlich dasselbe, als würde man mit der rechten Maustaste auf diese Zeile klicken und „Zum Cursor ausführen“ wählen. Es ist also nur eine nette kleine praktische Abkürzung. Sie können also sehen, dass „Run to Click“ und „Run to Cursor“ beide praktische kleine Abkürzungen sind. Wenn sich dieser Codeabschnitt mehrmals wiederholt, kann ich zum Beispiel darauf klicken , und die Codeausführung wird fortgesetzt bis diese Zeile erreicht ist Das sind nur nette kleine Abkürzungen für Code-Stepping. Dieser wird ausgeführt, um zu klicken, und der Rechtsklick, Sie können zum Code-Cursor ausführen, aber dafür gibt es auch eine Abkürzung, nämlich Control F Ten Je öfter Sie Visual Studio verwenden, desto mehr werden Sie sich mit diesen Tastenkombinationen vertraut machen. Aber jeder Entwickler, den ich kenne , kennt Step-In- und Step-Out, was F 10.11 ist. Und diese was F 10.11 ist. Und diese beiden sind wirklich nützlich, um den Code Schritt für Schritt durchzugehen Jetzt werden wir die Anwendung ausführen und es sieht so aus, als ob unser Problem mit den Bindestrichen Es war nur ein Problem mit den letzten vier Schleifen hier. Und das ist die Obergrenze. Wenn Sie also Code im Allgemeinen debuggen, müssen Sie sich einige Fragen stellen Wenn ein Fehler aufgetreten ist, welche Anweisung oder welcher Ausdruck hat das Programm zum Zeitpunkt des Fehlers ausgeführt Bei welcher Codezeile ist Ihr Programm fehlgeschlagen? Ist das Programm gescheitert? Und Sie hatten diese hervorgehobene Zeile, die besagte, dass dort ein Fehler aufgetreten ist. Welche Zeile war das? Und als Ihr Programm fehlschlug, was waren die Werte der Variablen, wie die Parameter, die lokalen Felder, irgendwelche Objekte? Was waren diese Werte , als der Fehler auftrat? welcher Reihenfolge wurden die Anweisungen zum Zeitpunkt des Fehlers ausgeführt? Warst du in einer Methode? Zum Beispiel von einer Methode? Also, wo warst du? Was wurde vorher ausgeführt? Und ich glaube, ich habe diesen ziemlich gut behandelt. Was war das Ergebnis der Codezeile, in der sie fehlgeschlagen ist? Oder vielleicht das Ergebnis der Codezeile vor dem Fehler? Sie müssen also all diese Dinge berücksichtigen. Sie können nicht einfach irgendwo Breakpoints platzieren und hoffen , einen Fehler zu finden Du musst dir diese Fragen irgendwie stellen. den Fehler grob darauf ausrichten, wo er sein könnte, welcher Klasse er sich befinden könnte, in welcher Methode er sich befinden könnte. Sobald Sie es dann auf eine bestimmte Methode isoliert haben, können Sie damit beginnen , Breakpoints zu zeichnen und es ein wenig zu isolieren Zusammenfassend lässt sich sagen, dass das Debuggen genau das ist. Es ist der Prozess, nach Fehlern zu suchen, aber wenn Sie einen Fehler haben, ist es der Prozess, den Fehler irgendwie zu isolieren Das ist ein Debugger. Das ist also ein Visual Studio-Debugger. Und Sie können dies verwenden, wenn Sie Ihren Release-Modus auf Debug setzen Ihren Release-Modus auf Debug Und wenn Sie debuggen, können Sie Dinge wie Breakpoints platzieren Und hier wird die Codeausführung gestoppt. Wenn die Codeausführung angehalten wird, wird dies als Break-Modus bezeichnet. Sie wechseln in den Unterbrechungsmodus, und in diesem Moment wurde ein Breakpoint erreicht, um den Ausführungsablauf zu steuern. Verwenden Sie Step-In, um auszusteigen, zu mieten, den Mieter zu klicken, den Cursor oder sogar die Maus entlang dieser Unterbrechungspunktleiste zu ziehen Dann wird das als Code-Stepping bezeichnet. Dies ist die gesamte Terminologie, die mit dem Debuggen in Visual Studio zu tun Sie werden vielleicht überrascht sein, aber wir haben nur die Oberfläche des Debuggings gekratzt Ich hoffe, dieses Tutorial hat dir geholfen. Danke fürs Zuschauen. 55. 11-2. Sofortfenster: In diesem Tutorial werden wir über das unmittelbare Fenster sprechen. Nun, das ist ein Debugging-Hilfsprogramm und es ist äußerst nützlich Falls Sie mein letztes Tutorial über Debugging, Breakpoints und Code-Stepping noch nicht gesehen haben, dann empfehle ich Ihnen dringend, sich das anzusehen, bevor Sie sich dieses Tutorial ansehen, das unmittelbare Fenster, was ist das Wenn wir hierher kommen, können Sie hier diesen kleinen Tab namens Immediate Window sehen Vielleicht haben Sie ihn schon einmal gesehen, vielleicht haben Sie sich gefragt, worum es geht. Wenn Sie diesen Tab hier nicht sehen, wenn wir nach oben kommen, können wir, wenn wir nach oben kommen, hier zu diesem Debug-Menü gehen Hier befinden sich nun alle Debug-Dienstprogramme und -funktionen Wenn Sie sich das gefragt haben, gehen Sie zu Windows und dann zu Immediate Und wenn Sie das tun, kommen wir wieder hierher und dieser kleine Tab sollte genau hier erscheinen. Jetzt kann das Direktfenster zur Entwurfs- oder Laufzeit verwendet werden . Was bedeutet das also? Nun, in der Entwurfszeit entwickeln wir sozusagen. Wir haben noch nicht einmal die grüne Play-Taste gedrückt. Wir haben nichts zusammengestellt. Wir lassen nichts laufen. Aber was wir tun können, ist, dass wir in der Entwurfszeit tatsächlich mit unserer Software arbeiten können , sodass die Software nicht einmal läuft. Schauen wir uns jetzt dieses Beispiel an , damit ich Ihnen zeigen kann, was ich damit meine. Wenn Sie unseren früheren Tutorials gefolgt sind, haben wir einen Beispielrechner erstellt, bei dem wir den Benutzer nach einer ersten Zahl, einer zweiten Zahl und dann nach einem Operator fragen . Und dann benötigt es in einer Methode hier zum Beispiel diese Zahlen und einen Operator, zum Beispiel 54, und dann vielleicht Plus. Und wenn der Operator dann ein Plus ist, addiert er sie zusammen und zeigt dann einfach das Ergebnis an, das wäre neun. In diesem Fall können wir tatsächlich vom unmittelbaren Fenster aus testen diese Methode tatsächlich vom unmittelbaren Fenster aus testen. Es ist verrückt, oder? Die Software wird nicht einmal ausgeführt, sie läuft nicht einmal. Wie machen wir das? Lassen Sie uns diese Methode hier verwenden. Rechnen Sie zum Beispiel. Also werde ich das kopieren. Wir werden hier zu diesem unmittelbaren Fenster kommen. Alles im unmittelbaren Fenster beginnt mit einem Fragezeichen , das so ziemlich aussagt, okay, ich möchte einen Befehl ausführen. Also möchte ich diese Methode ausführen. Also werde ich diese Methode nennen. Ich nenne es mit fünf, und es braucht ein Zeichen und merkt sich Zeichen in einfachen Anführungszeichen. Und wir werden ein Plus machen wenn wir im unmittelbaren Fenster arbeiten. Das Semikolon ist optional. Wir können es sagen, wir müssen es nicht, es ist nicht wirklich wichtig Jetzt pass auf, was passiert , wenn ich Er treffe. Es führt tatsächlich unsere Software aus, kompiliert und führt sie und gibt uns dann das Ergebnis für diese Methode Sie können sehen, dass es das tatsächlich zur Entwurfszeit getan hat. Meine Software lief nicht einmal sie gab mir den Wert Neun. Es ist eine ziemlich gute Methode, Dinge wie Methoden zu testen, Ausdrücke während des Entwurfs auszuwerten, aber auch zur Laufzeit. Es kann dies auch tun, während die Software läuft. Das ist ziemlich clever, nicht wahr? Wenn ich einen Breakpoint setze, vielleicht hier zum Beispiel, löschen wir das Direktfenster , wir können schreiben, darauf klicken und dann auf Löschen klicken. All das macht das Fenster für uns einfach leer. Also jetzt habe ich hier oben einen Grenzwert bei doppeltem Ergebnis ist gleich rechnen Bevor ich die Methode überhaupt aufrufe, stoppe ich das Programm, sodass nichts anderes weitergeht Ich starte die Anwendung, indem ich auf die grüne Play-Schaltfläche klicke oder fünf drücke. Es spielt keine Rolle. Jetzt fragen wir nach der ersten Zahl fünf und dann nach vier, und dann möchte ich diese zusammenzählen. Jetzt wird das Programm nicht mehr ausgeführt. Wenn ich hier runter komme, die untere Ecke, habe ich dieses unmittelbare Fenster hier. Also kann ich hier viele Dinge tun. Ich kann diese Methode erneut ausführen. ist zum Beispiel, Ein nützliches Feature ist zum Beispiel, dass wir, während der Code läuft, diese Intellisense, die Autocomplete, haben Es stellt uns tatsächlich alle Variablen im Gültigkeitsbereich zur Verfügung, Nummer zwei, wir können ihm benutzerdefinierte Informationen übergeben, wenn wir wollen. Wenn ich 54 und mehr sage, genau wie zuvor, dann die Eingabetaste drücke, können wir tatsächlich das Ergebnis erhalten. Aber Sie können hier sehen, dass hier wirklich nichts passiert ist. Wir können immer noch mit dieser Berechnung fortfahren. Das ist ziemlich cool, nicht wahr? Was ich auch tun kann, ist bestehende Variablen zu verwenden. Im Moment habe ich Nummer eins, Nummer eins. Wenn ich hierher gehe und diesen Wert hervorhebe, können Sie sehen, dass der Benutzer die Zahl fünf und die Nummer zwei vier gegeben hat. Und der Operator hat genau dort ein Plus verwendet. Was wir tatsächlich tun können, ist diese Variablen zu verwenden. Wir können das Ergebnis tatsächlich sehen bevor die Methode überhaupt ausgeführt wird. Nun, vielleicht möchte ich sie multiplizieren. Sie können hier also sehen, dass fünf multipliziert vier ist 20. Sie können also sehen, dass das unmittelbare Fenster tatsächlich verschiedene Dinge abfangen kann tatsächlich verschiedene Dinge abfangen Ausdrücke auswerten, Methode ausführen, viele solche Dinge Und das alles, während sich der Code tatsächlich im Break-Modus befindet. Diese Methode wurde zum Beispiel noch nicht einmal ausgeführt. Damit gibt es jetzt ein feines Detail. In diesem unmittelbaren Fenster hier unten habe ich die Berechnungsmethode jetzt zweimal aufgerufen. Aber stellen Sie sich vor, Calculate würde etwas anderes tun, vielleicht würde es etwas im Hintergrund zählen. Jedes Mal, wenn ich Calculate ausführe, wird eine laufende Summe darüber gespeichert, wie oft ich es aufgerufen habe diese Methode jetzt im unmittelbaren Fenster ausführen , würde sich dies auf die Ergebnisse auswirken Es ist, als würde diese Methode jetzt tatsächlich ausgeführt, was zu verschiedenen Problemen führen könnte. Je nachdem, was Ihr Code tut, die Ergebnisse hier oben auswirken, wenn Sie hier im unmittelbaren Fenster herumspielen kann sich das auf die Ergebnisse hier oben auswirken, wenn Sie hier im unmittelbaren Fenster herumspielen. Es hängt einfach wirklich davon ab , was Ihr Code tut. Für so etwas wie Calculate, naja, es speichert nicht wirklich irgendwelche Informationen. Es zählt nichts. Es zeigt nicht, wie oft es aufgerufen wurde. Es ist also ziemlich sicher, im unmittelbaren Fenster zu laufen. Es gibt jedoch Fälle, in denen es unsicher wäre, beispielsweise aus diesen anderen Gründen Das ist einfach etwas Bemerkenswertes. Lassen Sie mich das demonstrieren. Jetzt nur um zu veranschaulichen, wovon ich spreche. Nehmen wir an, diese Berechnungsmethode führt eine fortlaufende Bilanz darüber, wie oft sie aufgerufen wurde Wir verwenden diese fortlaufende Zählung jedoch für wichtige Zwecke. Vielleicht hängt etwas anderes davon ab. In diesem Feld wird nur aufgezeichnet, wie oft die Berechnungsmethode aufgerufen wird Wenn die Berechnungsmethode aufgerufen wird, werde ich dieses lokale Feld einfach jedes Mal um eins erhöhen dieses lokale Feld einfach jedes Mal um eins Wenn ich die Anwendung jetzt starte, setze ich hier einfach einen Breakpoint, damit wir die Ausführung der Software unterbrechen können Ich werde ein paar Beispielzahlen eingeben, etwa fünf plus vier. Und dann werde ich zum unmittelbaren Fenster hier rüberkommen . Dieser schwebt hier über diesem privaten Feld. Manchmal taub, Sie können sehen, dass der Wert derzeit Null ist. Aber wenn ich diese Methode innerhalb des unmittelbaren Fensters ausführe, wird sie vielleicht dreimal ausgeführt Übrigens, wenn ich den Aufwärtspfeil auf der Tastatur drücke, kann ich meine vorherigen Dinge durchsehen, die ich hier eingegeben habe Das ist also ziemlich cool, nicht wahr? Also habe ich die Berechnungsmethode dreimal ausgeführt, aber nur im unmittelbaren Fenster. Wenn ich hierher komme und den Mauszeiger über meine private Variable hier bewege, können Sie sehen, dass sie den Wert von drei Dingen in Ihrem Code hat von allem beeinflusst werden, was Sie im unmittelbaren Fenster hier unten tun Es ist also wirklich wichtig und es ist etwas, worauf Sie aufmerksam gemacht werden sollten Auch hier wird natürlich alles zurückgesetzt wenn Sie Ihre Anwendung ausführen Aber was das Debuggen angeht, lohnt es sich, dies zu beachten Ich habe gerade darüber gesprochen , dass , wenn Sie das unmittelbare Fenster verwenden, um beispielsweise Methoden aufzurufen, Dinge in Ihrem Code ändern können Nun, das könnte gewolltes Verhalten sein, vielleicht möchtest du das tun und das ist völlig in Ordnung. Aber es gibt Situationen wie in unserem vorherigen Beispiel , in denen wir zum Beispiel eine Variable inkrementieren Aber wir brauchen das hier und wir wollen nicht , dass etwas in unserem unmittelbaren Fenster daran etwas ändert Aber wir wollen die Methode trotzdem vom unmittelbaren Fenster aus ausführen. Nun, wir können tatsächlich etwas tun, um dieses Problem in dem unmittelbaren Fenster zu lösen dieses Problem in dem unmittelbaren Fenster dem ich die Methode aufrufe, in dem ich die Methode aufrufe, was auch immer Sie hier eingeben, ob es nun darum geht, eine Methode aufzurufen , einen Ausdruck auszuwerten den Wert einer Variablen herauszufinden, Sie können ihm einfach einen kleinen Befehl namens S E anhängen, der für keine Nebenwirkungen steht Sie können sehen, wenn ich tippe , dass Visual Studio uns gerade einige nette Hinweise gibt uns gerade einige nette Hinweise Wenn ich hierher komme, können Sie unsere Variable hier sehen Die Anzahl der Wiederholungen ist Null. Ich komme zurück zum Direktfenster und drücke die Eingabetaste. Sie können also sehen, dass Calculate die Zahlen tatsächlich berechnet hat. Es wurden diese Zahlen zusammengezählt, aber ich habe angegeben, dass es keine Nebenwirkungen gibt. Wenn ich hierher zurückkomme und ein paar Mal die Daten durchsuche, behält es immer noch den Wert Null bei, wenn Sie SE angeben behält es immer noch den Wert Null bei, wenn Sie SE angeben. Das bedeutet, dass keine Nebenwirkungen auftreten wenn Sie diese Methode direkt aus dem Fenster aufrufen diese Methode direkt aus dem Fenster aufrufen Das ist ziemlich cool, nicht wahr? Das ist eine der Funktionen, die du damit machen kannst. Also haben wir Methoden mit Änderungen aufgerufen, wir haben Methoden ohne Änderungen aufgerufen. Nun, was können wir im unmittelbaren Fenster noch tun? Nun, wir können Werte von Variablen anzeigen. Also zum Beispiel Nummer eins. Was ist das? Oh, Nummer eins ist fünf. Das ist ziemlich cool, nicht wahr? Also stelle ihm immer ein Fragezeichen voran. Und natürlich sind dies nur Variablen im Gültigkeitsbereich. Wenn diese Variablen zum Beispiel keinen Wert haben oder sie noch nicht erreicht wurden oder sie nicht initialisiert wurden, dann können Sie die Werte dieser Variablen offensichtlich nicht lesen Es ist also nur das, was im Geltungsbereich genannt wird, worauf wir tatsächlich Zugriff haben Was wir auch tun können, ist Ausdrücke auszuwerten, zum Beispiel fünf plus sieben. Es gibt uns das Ergebnis und das können wir mit Variablen machen, also Nummer eins geteilt durch Nummer zwei. Es ist ziemlich cool, besonders wenn Sie beim Debuggen einige Beispielnummern eingegeben haben, aber Sie können die Ausführung des Codes anhalten und zur Laufzeit damit herumspielen, anstatt die Anwendung neu zu starten, ein paar Zahlen auszuprobieren, sie erneut zu starten, mehr Zahlen auszuprobieren Sie können sehen, wie das unmittelbare Fenster dieses Problem beschleunigt Sie können einfach eingeben, was Sie wollen, und vielleicht versuchen Sie, einen Fehler oder ein Problem zu finden Es bietet Ihnen eine wirklich schnelle, einfache und dynamische Möglichkeit diese Probleme und Fehler zu lokalisieren. diesem Grund ist das unmittelbare Fenster in diesem Sinne ziemlich cool. Aber wir können nicht nur Methoden aufrufen und uns Werte ansehen, wir können auch Werte zuweisen. Wenn wir uns den Wert von Nummer eins ansehen, den der Benutzer eingegeben hat, ist fünf und er gibt Nummer zwei ein , also sechs. Und der Operator war ein Plus, also werden wir 11 bekommen. Was wir tun können, ist tatsächlich die Werte von Variablen zu ändern. Anstatt fünf zu sechs zu addieren und 11 zu erhalten, sagen sie, dass Nummer eins gleich 11 Jetzt ist Nummer eins gleich 11. Lassen Sie uns zum Beispiel Nummer zwei gleich 12 machen. Und wir lassen den Operator als Plus übrig. Jetzt haben wir zu diesen beiden Variablen gewechselt. Lass uns jetzt hierher kommen. Wenn wir den Mauszeiger über diese Variablen bewegen, können Sie sehen, dass Nummer eins jetzt 11 und Nummer zwei jetzt 12 ist Wir haben die Werte dieser Variablen im Pausenmodus geändert , während die Software Lichtgeschwindigkeit läuft, wie wir bereits erwähnt haben, wir haben die Dinge tatsächlich zur Laufzeit geändert Es ist verrückt, nicht wahr? Es ist unglaublich. Wenn ich jetzt fünf drücke und mit dem Ausführen der Software fortfahre, können Sie sehen, dass das Ergebnis 23 ist. Der Benutzer hat 5.6 eingegeben, aber wir sind da rein gegangen, paar Sachen geändert, ein paar Sachen geändert, diesen auf 11 und diesen auf 12 geändert. Sie können also sehen, dass das Ergebnis die Änderung widerspiegelt , die wir im unmittelbaren Fenster vorgenommen haben. Das ist also ziemlich cool, nicht wahr? Stellen Sie sich vor, das unmittelbare Fenster ist wie ein kleiner Notizblock , in dem Sie herumspielen und Dinge ändern und Dinge aufrufen können herumspielen und Dinge ändern und Dinge aufrufen Das ist die Stärke des Direktfensters in Visual Studio, wenn Sie mit C Shop arbeiten 56. 11-3. Einheimische und Autos Windows: mit unserem Thema Debugging fortzufahren, werde ich über das lokale Fenster und auch über das Autofenster sprechen . Was sind sie Nun, lokale Fenster und automatische Fenster sind nur während einer Debugging-Sitzung verfügbar Wir müssen in den Debug-Modus wechseln und uns diese Fenster ansehen . Dann zeige ich Ihnen, was sie für Sie zu bieten haben Was ich jetzt tun werde, ich werde einen Breakpoint hinzufügen. Hier ist meine einfache Taschenrechner-Anwendung, mit der ich Zahlen addiere, subtrahiere oder multipliziere Also verschiedene Dinge hier. Ich werde hier einfach ohne besonderen Grund einen Breakpoint setzen hier einfach ohne besonderen Grund Dann werde ich die Anwendung im Debug-Modus ausführen , weil wir etwas debuggen wollen, die Software läuft, sie fragt mich nach zwei Zahlen Ich werde nur ein paar Beispieldaten hineinlegen. Jetzt wurde der Code angehalten, ausgeführt und unser Breakpoint wurde erreicht Jetzt ist die Zeit der Software eingefroren und wir können damit machen, was wir wollen Wenn wir hier in die untere linke Ecke kommen, können Sie in meinem Fall sehen, dass wir hier einige Tabs haben, verschiedene Tabs. Einer heißt Locals und einer heißt Autos. Genau hier. Wenn Sie nichts davon sehen, gehen Sie hier zum Debug-Menü und gehen Sie zu Windows Und dann gibt es hier ein paar Optionen namens Autos und Locals Jetzt werden Ihnen diese Menüoptionen möglicherweise nicht angezeigt, es sei denn, Sie befinden sich in einer Debugging-Sitzung Stellen Sie also sicher, dass Sie gerade debuggen und diese angezeigt werden sollten Sie können auch diese Tastenkombinationen verwenden, sobald Sie diese Fenster hier unten sichtbar haben Diese Fenster bieten einen Echtzeitblick auf die Variablen, als wir zuvor das unmittelbare Fenster gesehen haben, in dem wir uns Werte von Variablen mit dem Fragezeichen ansehen konnten . Bevor wir uns vorstellen, dass es sich eine grafische Benutzeroberfläche für das unmittelbare Fenster handelt, was das Lesen von Variablen und Objekten und dergleichen angeht . Wie dem auch sei, Sie können sehen, dass ich die Ausführung des Codes in dieser Berechnungsmethode angehalten die Ausführung des Codes in dieser Berechnungsmethode Hier haben wir bereits Werte für Nummer eins, Nummer zwei und auch den Unser Ergebnis ist derzeit Null, weil wir keinen Wert festgelegt haben. Wenn wir also in dieses lokale Fenster hier schauen, können wir all diese Werte für diese Variablen in einem einfachen Fenster sehen . So können wir deutlich sehen, was der Benutzer uns gegeben hat und was das Ergebnis sein könnte. Nicht nur das, wenn wir hier auf den Wert doppelklicken, können wir diese Informationen tatsächlich in Echtzeit ändern, genau wie zuvor im Direktfenster können wir diese Werte ändern. Ich gehe zum Ergebnis, ich kann das Ergebnis sogar ändern , bevor es überhaupt initialisiert wurde Und nicht nur das ändert den Operator, es gibt Ihnen nicht nur eine schreibgeschützte Ansicht, Sie können diese Variablen tatsächlich ändern und die Änderungen werden während Ihrer Debugging-Sitzung widergespiegelt während Ihrer Debugging-Sitzung Das ist also ziemlich cool, nicht wahr? Also haben wir uns hier das lokale Fenster angesehen , in dem wir unsere Variablen hier sehen und auch einige der Werte ändern können . Jetzt sind diese im aktuellen Gültigkeitsbereich verfügbar. Das bedeutet also, dass ich hier einen Grenzwert gesetzt habe. Wir befinden uns innerhalb dieser Methode, das ist der aktuelle Geltungsbereich. Wir können hier auf diese Variablen zugreifen, aber außerhalb dieser Methode können wir nichts lesen. Es sind nur Dinge im lokalen Bereich. Was ist für uns hier lokal? Das spiegelt sich in der lokalen Registerkarte genau hier wider. Lassen Sie uns jetzt über das Autofenster sprechen und auch wie sich das Autofenster vom lokalen Fenster unterscheidet. Sie sind sich in ihrem Verhalten ziemlich ähnlich. Sie können Variablenwerte und ähnliches ändern. Sie können den Wert von Variablen und Objekten anzeigen, aber warum unterscheiden sie sich? Das Autofenster hier zeigt Informationen zur aktuellen Zeile an. Wenn ich sage, die aktuelle Zeile, der aktuelle Breakpoint, sehen Sie, dass die Software hier angehalten ist, was durch diesen gelb hervorgehobenen Teil angezeigt wird Wir können Variablen und Objekte in dieser aktuellen Zeile sehen. Genau hier haben wir das Ergebnis. Nicht nur das, wir können auch Informationen aus der vorherigen Zeile einsehen . Jetzt können wir mit zehn Zahlen sehen, ob ich das übertrete. Die Codeausführung geht also zur nächsten Zeile über. Sie können sehen, dass die Informationen in unserem Autofenster geändert wurden. Der Hauptunterschied zwischen Autos und Locals besteht darin , dass dir Autos die aktuelle Zeile und die vorherige Zeile anzeigt und Locals dir alles gibt, was im aktuellen Gültigkeitsbereich ist . Sie können sehen, dass das Locals-Fenster hier keine Nicht-Zeiten enthält, weil wir es hier oben definiert haben. Sie können also sehen, dass es sich um ein statisches privates Feld unserer Programmklasse handelt, sodass es nicht im lokalen Fenster angezeigt wird. Die Einheimischen sind für dich nur die lokalen Dinge. Die lokalen Dinge im Geltungsbereich und die Autos sind die aktuelle Linie und die davor. Das ist der Hauptunterschied. Aber eine Sache, die ich noch nicht besprochen habe, ist, dass sowohl lokale Fenster automatische Fenster Ausdrücke auswerten können. Wenn ich zum Beispiel hierher gehe, wo Ergebnis steht, kann ich das tun, was wir in dem unmittelbaren Fenster getan haben , in dem wir bestimmte Dinge bewertet haben. Ich könnte sagen, das Ergebnis ist fünf plus vier, sodass Sie sehen können, dass das Ergebnis neun ist. Ich kann auch bestehende Variablen verwenden. Nummer eins zum Beispiel plus 567 und das wird ausgewertet, sodass Sie auch Ausdrücke sowohl im lokalen als auch im automatischen Fenster auswerten können sowohl im lokalen als auch im automatischen Fenster Ich habe hier eine Beispielanwendung eingerichtet , die kompliziertere Objekte verwendet Ich habe eine Videospielklasse, die in einigen Dingen an den Konstruktor übergeben wird in einigen Dingen an den Konstruktor übergeben Ich habe eine Liste von Benutzern, und ich füge dieser Liste drei Benutzerobjekte hinzu und erstelle auch eine Liste von ganzen Zahlen Also ziemlich komplizierte Dinge hier drin. Ich habe ganz am Ende einen Breakpoint gesetzt. Also werden wir eine Debugging-Sitzung starten und dann wird unser Breakpoint erreicht, und dann schauen wir uns das lokale Fenster an, um zu sehen, wie das aussehen könnte Ich werde das nur ein wenig erweitern, damit wir ein bisschen besser sehen können Du kannst hier sehen, das ist so ziemlich alles hier. Jetzt habe ich diese Pfeile. Schau mal, diese Spiele sind kompliziertere Objekte. Ich kann einfach auf diesen Pfeil klicken. Ich kann tatsächlich alle Immobilien und verschiedene Dinge hier drinnen sehen . Jetzt hat dieser Kleine ein Vorhängeschloss, was bedeutet, dass es hier ein privates Feld Aber da ist ein kleiner Schraubenschlüssel dran, was bedeutet, dass es ein Grundstück ist Ich kann die Werte hier ändern, sodass Sie sehen können, dass ich einen Textvisualisierer verwenden kann, um mir das anzusehen, sodass ich mir die Werte des Titels ansehen kann Wenn ich auf den Wert doppelklicke, kann ich hier verschiedene Dinge ändern Ich könnte sagen, dass einer für einen Macintosh ist, genau wie früher, als wir einfache Variablen hatten , einfache Werttypen Ich könnte die Werte ändern. Aber selbst bei komplizierten Objekten wie diesem kann ich auch die Werte ändern und auch deren Hierarchie ansehen. Für diese hier, die Benutzerliste, kann ich sie erweitern. Und dann kann ich die Mitglieder dort erweitern und verschiedene Namen und Altersstufen und solche Dinge ansehen. Es ist also sehr nützlich und sehr mächtig. Während einer Debugging-Sitzung können Sie den Status all Ihrer Objekte, unabhängig davon, ob es sich um komplizierte oder einfache Werttypen handelt, oder direkt hier in einem grafischen Fenster Es ist wirklich unglaublich. Und wenn wir uns die Registerkarte „Autos“ ansehen, sagte ich, dass die automatische Registerkarte Informationen über den aktuellen Breakpoint und auch über die zuvor ausgeführte Zeile anzeigt den aktuellen Breakpoint und auch über die zuvor ausgeführte Zeile In diesem Fall haben wir dieser roten Linie einen Breakpoint hinzugefügt. Die letzte Anweisung, die ausgeführt wurde, war diese Zeile genau hier. Daher wird dieses Objekt in unserem Autofenster zur Verfügung gestellt . Wenn Sie eine wirklich umfangreiche Software haben, vielleicht mit Hunderten oder Tausenden von Objekten und Variablen im aktuellen Gültigkeitsbereich, dann können Sie auch danach suchen. Es ist also wirklich sehr nützlich, wie das funktioniert. Und Sie können eine Suchtiefe angeben, was einfach bedeutet, wie viele Pfeile angezeigt werden können , an denen Ihre Suchergebnisse erscheinen können. Sie können also sehen, dass es dort auch viele Tiefenoptionen gibt. Aber das ist wirklich das Prinzip hinter den Lokalen und Autofenstern. Es ermöglicht Ihnen, Variablen anzuzeigen und auch zu ändern. Aber im Gegensatz zum Direktfenster hier bietet es Ihnen eine nette grafische Benutzeroberfläche, bietet es Ihnen eine nette grafische mit der Sie arbeiten können. Außerdem erfahren Sie, wie diese Objekte aussehen, ob es sich um private Felder oder öffentliche Immobilien handelt. In dieser Hinsicht ist es also wirklich sehr nützlich. 57. 11-4. Windows und Quick Watch ansehen: Ich werde jetzt über das Anschauen sprechen, und das bezieht sich wiederum auf das Debuggen in Visual Studio Was ist eigentlich Zuschauen? Ich werde über Quick Watch und Watch Windows sprechen . Also was sind sie? Wenn Sie sich mein anderes Tutorial zu Locals und Autos unter Windows ansehen , funktioniert es irgendwie sehr ähnlich. Der einzige Unterschied zu einem Beobachtungsfenster besteht darin, dass wir auswählen können, was wir dort hinzufügen möchten. Aber nicht nur das, wir können Ausdrücke auswerten. Also, was bedeutet das alles? Lass es uns überprüfen. Moment habe ich eine Beispielanwendung, unsere kleine Taschenrechner-Anwendung. Wenn Sie unseren anderen Tutorials gefolgt sind, habe ich hier gerade einen zufälligen Breakpoint hinzugefügt. Ich bin im Debug-Modus, ich trete in eine Debug-Sitzung ein Der Debugger ist an unsere Software angehängt. Er fragt nach zwei Zahlen und einem Operator, fünf plus sechs Jetzt ist unser Breakpoint erreicht, die Software ist eingefroren. Wir können die Variablen jetzt untersuchen. Wir kommen hierher und haben unser vertrautes lokales Fenster, in dem wir uns den Wert der aktuellen Variablen im aktuellen Gültigkeitsbereich ansehen können . Nummer eins ist fünf, Nummer zwei ist sechs, der Operator ist Plus und das Ergebnis ist 11. Dies sind Werte aller Variablen im aktuellen Gültigkeitsbereich. Sehen Sie sich jetzt das Fenster an. Wenn wir zum Debuggen hierher kommen und dann zum Fenster gehen und dann sehen Sie, dass dort Uhr 123.4 ist , bedeutet das, dass wir bis zu vier Mal Windows ansehen können , vier Sitzungen Lassen Sie uns darüber sprechen, was eine Watch-Session eigentlich ist. Ich werde auf Watch One klicken. Und wenn wir hier runterkommen, können Sie sehen, dass es einen Watch One-Tab gibt , der zusammen mit Einheimischen und Autos erstellt wurde , und jetzt haben wir einen Watch One-Tab. Und du kannst hier sehen, dass es heißt, Objekt zum Ansehen hinzufügen. Was bedeutet das? Nun, wir können uns alles ansehen. Wir wollen eigentlich Variablen und Objekte mögen. Wenn ich zum Beispiel hier zum Code komme , haben wir diese Variablen hier. Nummer eins ist Nummer zwei ist sechs. Wenn ich mit der rechten Maustaste auf Nummer eins klicke, kann ich in diesem Menü auf Uhr hinzufügen klicken. Ich werde genau das Gleiche für Nummer zwei tun. Rechtsklick, Uhr hinzufügen. Wenn wir zum Wachfenster hier unten kommen, können wir sehen, dass es so ziemlich wie das Fenster unserer Einheimischen funktioniert. Wir haben die Variablen, die wir hinzugefügt haben, wir haben die Werte, und wir können die Werte auch ändern, wenn wir wollen. Sie fragen sich vielleicht, warum ich nicht einfach das lokale Fenster verwende? Es macht genau das Gleiche. Der Hauptunterschied zwischen Watch-Fenster und dem Locals-Fenster ist die Uhr. Sie können hinzufügen, was Sie wollen und Sie können auch Ausdrücke hinzufügen. Ich könnte zum Beispiel Nummer eins plus Nummer zwei sagen und dann die Eingabetaste drücken. Ich habe hier einen benutzerdefinierten Ausdruck hinzugefügt. Jetzt, während der gesamten Dauer meiner Debugging-Sitzung, weiß ich, dass der Wert von Nummer eins plus Nummer zwei ist, oder ich habe dort Nummer eins plus Nummer zwei eingegeben Wenn ich tippen lernen kann, ist es 11. Sie können sehen, dass ich hier Ausdrücke eintragen kann. Ich könnte sagen, Nummer eins multipliziert mit dem Ergebnis. Ich kann hier verschiedene benutzerdefinierte Dinge einbauen. Dies ist so ziemlich einer der Hauptunterschiede zwischen dem Wachfenster und dem Fenster für Einheimische. Was waren das für Fenster mit der Uhr 1234? Wenn wir wieder hierher kommen, um zu debuggen, dann Windows, dann schauen Sie zu und klicken Sie auf Watch, um wieder hier runter zu kommen Jetzt haben wir einen weiteren Watch-Tab, dann können wir hier weitere Variablen hinzufügen Jetzt sind diese zusätzlichen Fenster so gut wie nur nützlich, wenn Sie eine wirklich große Anwendung haben. Sie möchten bestimmte Variablen von anderen Variablen isolieren , damit sie besser organisiert sind und Sie nicht verwirrt werden. Wenn Sie vielleicht an einer Taschenrechneranwendung arbeiten, möchten Sie vielleicht all Ihre beobachteten Variablen in dieses Überwachungsfenster einfügen . Vielleicht hat die Taschenrechner-Anwendung eine andere Funktion, die etwas völlig anderes handhabt. Und dann fügst du hier deine Watch-Variablen ein. Sie organisieren Ihre Variablen und Ausdrücke. Sie können bis zu vier Überwachungsfenster einrichten, wenn Sie möchten. Das ist einer der Vorteile und Stärken des Wachfensters. Sie können nicht nur Variablen wie die lokalen Fenster anzeigen und ändern , sondern hier auch Ausdrücke hinzufügen. Das ist ziemlich cool. Sie sind nicht nur auf grundlegende Variablen beschränkt. Sie können sogar Methoden aufrufen. Ich habe zum Beispiel eine Methode namens Calculate. Und dann kann ich berechnen, sagen wir zum Beispiel vier plus acht. Und dann kann ich das da reinschreiben und das wird auch ausgewertet. Ausdrücke sind nicht nur an einfache Variablen gebunden, sondern wir können hier auch ganze Methodenaufrufen einfügen. Es ist wirklich mächtig und auch sehr nützlich besonders beim Debuggen ziemlich großer Anwendungen Und eine Sache, die ich zu Beginn dieses Tutorials erwähnt habe , war Quick Watch. Was ist Quick Watch? Stellen Sie sich vor, Sie möchten sich nur eine einfache Variable sehr schnell ansehen . Angenommen, Sie möchten nur schnell den Wert einer Variablen überprüfen . Das ist so ziemlich der einzige Zweck von Quick Watch. Wenn ich zum Beispiel klicke auf Nummer eins und dann auf Quick Watch oder Shift F neun schreibe und dann auf Quick Watch , erscheint dieses Fenster. Und wenn dieses Fenster erscheint, können Sie das Debuggen nicht fortsetzen Du. Ich bin so ziemlich einfach hier drin geblieben. Hier sehe ich mir schnell die Variable Nummer eins an, ich kann ihren Wert ändern, ich kann alles neu bewerten, was ich will. Und ich kann auch jeden anderen Ausdruck ändern oder eingeben. Ich könnte also sagen rechnen. Und hier ist auch Autocomplete drin. Wenn ich also fünf plus vier sagen und die Eingabetaste drücken möchte, kann ich schnelle Ausdrücke im Handumdrehen machen, aber du bekommst so einen nervigen Dialog Und um ehrlich zu sein, bevorzuge ich es, einfach das Wachfenster zu benutzen , weil es alles macht, was die Schnelluhr tut. Aber ich hebe es nur hervor, weil ich weiß, dass manche Leute es vorziehen, es zu benutzen Ich persönlich bin mir nicht sicher warum. Aber es ist da, wenn du es brauchst. Das ist also im Wesentlichen die Botschaft ich zu vermitteln versuche. Aber das Wachfenster macht alles, was Quick Watch kann. Das ist also das Leistungsspektrum von Watchfenstern in C Sharp. 58. 12-1. Der geschützte Access-Modifier: Ich möchte über den letzten Zugriffsmodifikator sprechen , den wir noch nicht besprochen und der geschützt ist Wir haben über öffentlich, privat und intern gesprochen , aber jetzt werden wir über geschützt sprechen Nun, geschützt ist ein Schlüsselwort, das im Allgemeinen verwendet wird, wenn Sie Klassen in C Sharp erben Wenn Sie also das Tutorial, das ich zur Vererbung gemacht habe, nicht gesehen haben und wenn wir schon dabei sind, wenn Sie das Tutorial, das ich zum Einrichten mehrerer Projekte in Visual Studio gemacht habe, nicht gesehen haben, dann empfehle ich Ihnen dringend, sich diese zuerst anzusehen Hier haben wir ein sehr einfaches Beispiel. Ich habe hier eine Hauptklasse. Hier werden nur vier Videospielobjekte eingerichtet. Wenn wir uns den Videospielkurs hier ansehen, ist nicht viel los. Sie hat ein privates Feld und einen Konstruktor und erbt hier von einer Klasse, die auf dem Hauptspiel basiert Und von hier aus wird der Spielekonstruktor aufgerufen. Sehr einfach, nichts, was wir nicht schon einmal gesehen haben. Wenn wir uns die Basisklasse ansehen, hat sie drei private Felder. Es hat einen Konstruktor, eine öffentliche Beispielmethode und hier ein paar Beispiele für öffentliche Eigenschaften. Hier passieren hier viele öffentliche Dinge. Nun, das Schlüsselwort protected gilt für Methoden wie diese und auch für Eigenschaften. Wenn etwas als geschützt markiert ist, es nur der aktuellen Klasse zur Verfügung , zum Beispiel Game und allem, was davon abstammt , all ihren untergeordneten Denk drüber nach. Wenn Sie wie die Mutter einer Familie sind, dann möchten Sie zum Beispiel nur geschützte Dinge mit Ihren Kindern oder Ihren Enkelkindern teilen Beispiel nur geschützte Dinge mit Ihren Kindern oder Ihren Enkelkindern Stellen Sie sich das so vor, es ist momentan geschützt. Das ist eine öffentliche Methode. Hier. Alles, was es tut, bekommt den Namen und verbindet einige Fäden und den Herausgeber, im Moment ist es öffentlich. Wir können also von überall darauf zugreifen. Wir können von unserem Hauptprogramm aus darauf zugreifen. Wir können vom Videospiel aus darauf zugreifen, kein Problem. Was ich tun werde, ich werde es schützen, damit Sie sehen können, dass es das geschützte Schlüsselwort gibt. Jetzt habe ich das gemacht. Wenn ich diese Klasse hier instanziiere, Spiel aus der Hauptklasse Jetzt ist die Hauptklasse kein Kind dieser Klasse, dann wird sie es auch nicht sein Lass mich das machen, lass mich dir das beweisen. Jetzt können Sie hier sehen, wann ich versuche, auf die Methode zuzugreifen, sie ist überhaupt nicht in dieser Liste enthalten. Und schau dir an, was passiert, wenn ich trotzdem versuche, darauf zuzugreifen automatische Vervollständigung von Visual Studios ignoriere Wenn ich mit der Maus darüber fahre, wird angezeigt, dass aufgrund der Schutzstufe nicht darauf zugegriffen Und das liegt daran, dass es geschützt ist. Es ist also nur in der aktuellen Klasse oder in den untergeordneten Klassen dieser Klasse verfügbar . Zum Beispiel Videospiel, Videospiel ist eine Kinderklasse weil wir von dort erben Wenn wir zum Beispiel einfach Base sagen, dann greifen wir auf die Basisklasse zu, die Game ist Jetzt können wir diese Methode sehen, sie ist in der Liste, und wenn wir versuchen, darauf zuzugreifen, gibt es überhaupt keine Fehler. Das ist die Stärke des geschützten Schlüsselworts in C Sharp. Aber es gibt ein paar Kombinationen , die tatsächlich mit protected kombiniert werden können, und zwar sowohl geschützt intern auch geschützt privat, geschützt privat und geschützt intern. Dies sind ein paar Kombinationen, die wir verwenden können wenn wir uns mit dem Protected Access Modifier befassen Wir können also grundsätzlich Zugriffsmodifikatoren verdoppeln, aber nur, wenn wir protected verwenden Sie können hier sehen, dass wir es allein in drei Kombinationen verwenden können , was wir bereits besprochen haben Es ist in derselben Klasse erhältlich. Methoden und Eigenschaften sind in derselben Klasse oder in einem ihrer untergeordneten Klassen verfügbar . Das haben wir als Nächstes besprochen, Protected Private. Wenn etwas als geschützt oder privat, als Methode oder Eigenschaft markiert ist , dann kann in derselben Assembly darauf zugegriffen werden, aber auch von derselben abgeleiteten Klasse aus. Wenn sich unsere Spieleklasse hier im selben Projekt, in derselben Assembly wie unser Kind befindet , was ein Videospiel wäre. Wenn sie im selben Projekt, in derselben Assembly existieren , dann können wir diese Methoden verwenden. Wenn sich diese Spieldatei hier jedoch in einem anderen Projekt befand, können wir nicht auf die Methoden und Eigenschaften dieser untergeordneten Klasse zugreifen , die privat geschützt ist. Lassen Sie mich Ihnen ein Beispiel dafür zeigen. Jetzt markiere ich Publisher. Das ist hier eine Ladenimmobilie. Herausgeber, ich werde es als privat geschützt vermarkten. Wenn diese Klasse nun außerhalb der aufrufenden Assembly existiert, wo auch immer wir sie verwenden wollen, wird sie nicht funktionieren. Schauen wir uns ein Beispiel an, wie das funktioniert. Wir können Herausgeber sagen. Wir können darauf zugreifen, kein Problem. Wenn ich einfach sage, dass string something gleich publisher ist, ist das kein Problem, weil wir darauf zugreifen können Lassen Sie mich diese Klasse jetzt hierher verschieben. Öffentliche Klasse, Hauptunterricht, außerhalb der aktuellen Versammlung. Wenn Sie mein Tutorial zu mehreren Projekten gesehen haben, wissen Sie wahrscheinlich, wie das geht. Wenn wir hier auf die rechte Seite kommen, bekommen wir unsere Spielklasse. Die übergeordnete Klasse ziehe ich einfach per Drag-and-Drop in das zweite Projekt, das ich eingerichtet habe. Das Prinzip ist, dass ich es jetzt einfach nicht mehr in diesem Projekt haben will , ich werde es löschen. Jetzt ist das Spiel in diesem ganz anderen Projekt hier drüben. Jetzt ist das Spiel hier in einer ganz anderen Baugruppe. Wir können hier zu unserem Videospielkurs zurückkehren, sich in der anderen Assembly befindet. Gehen Sie jetzt hierher, Sie können sehen, dass ein Fehler aufgetreten ist. Es kann also immer noch das Spiel finden weil wir auf die anderen Projekte verweisen, sodass es weiß, wo es ist. Sie können sehen, dass wir von dort erben. Jetzt ist jedoch eine rote Linie aufgetaucht. Und wenn Sie mit der Maus darüber fahren, wird angezeigt, dass der Herausgeber aufgrund seiner Schutzstufe nicht zugänglich ist aufgrund seiner Schutzstufe nicht zugänglich Das liegt daran, dass wir es privat und geschützt haben. Wenn etwas privat geschützt ist, muss es sich in derselben Assembly befinden, also im selben Projekt. Und es muss ein Nachkomme dieser Klasse sein , die privat geschützt ist. Jetzt verstehen wir protected private, dieselbe Assembly und ein untergeordnetes Objekt. Es ist sehr einfach zu erklären, was Protected Internal ist. Dass es ein beliebiger Nachkomme der Klasse sein kann , aber es kann sich auch in jeder anderen Assembly befinden. Es spielt keine Rolle, wo zum Beispiel die Basisklasse befindet. Es könnte in einem ganz anderen Projekt sein. Aber solange es intern geschützt ist, sollten wir darauf zugreifen können. Im Moment haben wir diesen Fehler aufgrund der Schutzstufe, weil sich Videospiel und Spiel in unterschiedlichen Baugruppen befinden. Ich gehe zurück zum Spiel mache diese Eigenschaft jetzt hier zu „ geschützt“, „intern“ oder „ intern geschützt“. Also habe ich das dort eingerichtet, ich gehe zurück zum Videospiel, und jetzt können Sie sehen, dass der Fehler behoben ist. Das ist also der Unterschied zwischen privat geschützt und intern geschützt. Es bedeutet nur, dass sich die Basisklasse entweder in derselben Assembly oder nicht in derselben Assembly befinden muss. Das sind also die drei Zugriffsmodifikatortypen wenn es um protected geht, also um die Basisklasse und ihre untergeordneten Und dann können wir es mit private oder internal verdoppeln , je nachdem , ob sich die Basisklasse in derselben Assembly oder einer anderen Assembly befindet derselben Assembly oder einer anderen Assembly Das ist also der geschützte Zugriffsmodifikator im Shop. 59. 12-2. Das statische Schlüsselwort: Jetzt werde ich über das statische Schlüsselwort sprechen. Möglicherweise haben Sie dies gesehen, wenn Sie unseren anderen Tutorials gefolgt sind . Dieses kleine Schlüsselwort hier heißt statisch, was bedeutet das? Was macht es? Und warum sollten wir es benutzen? Schauen wir uns dieses Beispiel hier an. Ich definiere hier nur vier Videospielobjekte und rufe den Konstruktor mit drei Parametern Wenn ich in die Videospielklasse schaue, hat sie nur drei private Felder Hier ist der Konstruktor, der die privaten Felder festlegt. Ich habe hier nur eine Beispielmethode , die den Titel zurückgibt Und hier nur eine Beispieleigenschaft, die den Herausgeber einfach sehr einfach macht. Wenn ich zum Beispiel einen Kurs wie diesen habe, wie würde ich dann vielleicht die Anzahl der Videospiele, die ich in meiner Sammlung habe, auflisten die Anzahl der Videospiele, die ich in meiner Sammlung habe Dies ist nur ein Beispiel dafür, was ich jedes Mal tun könnte , wenn ich die Videospielklasse instanziiere Ich könnte den Überblick über einen Zähler behalten. Dieser Zähler kann aufzeichnen, wie viele Videospiele ich habe In meiner Sammlung initialisiere ich einen Zähler auf Null. Jedes Mal, wenn ich ein Videospiel erstelle, kann ich den Zähler um Ich könnte zum Beispiel so etwas machen. Das würde vollkommen gut funktionieren. Aber es sieht nicht sehr elegant aus, oder? Nicht nur das, es folgt auch nicht wirklich den Prinzipien der Abstraktion Wir möchten diesen Zähler vielleicht in der Videospielklasse verstecken, zum Beispiel Wie würden wir das erreichen? Wie könnten wir das tun , wenn wir in dieser Videospielklasse einen Zähler einrichten in dieser Videospielklasse einen Zähler würden, zum Beispiel hier. Dann inkrementiere ich im Konstruktor für diese Klasse den Zähler um eins Das Problem ist jedoch, dass dieser Zähler zu jeder Instanz gehört Wenn ich also hierher gehe und vom ersten Spiel aus auf den Zähler zugreifen kann, aber er wird nur den Wert eins haben , weil der Zähler zu jeder einzelnen Instanz gehört. Wie kann ich also einen globalen Zähler haben, etwas innerhalb dieses Videospiels, das die Anzahl der Instanzen dieser Klasse aufzeichnet, die wir erstellen. Und hier kommt das statische Schlüsselwort ins Spiel. Wenn wir das statische Schlüsselwort verwenden, können wir es für Konstruktoren verwenden, wir können es für Felder verwenden, wir können es für Methoden verwenden und wir können es sogar für die gesamte Klasse verwenden zum Beispiel Wenn ich zum Beispiel dieses Zählerfeld als statisch definiere, dann wird dieses Feld von allen Instanzen gemeinsam genutzt , die mit dieser Klasse erstellt wurden Es ist ein Feld auf Klassenebene. Alles, was in der Klasse statisch ist, gehört auf Klassenebene und nicht auf Instanzebene wie hier. Zum Beispiel. Schauen wir uns ein Beispiel dafür an. Jedes Mal, wenn ich hier ein neues Videospiel erstelle, möchte ich in meinem Konstruktor einen Zähler haben , der um eins erhöht wird Dadurch wird die Anzahl der Videospiele in unserer Sammlung gespeichert Was ich zum Beispiel tun könnte, ich könnte hier einfach eine Beispielzeile machen, die auf die Konsole schreibt, wie viele Videospiele wir in unserer Sammlung haben Jedes Mal, wenn ich ein neues Objekt der Videospielklasse konstruiere , erhöhe ich den Zähler , der statisch ist und sich auf Klassenebene jedes Mal um eins Dann gebe ich im Konsolenfenster eine Meldung aus, die nur ausdrückt, wie viele Spiele ich in meiner Sammlung habe , wenn ich dieses Programm starte Jedes Mal. Das ist hier so aufgebaut, weil wir eine neue Instanz erstellen Der Zähler wird jedes Mal um eins erhöht Schauen wir uns das an. Jetzt können Sie hier sehen, dass er jedes Mal um eins erhöht dieser Zähler von all diesen Instanzen gemeinsam genutzt wird Hier ist es ziemlich clever, wie das statische Schlüsselwort funktioniert. Was wir zum Beispiel auch tun können, ist, eine statische Methode zu verwenden. Zum Beispiel kann ich eine statische Methode erstellen , die das Ergebnis meines Zählers abruft. Schauen wir uns das an. Stattdessen werde ich diese Zeile hier entfernen. Im Moment werde ich eine statische Methode erstellen. Was diese Methode macht, sie gibt nur den Zähler zurück. Und es ist eine Methode auf Klassenebene, das heißt, wir greifen von der Klasse aus darauf zu und nicht von einer Instanz aus. Schauen wir uns das jetzt an. Wenn ich hier ins Hauptprogramm gehe, wenn ich zum Beispiel zu Spiel eins gehe, ist Spiel eins jetzt eine Instanz. Diese Methode wird nicht in dieser Liste erscheinen. Sie können sehen, dass es hier keine Methode zum Abrufen von Zählern gibt. Das liegt daran, dass es sich um ein Klassenniveau handelt. In diesem Fall müsste ich den Namen der Klasse eingeben. Sobald ich dann einen Punkt hinter den Namen der Klasse gesetzt habe, sind das hier alle Mitglieder der Klassenebene. Sie können diese Methode hier sehen, die als Get Counter bezeichnet wird. Es ist eine Klassenebene, keine Instanzebene. Und jetzt können wir die Anzahl der Videospiele in unserer Sammlung auf diese Weise ermitteln. Wenn wir das auf der Konsole ausgeben wollen, können wir diese Methode einfach hierher kopieren, sie hier platzieren und dann das Semikolon löschen. Jetzt werde ich die Anwendung ausführen. Sie können sehen, dass wir ein ähnliches Ergebnis haben. Es geht nur darum, die Gesamtzahl der Videospiele in meiner Sammlung zu ermitteln. Und ich weiß zu schätzen, dass ich die Sammlung falsch buchstabiert habe , aber niemand ist perfekt Das ist ein Beispiel für eine statische Methode und auch ein statisches Feld in C Sharp Vielleicht macht dieses statische Schlüsselwort , das wir bisher in all unseren Tutorials gesehen haben, langsam Sinn. Jetzt heißt unsere Hauptklasse hier Programm. Standardmäßig gibt es eine Methode namens main, die statisch ist. Diese Hauptmethode ist eine Methode auf Klassenebene. Standardmäßig ist es die erste Methode, die ausgeführt wird, wenn das Programm ausgeführt wird. Wenn ich hier zum Beispiel eine neue Methode erstelle , habe ich gerade eine Methode wie diese erstellt. Ich versuche, diese Methode von main aus aufzurufen. Dies ist eine statische Methode. Dies ist keine statische Methode. Beobachten Sie, was passiert. Sie können also sehen, dass es hier eine rote Linie gibt. Wenn ich mit der Maus darüber fahre, wird angezeigt, dass die Objektreferenz für den Test des nichtstatischen Feld- oder Eigenschaftenprogramms erforderlich ist Test des nichtstatischen Feld- oder Eigenschaftenprogramms Das liegt daran, dass wir eine nicht statische Methode von einer statischen Methode aus aufrufen eine nicht statische Methode von einer statischen Methode , was nicht erlaubt ist Wenn etwas nicht statisch ist handelt es sich um eine Methode auf Instanzebene. Weil wir uns in einer statischen Methode befinden. Hier gibt es keine Instanz, mit der wir arbeiten können, wir haben keine Instanz erstellt, wir befinden uns nicht innerhalb einer Methode einer Instanz. Es hat nichts mit Instanzen zu tun, die hier vor sich gehen. Wir befinden uns in einer statischen Methode, aber wir versuchen, eine Methode auf Instanzebene aufzurufen. Es wird nicht funktionieren. In solchen Fällen müssten Sie eine Instanz erstellen. Dies ist nur ein Beispiel. Wie dem auch sei, ich würde Ihnen nicht empfehlen, eine Instanz der Programmklasse zu erstellen , aber es hilft nur meiner Erklärung hier. Sobald ich die Instanz vor diese Methode auf Instanzebene gestellt habe , können Sie sehen, dass der Fehler behoben wurde, da alles, was nicht statisch ist, zu einer Instanz gehören sollte, es ist eine Instanzebene. Stattdessen könnten wir diese Methode auch einfach als statisch verspotten. Auf diese Weise ist es völlig in Ordnung, einen statischen Methodentest von einer anderen statischen Methode aus aufzurufen . Eine andere Sache, die wir mit dem Schlüsselwort static tun können , ist, eine ganze Klasse als statisch zu markieren. Was wir tun, wir nehmen das statische Schlüsselwort und platzieren es neben der Klassendefinition ganz oben hier. Wenn Sie das tun, muss auch alles in der Klasse hier statisch sein. Denn wenn Sie dies auf Klassenebene definieren, bedeutet das, dass alles darin statisch sein muss. Aus diesem Grund tauchen all diese Fehler hier auf. Das Wichtigste beim Markieren der Statik einer Klasse ist jedoch , dass wir keine Instanzen statischer Klassen erstellen können . Sie sind abstrakt und implizit versiegelt. Wenn Sie sich an eine abstrakte Klasse erinnern, können Sie keine Instanz davon erstellen Und wenn Sie sich an eine versiegelte Klasse erinnern, können Sie nicht von ihr erben Das ist also implizit, deshalb haben wir hier all diese Fehler , wenn wir eine neue Instanz erstellen, sodass wir das nicht mehr tun können Schauen wir uns an, wie diese Klasse in eine rein statische Klasse umwandeln sich an und schnallen Sie sich an. Lass uns gehen. All diese privaten Felder müssen statisch sein. Jetzt muss unser Konstruktor in einer statischen Klasse statisch sein Statische Konstruktoren können jedoch keine Zugriffsmodifikatoren haben. Wir können dort kein Publikum haben. Außerdem kann es keine Parameter haben. Lassen Sie uns auch diese beiden entfernen. Dieses Schlüsselwort ist irrelevant , da es nur mit Instanzen zu tun hat , die auch gehen müssen. Nun müssen alle unsere Methoden und Eigenschaften auch statisch sein, und das sollte auch reichen. Dies ist ein Beispiel für eine statische Klasse hier. Jetzt fragst du dich vielleicht, naja, wenn ich diese Klasse nicht instanziieren kann, wie heißt dieser Konstruktor dann überhaupt, zum Beispiel, was ist hier los Nun, wenn Sie die Anwendung ausführen und auf diese Klasse zugreifen, wird dieser Konstruktor standardmäßig die Anwendung ausführen und auf diese Klasse zugreifen, wird dieser einmal von der Laufzeitumgebung ausgeführt von der Laufzeitumgebung Dies wird einmal automatisch ausgeführt. Alles hier im Konstruktor, der statische Konstruktor sollte alle Variablen oder alles, was Sie tun möchten, initialisieren Das ist der Zweck eines statischen Konstruktors in einer statischen in Wenn wir hier zu unserer Hauptdatei kommen, können Sie sehen, dass wir keine Instanzen der statischen Klasse erstellen können Instanzen der statischen Klasse Wir können nur auf Klassenebene auf Dinge zugreifen. Jetzt habe ich alles als statisch markiert, die Eigenschaften , die Methoden, so bezeichnen wir die Klasse quasi. Wir setzen den Klassennamen wie zuvor und dann einen Punkt. Dann können wir hier auf verschiedene Dinge zugreifen. Und jetzt, da es keine Instanzen für diese Klasse gibt, werden all diese Mitglieder einmal existieren , weil das der Sinn von Static ist. Wir können einen Herausgeber festlegen und darauf zugreifen. Außerdem können wir die Anzahl unserer Videospiele ermitteln wie wir es zuvor getan haben. Das ist kein Problem. Nur um zu beweisen, dass der Konstruktor einmal ausgeführt wird, schau dir diese Methode hier an, wo ich den Zähler für die Anzahl der Videospiele erhalte , die ich habe Ich werde diese Methode einfach duplizieren , also wird sie zweimal aufgerufen Ich werde hier zwei Breakpoints setzen. Der Code stoppt, wenn diese Zeile erreicht wird, und geht dann in den Konstruktor und setzt dort einen Breakpoint Ich werde jetzt die Anwendung ausführen, damit Sie sehen können, was passiert Jetzt wurde der Konstruktor nicht ausgeführt, aber der Bruch befindet sich in dieser Zeile hier. Das Videospiel bekommt keinen Zähler. Wenn ich darüber hinweggehe, siehst du, dass der Konstruktor hier aufgerufen wird Wenn ich darüber hinweggehe, bekommen wir den Zähler und wir gehen zur nächsten Zeile Wenn ich drüber gehe, siehst du, dass nichts passiert. Der Konstruktor wird hier in dieser ersten Zeile nur einmal aufgerufen und bei nachfolgenden Aufrufen von Methoden, die auf Klassenebene existieren, ignoriert die auf Klassenebene existieren, Ich hoffe, das hat Sinn gemacht. Es ist ziemlich viel zu verarbeiten, aber das ist der Sinn der statischen Schlüsselwörter, um so ziemlich alles , was Sie wollen, auf Klassenebene Das Konzept der Instanzen wird in diesem Fall in dieser Hinsicht so gut wie ignoriert. Ich habe Ihnen ein Beispiel dafür gegeben, wie statische Konstruktoren auch funktionieren Der Konstruktor wird automatisch aufgerufen, wenn Sie eine Methode oder ein Element berühren, und dann wird er bei allen nachfolgenden Aufrufen ignoriert Danach hoffe ich, dass dir das hilft. Das ist die Stärke des statischen Keywords im Shop. 60. 13-1. Das readonly-Keyword: In diesem Tutorial werden wir uns das Schlüsselwort readonly in C Sharp ansehen Was macht nun das Schlüsselwort Read Only? Nun, das Schlüsselwort read only ist ein sogenannter unveränderlicher Datentyp. Was bedeutet das? Das bedeutet, dass Sie, sobald Sie einen Wert in einer Variablen oder einem Feld festgelegt haben , diesen Wert nicht mehr ändern können, sobald er einmal festgelegt wurde. Was bedeutet das alles und welche anderen Bedingungen sind an diesem Prozess beteiligt? Schauen wir uns ein kleines Beispiel an. Hier habe ich eine Klasse namens Dog Dog, die einen Konstruktor hat , der ein Argument namens Breed verwendet, was die Rasse des Hundes ist Wie zum Beispiel ein Terrier oder ein Chihuahua. Ich habe zwei private Felder hier, Rasse, und ein weiteres, das nur eine eindeutige ID für jeden Hund darstellt für Und dann habe ich ein öffentliches Eigentum, das die Hunderasse mit dem Wissen, das wir bisher gesammelt haben, erfasst und auch festlegt . Wenn wir wollen, dass Benutzer sagen können, den Wert der Rasse ermitteln, aber nicht den Wert festlegen, wollen wir, dass er nur dann gelesen wird. Wenn wir zum Beispiel eine Eigenschaft wie diese haben, die dieses private Feld hier verfügbar macht, dann würden wir diese SET-Klausel einfach hier entfernen Wenn wir versuchen, Informationen in die Rasse zu integrieren, werden sie nicht in Buchstaben Wenn ich mich also für eine Hunderasse entscheide und dann versuche, ihr einen Wert zu geben, ist es nicht wirklich wichtig, was wir hier angeben. Wir haben einen Fehler. Wenn wir das herausfinden, heißt es, dass es nicht zugewiesen werden kann, es ist nur lesbar Das ist ein Beispiel dafür , wie man beispielsweise eine Eigenschaft in C Sharp schreibgeschützt Aber warte. Zu Beginn des Tutorials hast du über Felder und Variablen und solche Dinge gesprochen . Wie mache ich das mit dem Schlüsselwort read only? Nun, lassen Sie uns einen Blick darauf werfen. Gehen wir zurück in den Hundeunterricht. Jetzt verwende ich das Schlüsselwort Read Only. Ich werde diese Änderungen rückgängig machen und diese Set-Klausel wieder hier einfügen. Also setzen wir jetzt den Wert, aber jetzt werde ich dieses Feld hier als gelesen markieren. Erst wenn ich das getan habe, können Sie sehen, dass hier ein Fehler aufgetreten ist. Es erlaubt mir nicht mehr, die Set-Klausel zu verwenden. Wenn ich mit der Maus darüber fahre, heißt es, dass ein schreibgeschütztes Feld nicht zugewiesen werden kann, dann gibt es hier eine kleine Bedingung, außer dass wir es in einem Konstruktor wie hier innerhalb eines Konstruktors zuweisen können und außer es ist nur ein hier innerhalb eines Konstruktors zuweisen können und außer es ist nur Setter des Typs, in dem das Feld definiert ist, oder Was bedeutet das alles? Es heißt im Grunde, wenn Sie das Schlüsselwort read only verwenden, können Sie es einmal definieren. Zum Beispiel könnten wir es hier definieren und hier initialisieren. Sagen wir einfach, jeder neue Hund ist zum Beispiel ein Chihuahua. Das ist überhaupt kein Problem. Wir legen es tatsächlich fest, aber wir tun es, wenn wir es deklarieren. Wir deklarieren die Variable hier, aber wir initialisieren sie auch, was erlaubt ist Die andere Sache, die wir auch tun können, ist, sie in einen Konstruktor wie Inside Dog zu setzen in einen Konstruktor wie Inside Und wir können das mehrmals machen. Solange es sich in einem Konstruktor befindet, ist es okay. Wir können es 1.000 Mal machen, wenn wir wollen, aber wir können das nicht intern festlegen, zum Beispiel diese Eigenschaft hier. Wir können zum Beispiel nicht sagen, eine brandneue Methode erstellen und sie hier einstellen . Das wird nicht funktionieren. Du verstehst den Sinn hier. Selbst wenn wir von außerhalb unserer Klasse darauf zugreifen, mache ich es einfach in Kleinbuchstaben. Um nun auf das Feld zuzugreifen, können Sie sehen, dass es nicht der Annahme eines Konstruktors zugewiesen werden kann Annahme eines Konstruktors zugewiesen Das ist also die Stärke des Schlüsselworts Read Only. Und es gibt eine Reihe von Gründen, warum Sie diese verwenden sollten, wenn Sie mit unveränderlichen Datentypen wie dem Schlüsselwort read only arbeiten wie dem Schlüsselwort read only Sie möchten diese für Dinge verwenden , die Sie vielleicht einmal einrichten möchten, aber dann möchten Sie den Wert nie ändern Das liegt daran, dass ich zum Beispiel, wenn ich eine eindeutige Hunde-ID generiere, das nur einmal mache, aber dann möchte ich nicht, dass sich diese ID ändert, weil jedem Hund eine eindeutige ID zugeordnet ist. Wenn ich anfange, die Ausweise von Hunden zu ändern, dann kennen Sie zum Beispiel, wenn wir eine Software haben, die Hunde verfolgt, wenn wir eine Software haben, die Hunde verfolgt, die Hunde, die das Halsband tragen. Und wenn der Hund sich verirrt, können sie das Halsband oder den Mikrochip scannen Und dann verwendet es die ID , um vielleicht auf eine Datenbank zu verweisen und herauszufinden , wer der Besitzer des Hundes ist Vielleicht sollten Sie das nicht nur lesen, dann haben wir vielleicht eine Eigenschaft oder jemand diese Anwendung aufruft, könnte versehentlich die ID ändern, was katastrophale Folgen haben könnte Aus diesem Grund werden im Allgemeinen unveränderliche Datentypen verwendet. Wir möchten verhindern , dass andere Entwickler oder sogar Benutzer der Software diese Werte ändern Aber für so etwas wie eine ID, bei der wir für jeden Hund in unserem System eine eindeutige ID generieren, ist es sehr wichtig, dass wir Felder wie diese schreibgeschützt machen . Es hängt also wirklich ganz von Ihrem System ab , was Sie tun möchten. Aber es ist wirklich eine gute Praxis zu sagen, wenn Sie Variablen oder Felder haben , die die Benutzer nicht ändern sollen, dann machen Sie diese zum Beispiel immer schreibgeschützt. Das ist also eine Möglichkeit, dieses Problem zu lösen. Eine weitere Bedingung, die mit dem Schlüsselwort read only zu tun hat, beispielsweise, dass es nur für Felder verwendet werden kann. Denken Sie jetzt daran, dass Felder das sind, was in Klassen direkt unter der Klassendeklaration definiert wird. Wenn ich hier in mein A-Hauptprogramm gehe und es in einer Methode verwende. Wenn ich das innerhalb einer Methode definiere und dabei natürlich private entferne, dann können Sie sehen, dass es ein Problem gibt. Wenn ich mit der Maus darüber fahre, wird angezeigt, dass der Modifikator „ Nur lesen “ für diesen Artikel nicht gültig ist Das heißt im Grunde, okay, Sie können das Schlüsselwort read only nicht innerhalb einer Methode verwenden, aber wir können es auf Klassenebene verwenden Zum Beispiel können wir es hier verwenden und es ist überhaupt kein Problem. Das wird gut funktionieren. Aber wir können diese internen Methoden nicht verwenden. Es gibt ein anderes Schlüsselwort, das wir vielleicht dafür verwenden könnten, und das ist das konstante Schlüsselwort , über das wir ebenfalls sprechen werden. Das Letzte, worüber ich mit Read Only sprechen möchte , ist, wann wir den Wert festlegen können. Wir können den Wert zur Kompilierzeit setzen, was bedeutet, dass wir ihm in unserem Entwicklungsmodus einen Wert geben können , wenn die Software kompiliert wird, wenn die Prüfung abgeschlossen ist Ich kann Rot einen Wert geben, hier kann ich Chihuahua sagen und Das ist zur Kompilierzeit. Auch hier setzen wir im Konstruktor diesen Wert Wir können den Wert jedoch auch zur Laufzeit ändern , wenn die Software ausgeführt wird Wir können jedoch auch während der Laufzeit, wenn unsere Software tatsächlich läuft, ein schreibgeschütztes Feld initialisieren während der Laufzeit, wenn unsere Software tatsächlich läuft, ein schreibgeschütztes Feld Laufzeit, wenn unsere Software tatsächlich läuft, ein schreibgeschütztes Wenn wir dieses Hundeobjekt genau hier konstruieren, wird der Konstruktor aufgerufen und dann wird diese Codezeile Und das passiert während der Laufzeit, wenn unsere Software läuft Wenn ich die Software starte, können Sie sehen, dass sie diesen Wert im Konstruktor festlegt Es gibt keine Fehler und es ist kein Problem. Wir können zur Kompilierzeit und zur Laufzeit an zwei verschiedenen Stellen ein schreibgeschütztes Feld einrichten . Aber das ist das Nur-Lese-Schlüsselwort in C Sharp und warum Sie es verwenden sollten und auch, wie Sie es verwenden können. 61. 13-2. Das const Keyword: Ich werde über das konstante Schlüsselwort in C Sharp sprechen konstante Schlüsselwort in C Sharp Es sieht ungefähr so aus. Was ist das? Nun, das Schlüsselwort constant ist ein weiterer unveränderlicher Datentyp Wenn Sie sich mein Tutorial zum Schlüsselwort Read Only angesehen haben, wird es viel einfacher sein, das Constant-Schlüsselwort zu verstehen wird es viel einfacher sein, das Constant-Schlüsselwort zu In diesem Tutorial werde ich das Constant-Schlüsselwort erklären, aber auch die Unterschiede zwischen Constant und Read Only aufzeigen , da viele Leute verwirrt sind, welche sie wann verwenden sollten. Schauen wir uns das konstante Schlüsselwort an. Jetzt werde ich das vorherige Beispiel verwenden. Dies wird dazu beitragen, den Unterschied viel besser zu veranschaulichen. Also hier habe ich meinen Hundekurs für alle, die das letzte Tutorial nicht gesehen haben. Ich habe hier zwei Felder, einen Konstruktor, der diese einrichtet, und eine Eigenschaft hier, die nur den Wert der Rasse ermittelt Es ist also eine einfache Hundeklasse. Ich werde dieses private Feld hier, das derzeit schreibgeschützt ist , derzeit schreibgeschützt ist , ändern und es in eine Konstante umwandeln. Dann werde ich das Verhalten und die Unterschiede in diesem Fall demonstrieren . Denken Sie also daran, dass wir mit einem schreibgeschützten Feld hier den Wert tatsächlich von einem Konstruktor festlegen und ihn auch initialisieren können Lassen Sie mich das jetzt in eine Konstante umwandeln. Jetzt können Sie sehen, dass ein Fehler aufgetreten ist. Wenn ich hier mit der Maus über den Fehler fahre, heißt das, dass ein Guid-Typ nicht als Konstante deklariert werden kann Bestimmte Datentypen können nicht konstant sein. Das ist ein kleines Problem. Okay, machen wir unsere ID zu einer Ganzzahl. Stattdessen werden wir ein System haben , das für jeden einzelnen Hund eine eindeutige Ganzzahl generiert. Okay, kein Problem. Wir werden einen anderen Datentyp verwenden. Jetzt gibt es ein anderes Problem. Wenn ich mit der Maus darüber fahre, können Sie sehen dass für ein konstantes Feld ein Wert angegeben werden muss Im Grunde bedeutet das, wenn Sie eine Konstante deklarieren, wie wir es hier tun, müssen Sie sie initialisieren, Sie müssen ihr hier einen Wert geben, alles in einer Zeile Sonst ist es nicht möglich. Wenn wir etwas als Konstante deklarieren, müssen wir ihm einen Wert geben. Sagen wir zum Beispiel einfach 456. Jetzt gibt es hier unten ein anderes Problem. Wenn ich darüber verärgert bin, können Sie sehen, naja, die Fehlermeldung ist nicht sehr klar Aber wenn Sie einmal eine Konstante deklariert und einen Wert darin initialisiert haben, können Sie dieses Feld oder diese Variable nicht mehr von einem anderen Ort aus ändern dieses Feld oder diese Variable nicht mehr von einem anderen Ort aus Nicht in einem Konstruktor. Sie können es nicht von einer Eigenschaft aus ändern. Sie können diesen Wert nicht von außerhalb der Klasse aus ändern . Sobald eine Konstante gesetzt und initialisiert wurde, was Sie beide in einer Zeile tun müssen, können Sie diesen Wert nicht mehr ändern Stellen Sie sich das Schlüsselwort constant also eher als ein stärkeres schreibgeschütztes Schlüsselwort mit viel mehr Einschränkungen bei der Änderung Ihrer Daten Das ist ein wirklich großer Unterschied darum geht, eine eindeutige ID für einen Hund zu generieren Read-Only ist ein gutes Schlüsselwort dafür, weil wir es vom Konstruktor aus initialisieren können Eine eindeutige ID für einen Hund mit einem konstanten Schlüsselwort zu generieren, wäre jedoch für einen Hund mit einem konstanten Schlüsselwort zu generieren, ein sehr schlechter Weg, um mit dieser Situation umzugehen , da const keine gute Möglichkeit wäre Sie fragen sich vielleicht, wofür kann ich const verwenden? Was ist ein gutes Beispiel für die Verwendung dieses konstanten Schlüsselworts? Es scheint ziemlich einschränkend zu sein und es scheint, als könnte ich damit nicht wirklich viel anfangen. Nehmen wir zum Beispiel an, wir arbeiten mit I. Wenn ich Kuchen sage, meine ich nicht Apfelkuchen. Ich meine Torte R im Quadrat 3,1 419. Ich denke, auf Pie wird in der statischen Mathematikklasse zugegriffen. Wir haben uns die statische Mathe-Klasse schon einmal angesehen , als wir zuvor mit Zahlen gearbeitet haben. Und es gibt viele Dinge, die Sie hier tun können. Aber du kannst hier sehen, dass es einen gibt, der Pie heißt. Wenn ich mit der Maus drüber fahre, siehst du, dass Pie eine Konstante ist, 3.1 4159 Ich war nah dran, ich war nah dran. Kuchen ist eine Konstante. Und das liegt daran, dass sich Kuchen nicht ändert. Torte ist immer 3,14 159265. Es ist einfach dieser Wert. Es gibt keinen Grund , warum ich mir jemals vorstellen wo wir den Wert von Pi ändern wollen würden, denn Pi ist, was er ist. Pi ist Pi. Es ist das Verhältnis des Radius zum Umfang. Nun, ich bin kein Mathematiker, aber ich hoffe, ich habe klargestellt , dass Sie Pi niemals ändern müssen, weil es ein festgelegter Wert ist Das ist ein sehr gutes Beispiel für die Verwendung einer Konstante. In diesem Fall ist Pi konstant. Sie ändern Pi nicht. Es ist was es ist. Und wenn Sie es versuchen, können Sie sehen, dass es hier ein Problem gibt. Pi ist also ein sehr gutes Beispiel dafür wo Sie eine Konstante verwenden würden, weil dieser Wert, wenn er einmal gesetzt ist, nie geändert wird und es gibt viele davon. Schau, da sind Pi und ein Handtuch. Ich habe noch nie von Handtuch gehört, aber oh, es hat mit Ausstrahlung zu tun Okay. Hier, eine ferne Erinnerung an eine sehr frühe Mathestunde. Sie können also sehen, dass das der Sinn der Verwendung von Konstanten ist. Hier würden Sie den Wert niemals ändern wollen. Und wenn es einmal gesetzt ist, ist es jetzt konstant Sie legen das zur Kompilierzeit fest, nicht zur Laufzeit. Wenn Ihre Anwendung konstant läuft, benötigen Variablen oder Felder Werte. Sie können den Wert entfernen, die Anwendung ausführen und ihn zuweisen, während die Software ausgeführt wird. Dies geschieht nur zur Kompilierzeit. Eine weitere Sache mit Constant Im Gegensatz zu Read Only Read Only verwenden Sie es private Klassenfelder , wie wir bereits erklärt haben. Mit Constant können wir diese jedoch als private Felder der Klasse verwenden, aber wir können sie auch innerhalb von Methoden verwenden. Zum Beispiel kann ich hier einfach eine Variable deklarieren, ich nenne sie ID, ich gebe ihr den Wert, dann kann ich sie hier für den Rest meiner Methode verwenden . Ich könnte es auch an eine andere Methode übergeben, das ist kein Problem. Konstante Variablen, Sie können sie setzen, deklarieren und initialisieren und dann Methoden weitergeben, ist überhaupt kein Problem Wenn dies jedoch, wie wir zuvor gezeigt haben, nur gelesen wurde, ist dies nicht möglich, da der Schreibschutz auf private Felder beschränkt ist Eine weitere Sache, die ich über das Schlüsselwort constant erwähnen werde über das Schlüsselwort constant erwähnen , ist, dass es standardmäßig implizit statisch Im Grunde bedeutet das, dass es standardmäßig statisch ist. Wenn Sie sich mein vorheriges Tutorial ansehen, in dem wir über das statische Schlüsselwort gesprochen haben, werden Sie sich daran erinnern, dass Static eine Klassenebene ist Hier erstellen wir eine neue Instanz von dog. Dann können wir mit der Instanz, die wir erstellt haben, auf Instanzebene, Felder, Methoden und Eigenschaften zugreifen . Aber wenn wir auf Klassenebene auf Dinge zugreifen, verwenden wir den Namen der Klasse greifen dann auf alles auf Klassenebene zu. Dinge auf Klassenebene sind statisch, genau wie die Konstante hier. Was ich tun werde, ich werde diese konstante ID veröffentlichen. Das heißt, wir können von außerhalb der Klasse darauf zugreifen. Ich gehe wieder raus und setze einen Punkt. Jetzt können Sie sehen, dass der Ausweis hier ist. Das liegt daran, dass Felder , die als konstant markiert sind , implizit statisch und statisch Wenn ich die Instanz DG auf Instanzebene verwende, sehen Sie, dass die ID nicht hier ist Sie ist überhaupt nicht hier. Aber auf Klassenebene lebt es hier. Das liegt daran, dass alles, was als Konstante definiert ist, implizit statisch Es ist auf Klassenebene verfügbar. Sie können sehen, dass es überhaupt nicht statisch ist, es ist nur konstant. Das liegt daran, dass es einen Wert hat und nicht festgelegt werden würde. Wir können ihn nicht ändern. Warum sollten wir wollen, dass jede Instanz einen kleinen Bereich im Speicher hat, in dem diese ID definiert ist? Es macht nicht wirklich Sinn. Wenn Sie 1.000 Hunde in Ihrem System haben, muss ein Teil Ihres Speichers verfügbar sein, um diese konstante ID für jeden Hund in Ihrer Software hinzuzufügen . Nun, das macht keinen Sinn, denn wenn es einmal eingerichtet ist, ist es eingerichtet, das war's. Es ist also wirklich sinnvoll, dies der Klasse zur Verfügung zu stellen. Wenn wir also 1.000 Hund-Instanzen in unserem System haben, haben wir keine 1.000 Kopien einer Variablen, die nicht geändert werden kann. Das ist also der Grund dafür und es macht Sinn, wenn man es so betrachtet. Das hat wirklich ein kleines Problem mit konstanten Feldern zu tun, weil sie auf Klassenebene sind Ich hoffe, dass ich in diesem Tutorial hervorgehoben habe , was das Schlüsselwort constant bewirkt, was es bedeutet und, was noch wichtiger ist, den Unterschied zwischen Konstanten und schreibgeschütztem Lesen in C Sharp 62. 14-1. Stack und Heap-Memory: Wenn Sie Anwendungen mit C Sharp und Visual Studio entwickeln , erstellen Sie Dinge wie Variablen wie Ganzzahlen, Boolenes, vielleicht Instanzen von Klassen, Objekten, Arrays Es ist wichtig zu verstehen, was mit diesen im Arbeitsspeicher des Computers passiert Was wäre, wenn ich dir das sagen würde? Je nachdem, welchen Datentyp Sie für Ihre Variablen ausgewählt haben , wird bestimmt, wo und wie diese im Speicher gespeichert werden. Was meine ich damit? Wenn Sie eine Integer-Variable oder eine Bolen-Variable oder zum Beispiel eine Double-Variable verwenden , dann werden diese von verschiedenen Datentypen aus sehr unterschiedlich gespeichert und abgerufen von verschiedenen Datentypen aus sehr unterschiedlich Und wenn ich verschiedene Datentypen sage, meine ich Dinge wie Zeichenketten, Arrays und benutzerdefinierte Objekte Aber warum ist das wichtig? Nun, es gibt ein paar Gründe, warum Sie vielleicht mehr über Stack- und Heap-Speicher erfahren möchten Erstens kann Ihre Anwendung aus Leistungsgründen viel schneller ausgeführt und ausgeführt werden, wenn Sie diese Konzepte verstehen Aber nicht nur das, sondern was wäre, wenn ich Ihnen sagen würde, dass Sie, wenn Sie beispielsweise ein Objekt an eine Methode übergeben, möglicherweise Daten verlieren oder vorhandene Daten überschreiben könnten Daten verlieren oder vorhandene Daten überschreiben Was würdest du darüber denken? Dies sind zwei der vielen Gründe Stack - und Heap-Speicher vertraut zu machen, und genau das ist der Zweck dieses Tutorials. Aus Erfahrung, und glauben Sie mir, Ihr durchschnittlicher Entwickler nicht viel darüber wissen , was mit diesen Variablen im Speicher passiert jedoch nur ein bisschen Wissen darüber haben , können Sie sich von den anderen abheben. Lassen Sie uns also für einen Moment über Stack-Speicher sprechen. Die Architektur des Stack-Speichers ist wie ein Stapel Pizzen oder so ähnlich Sie fügen dem Stapel immer wieder Pizzen übereinander hinzu und entfernen sie dann nacheinander und entfernen sie dann Also zuerst die oberste, gefolgt von der nächsten , auf die Sie nicht zugreifen können, zum Beispiel Pizzen in Es muss dem Stapel hinzugefügt werden. Also zum Pizzastapel hinzugefügt oder von oben entfernt. So funktioniert Stack-Speicher also. Es ist sequentiell, Sie fügen also Dinge nach oben hinzu und entfernen sie von oben, wir behalten kurzlebige Elemente auf dem Stapel Was ist nun ein kurzlebiger Gegenstand? Nun, diese werden allgemein als Werttypen bezeichnet. Dinge wie Ganzzahlen, Boo lehnt Zeichen, Gleitkommazahlen, Doppelzahlen, Dinge, die ziemlich schnell sind, einfache Dinge, die als nicht komplex angesehen werden Einfache Datentypen wie diese, keine Dinge wie komplexe Objekte Und wenn wir Dinge im Stack-Speicher speichern , werden sie schnell abgerufen. Es ist ein sehr schneller Speicherbereich, allein schon aufgrund der Art und Weise, wie er sequentiell aufgebaut ist Nun, der Heap-Bereich des Speichers ist ganz anders. Stellen Sie sich diesen Stapel Pizzen vor, aber statt eines gut organisierten Stapels werfen Sie sie alle auf den Boden, sodass überall Pizzen im Stapelspeicher liegen, es keine Reihenfolge der Elemente im Speicher an sich gibt Aufgrund der natürlichen Anordnung der Elemente im Heap ist der Speicherabruf jedoch langsamer da der Zugriff auf die Daten komplizierter ist komplizierter Daher wird er als langsamer angesehen als Stack-Speicher. Im Allgemeinen behalten Sie langlebige Elemente auf dem Heap, also komplexe Objekte, aber auch Dinge, die für eine lange Zeit zur Verfügung gestellt werden , für eine lange Dauer der Ausführung Ihrer Anwendung, wohingegen Dinge auf dem Stack als kurzlebig angesehen werden Also vielleicht eine schnelle Berechnung wie vier plus vier, zum Beispiel, welche Arten von Datentypen und Elementen werden im Heap-Bereich des Speichers gespeichert Es sind Dinge wie Objekte, Klassen. Wenn wir eine Klasse instanziieren, können Strings, Strings riesige Elemente, Arrays, alles sein , was global und in Ihrer gesamten Anwendung global verfügbar ist in Ihrer gesamten Anwendung global verfügbar Zum Beispiel, obwohl eine einfache Ganzzahl als Werttyp betrachtet wird Wenn Sie dies jedoch global wie statisch oder so gemacht haben und es für jede Klasse im System verfügbar gemacht wird, dann ändern sich hier die Regeln. Dies würde im Heap-Bereich des Speichers gespeichert werden , da es für länger anhaltende, also langlebige Elemente im Heap verfügbar gemacht werden muss also langlebige Elemente im Heap Dinge wie Zeichenketten, Klassen, wie sie alle als Referenztypen betrachtet werden , das ist das Schlüsselwort Möglicherweise hören Sie in Zukunft viel, wenn Sie einen neuen Referenztyp erstellen , der im Heap-Bereich des Speichers gespeichert wird der im Heap-Bereich des Speichers gespeichert Was auch passiert, ist, dass auf dem Stapel ein sogenannter Zeiger erzeugt wird Was also passiert, ist, dass der Zeiger auf dem Stapel auf einen Bereich des Heap-Speichers zeigt , in dem sich Ihre Objektdaten befinden. Wenn Sie beispielsweise einen Referenztyp wie ein Array erstellen , wird dem Stapel ein Zeiger hinzugefügt und der eigentliche Inhalt der Operation wird dem Heap hinzugefügt Die Information auf dem Stapel sagt so ziemlich genau, okay, du kannst sie genau hier an dieser Speicherposition auf dem Heap finden an dieser Speicherposition auf dem Heap Das ist das einzige, was dem Stapel hinzugefügt wird , wenn Sie einen Referenztyp erstellen, etwas Kompliziertes, wie zum Beispiel ein Array Daher kommt der Name Referenztyp , weil wir uns vom Stack auf den Heap beziehen, auf dem sich der Datenscanner Und aus diesem Grund werden Dinge wie ganze Zahlen, Boulen, Shahs und einfache Typen Werttypen genannt, weil der Wert direkt im Stack-Bereich des Speichers gespeichert wird Jetzt weiß ich, dass das eine Menge zu verstehen und zu lernen ist , aber mach dir keine Gedanken darüber, alles zu verstehen , was ich in diesem Tutorial skizziert habe Die wichtigste Erkenntnis besteht darin, zu wissen und zu verstehen, dass bestimmte Datentypen im Stack-Bereich des Speichers gespeichert werden im Stack-Bereich des Speichers gespeichert Und der Stack-Bereich des Speichers hat seine eigenen Eigenschaften und Vorteile, und andere Datentypen werden wiederum auf dem Heap gespeichert , mit ihren eigenen Eigenschaften und Ähnlichem In den nächsten Tutorials werde ich einige Beispiele verwenden, werde ich einige Beispiele verwenden damit Sie das besser verstehen können Sie sich also keine Gedanken darüber, ob Sie jetzt alles verstehen, aber jetzt werde ich über etwas sprechen, das als Stack-Overflow bezeichnet wird Vielleicht haben Sie schon einmal vom Website-Stack-Overflow gehört, oder vielleicht haben Sie schon einmal von dem Begriff gehört Es spielt keine Rolle, ob Sie davon gehört haben oder nicht, aber wir werden absichtlich einen Stack-Überlauf in C Sharp verursachen Und ich denke, es wird ein ziemlich lustiges Beispiel sein, es zu simulieren, weil ich Ihnen zeigen kann, dass Stack-Speicher eine Größenbeschränkung hat Und das ist der Grund, warum große, komplizierte Objekte auf dem Heap gespeichert werden Versuchen wir also, den Stapelbereich des Speichers zu überlaufen. Jetzt mit einem kurzen Beispiel. Ich bin hier in Visual Studio. Jetzt habe ich eine sehr einfache Anwendung aus der Hauptmethode. Hier rufen wir eine Overflow-Methode auf. Und die Overflow-Methode schreibt einfach Hallo in das Konsolenfenster Also ist hier nicht viel los. Eine einfache Möglichkeit, einen Stack-Overflow zu verursachen, besteht nun darin, eine Methode selbst aufzurufen Möglicherweise stellen Sie sich die folgende Frage: Wie verursacht dies einen Stack-Überlauf Ich definiere keine ganzen Zahlen, Boolesche Werte oder ähnliches Was läuft eigentlich über den Stapel? Nun, wenn Sie eine Methode aufrufen, wird die Methodenreferenz auch zum Stack hinzugefügt Dies ist ein weiteres Beispiel für Stack-Speicher. Wir können also auch einen solchen Stack-Overflow erreichen. In ähnlicher Weise können wir ein paar Millionen Variablen erstellen, die Ganzzahlen, vielleicht würde das auch funktionieren Vielleicht gibt es viele Möglichkeiten, dies zu erreichen, aber dies ist ein kurzes Beispiel eine sehr einfache Möglichkeit, dies zu tun Also werde ich die Anwendung jetzt ausführen und wir werden sehen , was passiert. Ich führe die Anwendung aus, sie stürzt so ziemlich ab. In Visual Studio heißt es Stack-Overflow-Ausnahme. Wenn ich mir das Konsolenfenster hier ansehe, können Sie sehen, dass der Stack-Überlauf 24.109 Mal wiederholt wird, bevor der Stapel vollständig voll ist und Wenn wir uns dieses Diagramm hier ansehen, können Sie sehen, wie der Stack - und der Heap-Speicher wachsen, aber der Stack-Speicher aber der Der Sinn des Stack-Speichers besteht darin, tatsächliche Werte für Datentypen wie Ganzzahlen zu speichern tatsächliche Werte für Datentypen wie Ganzzahlen Es speichert zum Beispiel 15 auf dem Stack, 15 auf dem Stack, wenn wir einen großen Referenztyp wie ein Array haben , dann wird dieser auf dem Heap gespeichert, weil diese sehr, sehr groß werden können Aufgrund des Speicherbereichs des Stapels ist er jedoch begrenzt. Es ist endlich. Sie können hier nur so viele Informationen angeben. Und wie Sie hier sehen können, können wir 24.109 Mal einen Verweis auf unseren Methodenaufruf speichern So begrenzt ist es also und diesem Grund wird nicht alles auf dem Stack gespeichert Ja, der Stapel ist schnell, aber sein Speicherplatz ist begrenzt. Der Heap ist langsamer, aber er ist viel größer Sie sehen also die Vor- und Nachteile der beiden, und aus diesem Grund gibt es beide und es ist auch wichtig , beide zu verstehen Also möchte ich über eine weitere Sache sprechen, und das ist der Call Stack. Was ist der Call Stack? Wenn ich hier zurück in Visual Studio gehe und nach unten scrolle, können Sie sehen, dass es hier ein kleines Fenster namens Stack gibt. Wenn Sie dieses Fenster nicht sehen, gehen Sie nach oben, gehen Sie zu Bug, dann Windows und rufen Sie dann Stack auf. Und das sollte hier unten erscheinen. Was die Aufrufliste macht, sie gibt Ihnen zum Beispiel eine visuelle Darstellung Ihrer Methodenaufrufen. Sie können hier also sehen, dass wir mit der Hauptmethode begonnen haben. Hier haben wir Overflow aufgerufen und das 24.106 Mal wiederholt, bis wir schließlich in einem Stack-Overflow enden Es gibt Ihnen eine schöne visuelle Darstellung . Und Sie können sehen, dass die Architektur hier dem Pizza-Beispiel, über das ich vorhin gesprochen habe, ziemlich ähnlich ist , wobei der erste Anruf die untere Pizza ist. Und diese werden langsam dem Stapel hinzugefügt. Aber der Grund, warum ich gerade über den Call-Stack spreche , ist, dass Anfänger-Entwickler, kann ich zwischen dem Stack-Speicher und dem Call-Stack ein bisschen verwechseln ? Die Aufrufliste bietet Ihnen eine schöne visuelle Darstellung Ihrer Methodenaufrufen. Aber es ist kein Stack-Speicher. Das ist nicht das, was Sie im Stack-Speicher sehen. Die Aufrufliste zeigt Ihnen nicht Ihre Variablen und Zuweisungen und ähnliches. Es gibt dir nur die Methodenaufrufen , solange sie lose miteinander verwandt sind Die Aufrufliste ist kein Stack-Speicher Ich kann das jetzt mit einem besseren Beispiel für den Call-Stack veranschaulichen einem besseren Beispiel für den Call-Stack Schauen Sie sich dieses Beispiel hier an. Es ist ziemlich einfach. Die Hauptmethode hier nennt Methode eins. Methode eins ruft Methode 22 auf, ruft 33 auf vier. Schließlich, in vier, sagen wir einfach Hallo zum Konsolenfenster. Es ist sehr einfach, aber dieses Beispiel zeigt Ihnen, wie der Aufruf-Stack funktioniert und wie diese Methodenreferenzen dem Stack-Speicher hinzugefügt werden. Im Grunde die Stack-Architektur, die Pizza-Architektur. Schauen wir uns ein Beispiel an. Im Moment habe ich hier in der allerersten Zeile einen Breakpoint hinzugefügt . Wir werden also in den Pausenmodus wechseln sobald dieser aktiviert ist. Also werde ich die Anwendung jetzt kompilieren und ausführen, jetzt sind wir hier im Pausenmodus. Wenn ich nur dieses Fenster mit der Aufrufliste öffne, können Sie sehen, dass ein Element zur Aufrufliste hinzugefügt wurde , nämlich Main. Jetzt fange ich an, indem ich 11 auf der Tastatur drücke. Jetzt können Sie sehen, dass ich mich in Methode eins befinde. Jetzt wurde das hier zur Aufrufliste hinzugefügt. Das ist unsere erste Pizza in unserem Stapel. Das ist unsere zweite Pizza. Jetzt drücke ich wieder F 11. Jetzt haben wir unsere dritte Pizza oben drauf. Ich werde mich noch einmal damit befassen. Wir haben unsere vierte Pizza. Sie können sehen, wie das funktioniert. Die Aufrufliste gibt Ihnen also eine schöne visuelle Darstellung davon , wo Sie sich während einer Debugging-Sitzung in Ihrer Anwendung befinden während einer Debugging-Sitzung in Ihrer Anwendung Es ist auch halb interaktiv. Sie können darauf doppelklicken und sehen, wo Sie sich befinden wo aus diese Methode aufgerufen wurde. Das ist sehr hilfreich, wenn Sie mehrere Dateien, Lösungen, Projekte usw. haben und von wo aus diese Methode aufgerufen wurde. Das ist sehr hilfreich, wenn Sie mehrere Dateien, Lösungen, Projekte usw. haben. Es kann Sie direkt dorthin führen, von wo aus diese aufgerufen wurde. Dies ist jedoch eine ähnliche Darstellung wie die Funktionsweise von Stack-Speicher. Wir haben hier unseren ersten Wert, dann werden sie gestapelt und dann werden sie in dieser Reihenfolge wieder entfernt. Sie können nicht nach dem Zufallsprinzip aufgerufen werden. Es ist also wie first in, first out, was die Terminologie dort ist. Der Stack-Speicher und der Aufruf-Stack verwenden die Stack-Architektur. Und obwohl sie verwandt sind, sind sie nicht genau dasselbe. Ich hoffe, das ergibt Sinn. Wenn ich dann zu Methode vier übergehe, können Sie sehen, dass dies die letzte ist, die der Aufrufliste hinzugefügt wurde. Und dann gehe ich drüber, und jetzt können Sie sehen, dass sie langsam vom Stapel verschwinden Methode drei wird die nächste sein, die aufhört, weil wir gerade dabei sind, da rauszukommen Dann zwei, dann eins. Jetzt sind wir wieder bei der Hauptmethode. Sie können sehen, dass es das letzte verbleibende Element in der Aufrufliste ist. Das ist also der Kernstapel, und das ist auch die Stack-Architektur. Und Sie werden die Stack-Architektur in vielen verschiedenen Programmiersprachen sehen , aber sie ist auch nicht auf die Programmierung beschränkt. Eine letzte Sache, über die ich sprechen werde, ist ein Schlüsselwort, das Sie vielleicht in Zukunft hören werden : Müllabfuhr. Was ist also Müllabfuhr? Nun, als ich über die Erstellung von Referenztypen sprach , zum Beispiel Dinge, die im Heap-Bereich des Speichers gespeichert sind, wie Klassen, Klasseninstanzen, Zeichenketten, Arrays und solche Dinge Ich habe auch gesagt, dass ein Zeiger auf dem Stapel erstellt wird und dieser auf die Informationen auf dem Heap verweist Es ist wie ein Zeiger. Was passieren kann, ist der Zeiger aus dem Stapelbereich des Speichers entfernt wird, die eigentlichen Daten jedoch auf dem Heap zurückbleiben Jetzt hat unsere Anwendung keine Ahnung mehr, wo sich diese Informationen befinden. Vielleicht benötigt sie die Daten nicht einmal mehr. Aber es könnte immer noch im Heap-Bereich des Speichers existieren. Da der Zeiger jedoch nicht mehr darauf im Stapelbereich des Speichers zeigt, diese Daten auf dem Heap nutzlos Es kann nicht verwendet werden, es kann nicht gefunden werden. Es kann einfach deinen Speicher auffüllen , bis kein Speicher mehr übrig ist. Das ist ein ziemlich großes Problem. Dies wird normalerweise als Speicherleck bezeichnet . Es gibt also so etwas wie die Müllabfuhr , die quasi den ganzen Haufen durchsucht Speicherbereich, ermittelt, ob auf dem Stapel ein Zeiger darauf zeigt, und wenn nicht, wird er entfernt, er gibt Speicher frei Und genau das macht die Müllabfuhr. Und in einer Sprache wie C Shop müssen Sie sich keine Gedanken über die Müllabfuhr machen. Aber ich dachte, es wäre eine interessante Kleinigkeit , dir das zu erzählen Aber wenn du mit anderen Sprachen arbeitest, vielleicht wie C plus plus, dann musst du dir Gedanken über die Müllabfuhr machen Vielleicht ist es etwas, das man in Betracht ziehen sollte, aber es ist schön zu wissen. Und wenn Ihre Anwendung geschlossen oder beendet wird, wird der Speicher in der Regel freigegeben 63. 14-2. Methodenparameter: Weitergeben nach Wert: Bevor Sie sich dieses Tutorial ansehen, empfehle ich Ihnen dringend, sich das vorherige Tutorial zu Stack- und Heap-Speicher Andernfalls macht dies möglicherweise keinen Sinn , es sei denn, Sie sind mit Stack- und Heap-Speicher vertraut Schauen wir uns nun dieses Beispiel an. Hier sehen wir uns eine Methode an jetzt einige Parameter an eine Methode übergibt. Dann werden wir einige Werte ändern. Betrachten Sie einfach dieses Beispiel hier. Es ist ziemlich einfach. In der Hauptmethode der Anwendung definiere ich hier zwei Variablen vom Typ Wert. Jetzt werden diese im Stack, dem Stack-Bereich des Speichers, gespeichert , es sind Werttypen. Dann gebe ich die Werte für diese Variablen in das Konsolenfenster aus. Ich rufe dann eine Methode namens Reset auf. Und ich übergebe diese beiden Variablen vom Wertetyp genau hier an diese Methode, ich setze diese Variablen zurück, die auf Null übergeben werden , und gebe sie dann im Konsolenfenster Sobald die Methode fertig ist, die Ausführungssteuerung wieder hier oben übergeben Und dann gebe ich die Werte dieser Variablen erneut Und dann lasse ich das Konsolenfenster offen. Frage, was denkst du wäre das Ergebnis? Nun, schauen wir uns an, was die Ausgabe tatsächlich ist. Ich werde das Programm jetzt ausführen. Der Wert von Nummer eins ist der Wert von Nummer zwei ist vier. Und dann ist der Wert innerhalb der Methode Null, weil wir sie zurücksetzen Und dann, nachdem die Methode 6.4 ausgeführt wurde, haben Sie das erwartet? Vielleicht, aber schauen Sie sich jetzt dieses andere Beispiel an. Schauen wir uns dieses Beispiel hier an. Es ist dem vorherigen Beispiel sehr ähnlich, aber anstatt einen einfachen Wertetyp wie eine Ganzzahl zu verwenden, verwenden wir einen Referenztyp. Und Referenztypen werden, wie wir bereits erwähnt haben, im Heap-Bereich des Speichers gespeichert, und ein Zeiger auf diese Daten wird auf dem Stapel gespeichert Was wir tun, wir instanziieren ein Videospielobjekt Wenn ich zum Videospielkurs gehe, kannst du sehen, dass es ziemlich einfach ist Es gibt hier ein privates Feld namens title und ein öffentliches Property namens title, das den Abruf und die Einstellung dieses Feldes hier steuert. Sehr einfach. Wir geben hier den Titel für das Videospiel ein, World of Warcraft, und dann geben wir ihn im Fenster Wir erhalten den Titel, bevor eine Methode aufgerufen wird. Jetzt ändern wir hier den Titel. Bei dieser Methode nimmt es ein Videospielobjekt auf und dann geben wir etwas in das Fenster aus Wir geben es in das Fenster innerhalb der Methode aus. Aber bevor wir den Titel des Spiels innerhalb dieser Methode ändern , ändern wir den Spieltitel etwas anderes zu ändern Nachdem die Ausführung der Methode abgeschlossen ist, geben wir den Spieltitel erneut Was glaubst du nun, wird dieses Mal passieren? Okay, schauen wir uns das Ergebnis an. Wenn ich die Anwendung starte, können Sie hier den Spieltitel sehen bevor die Methode World of Warcraft lautet Der Spieltitel innerhalb der Methode ist World of Warcraft. Denken Sie bei der Methode daran, dies vor der Änderung der Fall ist, aber nachdem die Ausführung der Methode abgeschlossen ist, kehren wir nach Maine zurück und geben das Ergebnis aus Hier können Sie jedoch sehen, dass der Wert, in den wir ihn innerhalb der Methode geändert haben , beibehalten der Wert, in den wir ihn innerhalb der Methode geändert haben wird. Warum ist das so? Warum werden diese Änderungen aufgrund von Änderungen innerhalb von Methoden für Referenztypen, aber nicht für Werttypen beibehalten innerhalb von Methoden für Referenztypen, aber nicht für Werttypen Was ist hier los? Nun, gestatten Sie mir das zu erklären. Ich komme jetzt zum vorherigen Beispiel zurück , wo wir hier zwei einfache Werttypen hatten, zwei ganze Zahlen, und wir haben sie hier in eine Methode übergeben Wenn nun in C Sharp Objekte übergeben werden, egal ob es sich um Werttypen oder Referenztypen als Parameter an Methoden handelt, werden diese standardmäßig als Wert übergeben Sie werden als Wert übergeben, sofern nicht ausdrücklich anders angegeben, sollten sie als Referenz übergeben werden. Wir werden später über die Weitergabe per Referenz sprechen. Aber denken Sie an die Standardeinstellung, die hier als Wert übergeben wird. Was bedeutet es, als Wert übergeben zu werden? Nun, standardmäßig wird, wenn Sie eine Methode aufrufen und diese beiden Parameter hier übergeben, eine Kopie, eine Kopie dieser Daten erstellt. Hier haben wir einen Wert von sechs in Nummer eins und einen Wert von vier in Nummer zwei. Wir nennen diese Methode hier. Innerhalb dieser Methode erhält sie eine Kopie dieser Variablen. Es zeigt nicht auf denselben Bereich wie die Erinnerung an diese. Diese werden buchstäblich kopiert. Dann funktioniert die Methode tatsächlich mit einer doppelten Kopie dieser Variablen. Das bedeutet es, wenn ein Wert übergeben wird. Jede Arbeit, die wir hier innerhalb dieser Methode ausführen, wird mit einer Kopie dieser Variablen ausgeführt. Und wenn die Ausführung der Methode abgeschlossen ist und die Kontrolle hier zurückgegeben wird, verlieren wir alles darin , weil es sich um eine doppelte Kopie handelt , die nur innerhalb der Methode existiert. Sobald die Methode fertig ist, wissen wir nichts davon, es sei denn wir geben ausdrücklich etwas zurück. Das ist ein Beispiel für die Übergabe eines Wertetyps an eine Methode und dieser wird als Wert übergeben, es hat keine Auswirkungen auf irgendetwas außerhalb der Methode. Kommen wir zurück zu unserem anderen Beispiel, in dem wir den Namen des Videospielobjekts geändert haben. Wenn ich Daten als Wert übergebe, warum bleibt diese Änderung dann außerhalb der Methode bestehen Sicherlich macht das keinen Sinn. Nun, das liegt daran, dass wir einen Referenztyp als Wert übergeben . Wie ich schon sagte, wenn Sie Parameter standardmäßig an Methoden übergeben , erfolgt dies nach Wert. Wir übergeben jedoch einen Referenztyp. Denken Sie daran, dass wir zuvor über Referenztypen gesprochen haben, bei denen es sich um komplizierte Objekte handelt. Sie können Arrays, Listen und all diese Dinge sein Und das wird im Heap-Bereich des Speichers gespeichert , aber wie gesagt, es gibt einen Zeiger, der im Stapelbereich des Speichers gespeichert ist und auf diese Daten im Heap zeigt Wenn diese Methode aufgerufen wird, wird sie ja in die Methode kopiert, aber der Heap-Speicher wird Nur der Zeiger auf dem Stapel wird kopiert. Das scheint wirklich kontraintuitiv zu sein, denn ja, wir übergeben dieses Referenzobjekt als Wert. Da es sich jedoch um ein Referenzobjekt handelt, kopieren wir lediglich den Zeiger innerhalb dieser Methode. Hier arbeiten wir mit einer Kopie des Zeigers, die im Stack-Speicher gespeichert ist. Es zeigt jedoch immer noch auf denselben Speicherbereich auf dem Heap Bei dieser Hauptmethode zeigen wir auf den Speicherbereich auf dem Heap, aber auch innerhalb dieser Obwohl wir mit einer Kopie des Zeigers auf dem Stapel arbeiten , zeigt er immer noch auf diesen Speicherbereich auf dem Heap diesem Grund ändert sich der Titel immer noch , denn obwohl wir mit einer Kopie des Zeigers arbeiten, zeigt er immer noch auf denselben Speicherbereich Aus diesem Grund ändert sich der Titel innerhalb der Methode immer noch. Und wir können hier sehen, dass die Änderungen nach dem Aufruf der Methode auch nach der Ausführung der Methode bestehen blieben Ich weiß, dass das ziemlich viel zu verarbeiten ist, aber wenn du dir das vorherige Tutorial und auch dieses noch ein paar Mal ansiehst , und du wirst es verstehen, ich verspreche es, als ich sagte, dass eine Kopie des Zeigers in diese Methode hier übergeben wird, zum Beispiel, wenn ich jetzt mit dieser Kopie des Zeigers arbeite. Also dieses Spiel hier, ich kann ein neues Objekt, eine neue Instanz initialisieren Das bedeutet, dass es einen neuen Speicherbereich zuweist. Hier arbeite ich mit der Kopie des Zeigers, aber ich sage, okay, erstelle jetzt ein neues Objekt auf dieser Kopie des Also, was das machen wird, das wird mit einer völlig neuen Kopie der Daten funktionieren und diese auf den Haufen legen Was wir hier machen, sobald die Methode aufgerufen wurde, wir hier den Titel des Spiels Lassen Sie uns das sogar hier platzieren. Jetzt haben wir eine neue Instanz des Spiels. Wir setzen den Titel dieser neuen Instanz auf „Geändert und geben ihn dann aus Und wir geben hier immer noch den Titel nach der Methode aus Was glaubst du, wird jetzt passieren? Nun, lass uns einen Blick darauf werfen. Lass uns das Programm ausführen. Sie können jetzt sehen, dass etwas anderes passiert ist. Wir haben hier unseren Originaltitel am Anfang. Dann wurde er innerhalb der Methode geändert. Nach der Methode hat sie jedoch immer noch ihren ursprünglichen Titel von früher beibehalten. Warum ist das hier los? Wie ich bereits erwähnt habe, ist dies ein Referenztyp. Standardmäßig wird es innerhalb der Methode als Wert übergeben . Wir haben eine Kopie dieses Referenztypenzeigers, sich im Stack-Speicher befindet. Wir geben ihm jetzt einen neuen Speicherort und legen fest, dass dieser neue Speicherort geändert werden soll. Außerhalb der Methode hat dies jedoch keine Kenntnis von diesem neuen Speicherort. Das passiert nur innerhalb der Methode. Nur innerhalb dieser Methode ist das Wissen über diesen neuen Speicherbereich auf dem Heap vorhanden und wir weisen darauf hin Diese Änderung wird jedoch nicht außerhalb der Methode beibehalten , sondern es wird mit einer vorhandenen Kopie des Zeigers gearbeitet , was sich wiederum auf den Heap auswirkt Genau wie von hier aus weisen wir tatsächlich einen neuen Speicherbereich auf dem Heap zu und zeigen unsere Kopie des Zeigers darauf, und das ist der Grund, warum das passiert Schauen wir uns hier noch ein Beispiel an. Auch dies wird so ziemlich die gleiche Ausgabe haben wie unser vorheriger Referenztyp , der eine Instanz eines Videospielobjekts war. Aber hier haben wir einen anderen Referenztyp, eine Liste. Auch hier könnte es ein beliebiger Referenztyp sein, es könnte ein Array sein, es könnte ein Wörterbuch sein, es könnten viele verschiedene Dinge sein. Dies wird wiederum im Heap-Speicher gespeichert. Eine Liste mit vier ganzen Zahlen, wir geben die Anzahl der Liste und dann übergeben wir die Liste an diese Methode Jetzt wird es standardmäßig als Wert übergeben, aber das ist ein Referenztyp. Eine Kopie des Zeigers wird in die Methode kopiert. Jetzt kann die Methode mit einer Kopie des Zeigers arbeiten, die praktischerweise auf denselben Bereich im Heap-Speicher zeigt wie dieser. Außerhalb der Methode Dann fügen wir der Liste zwei Zahlen hinzu und dann die Listenanzahl aus Sobald die Methode beendet ist, geben wir die Listenanzahl Was glauben Sie, werden die Ergebnisse sein? Nun, lassen Sie uns einen Blick darauf werfen. Sie können die Zahlen von 466 sehen. Das liegt daran, dass die Methode zwei Zahlen addiert. Und sobald wir hier draußen sind, zeigt es auf denselben Bereich des Heap-Speichers, es wird diese Anzahl beibehalten Jetzt zur Methode, wenn ich die Liste hier nur leicht modifiziere Jetzt innerhalb der Methode wird diese Liste erneut als Wert übergeben. Aber es ist eine Kopie des Zeigers. Mit der Kopie des Zeigers und jetzt zeigt er ihn auf einen brandneuen Bereich im Heap-Speicher und fügt dann zwei Zahlen zu dieser brandneuen Liste Was wird Ihrer Meinung nach die Ausgabe sein? Lassen Sie uns jetzt das Programm ausführen. Sie können sehen, dass wir vier bis vier haben. Sie können sehen, dass unsere erste Liste vier enthält. Das ist richtig. Innerhalb der Methode erstellen wir eine brandneue Liste. Sie enthält nur zwei Zahlen. Von dort kommen die beiden. Jetzt ist die Methode fertig, wir haben immer noch Zugriff auf diesen ursprünglichen Bereich. Im Heap-Speicher werden die vier ausgegeben. Sie können also sehen, dass es mit allen verschiedenen Arten von Referenztypen funktioniert allen verschiedenen Arten von Referenztypen Und das ist das Standardverhalten von Methoden in C Sharp. Also werde ich jetzt den Kreis schließen. Zu Beginn des vorherigen Tutorials sagte ich, warum muss ich etwas über Stack- und Heap-Speicher wissen? Warum ist es wichtig? Nun, Sie können sehen, dass unerwartete Dinge passieren können, wenn Sie keine Kenntnisse über Stack - und Heap-Speicher sowie Variablen vom Typ Wert und Referenztyp unerwartete Dinge passieren können Unerwartete Dinge sind aus offensichtlichen Gründen ein ziemlich großes Problem in der Software Deshalb ist es wichtig, und hier ist ein Beispiel dafür in der Praxis. 64. 14-3. Methodenparameter: Weitergeben nach Referenz (das Schlüsselwort ref): Die Referenz, Schlüsselwort, das Methodenparameter als Referenz weitergibt. Wenn Sie meine beiden vorherigen Tutorials zu diesem Thema nicht gesehen haben , in denen wir über Stack - und Heap-Speicher, aber auch über die Übergabe von Werten gesprochen haben , dann empfehle ich Ihnen dringend sich diese anzusehen, bevor Sie mit diesem Tutorial fortfahren , da sie mit den in diesem Tutorial beschriebenen Konzepten Im vorherigen Tutorial haben wir darüber gesprochen, wie unterschiedlich Objekttypen wenn sie als Parameter an Methoden übergeben werden Standardmäßig werden sie als Wert übergeben, was bedeutet, dass eine Kopie des tatsächlichen Werts oder eine Kopie des Zeigers erstellt wird und die Methode mit der Kopie arbeitet. Jetzt werde ich über die Weitergabe per Referenz sprechen. Nun, die Weitergabe per Referenz ist kein Standardverhalten und beinhaltet auch die Diskussion über ein brandneues Schlüsselwort namens Ref-Schlüsselwort. Also, wie funktioniert das? Nur zur kleinen Auffrischung richten wir hier zwei ganze Zahlen ein und geben ihre Werte aus. In dieser Methode übergeben wir sie dann als Parameter, setzen die Werte auf Null zurück und geben die Variablen erneut setzen die Werte auf Null zurück und geben die Variablen erneut aus. Wenn die Methode fertig ist, wir den Wert der ursprünglichen Variablen aus Und Sie können sehen, dass wir diese als Wert übergeben. Die Methode funktioniert nur mit einer Kopie davon. Daher werden die Daten nach Abschluss der Methode nicht mehr geändert. Was ich jetzt tun werde, ist das ein wenig zu ändern. Ich werde diese Wertetypen übergeben. Denken Sie daran, dass es sich bei dem Wertetyp um ganzzahlige, boolesche, einfache Typen handelt, die auf dem Stapel gespeichert sind Jetzt werde ich sie als Referenz weitergeben. Um etwas als Referenz zu übergeben, stellen Sie den Variablen hier einfach Schlüsselwort ref in den Methodenparametern voran. Hier machen wir dasselbe, wir fügen nur das Schlüsselwort ref hinzu. Was glaubst du nun, wird das Ergebnis sein? Nun, lassen Sie uns einen Blick darauf werfen. Sie können also sehen, dass es das Verhalten des Referenztyps aus dem vorherigen Tutorial zeigt Erinnerst du dich, als wir den Wert eines Referenztyps geändert haben und er sich daran erinnert hat, nachdem die Methode aufgerufen wurde? Nun, das nennt man die Übergabe eines Wertetyps per Referenz. Und das können wir tun, indem wir hier das Schlüsselwort F hinzufügen. Was ist der Vorteil davon? Nun, wenn Sie einen Wertetyp innerhalb einer Methode übergeben, wird keine Kopie des Werts mehr erstellt, sodass keine Kopie erstellt wird. Es sagt so ziemlich, okay, hey Methode. Ich werde dir diese beiden Variablen hier übergeben, sind Werttypen, aber ich möchte, dass du dir die Referenz auf sie im Speicher übergibst. Ich möchte, dass du damit arbeitest. Und was auch immer Sie ihnen antun, die Änderungen werden sich widerspiegeln. Das ist also die Übergabe eines Verweises auf den Bereich im Stack-Speicher für diese Werttypen, und jetzt werden sie als Referenz übergeben. Wir können mit diesen direkt innerhalb der Methode arbeiten, und alle Änderungen, die wir daran vornehmen, werden beibehalten, sobald die Ausführung der Methode abgeschlossen ist Sie können hier also sehen, dass ich sie gerade geändert habe Jetzt wurde die Änderung beibehalten Sie können also sehen, dass wir jetzt das Standardverhalten im letzten Tutorial verstehen das Standardverhalten im , das als Wert übergeben wird Es ist einfacher, die andere Terminologie zu verstehen , die als Referenz übergeben wird, und zwar die Verwendung des Ref-Schlüsselworts. Okay, wir haben uns die Übergabe von Werttypen wie Ganzzahlen nach Wert angesehen von Werttypen wie Ganzzahlen nach Wert Wir haben uns mit der Übergabe von Referenztypen wie komplizierten Objekten nach Wert befasst von Referenztypen wie komplizierten Objekten nach Wert Wir haben uns jetzt mit der Übergabe von Werttypen als Referenz befasst. Und um die Quadrilogie zu vervollständigen, werden wir uns nun mit der Weitergabe von Referenztypen als Referenz befassen. Hier ist das Beispiel. Hier haben wir unsere Liste von ganzen Zahlen, die wir uns zuvor angesehen haben Wir haben nur vier Zahlen drin. Und dann fügen wir innerhalb dieser Methode der Liste zwei Zahlen hinzu. Und draußen geben wir unterwegs einfach die Anzahl der Liste Wir haben uns das schon einmal angesehen und Sie können hier die Ausgabe sehen, denn standardmäßig übergeben wir eine Kopie des Zeigers, aber sie zeigt auf denselben Bereich im Heap-Speicher Sie können also sehen, dass die Änderungen beibehalten werden, sobald die Ausführung dieser Methode abgeschlossen ist Aber denken Sie daran, als wir darüber gesprochen haben, dass wir tatsächlich einen neuen Ort im Heap-Speicher einrichten und eine Kopie unseres Zeigers nehmen und ihm einen ganz neuen Ort geben können Heap-Speicher einrichten und eine Kopie unseres Zeigers nehmen , und das ändert das Ergebnis Sie können hier sehen, dass die Änderung in diesem Fall nicht beibehalten wird Jetzt werde ich das mit dem Schlüsselwort ref qualifizieren. Ich füge das hier hinzu, wenn wir die Methode aufrufen. Und das füge ich hier in den Parametern hinzu. Was glaubst du, wird jetzt passieren? Nun, lassen Sie uns einen Blick darauf werfen. Ich werde die Anwendung ausführen. Sie können jetzt sehen, dass die Änderung tatsächlich beibehalten wurde , sobald die Ausführung der Methode abgeschlossen ist Warum ist das hier los? Nun, du hast es vielleicht schon erraten. Wenn wir etwas als Referenz mit dem Schlüsselwort reference übergeben , genau wie wir es bereits besprochen haben, erstellen wir keine Kopie mehr, wir erstellen nicht einmal mehr eine Kopie des Zeigers. Wir übergeben quasi den Zeiger im Stack-Speicher auf diese Daten im Heap-Speicher Wir übergeben den Zeiger selbst an die Methode. Die Methode arbeitet jetzt direkt mit dem ursprünglichen Zeiger auf diese Information. Jetzt richten wir hier ein brandneues Objekt ein, eine neue Liste. Aber wir arbeiten nicht mit einer Kopie des Zeigers, es ist der ursprüngliche Zeiger. Wir erstellen quasi nur eine brandneue Liste über der ursprünglichen Liste und fügen ihr dann zwei Zahlen hinzu. Wenn wir die Anwendung jetzt ausführen, so wie wir es zuvor gesehen haben, können Sie hier sehen, dass sie persistent ist Das ist hier der Unterschied. Wenn wir das Schlüsselwort ref verwenden, kopieren wir nichts mehr. Wir kopieren nicht die Werttypen, aber wir kopieren auch nicht die Zeiger, wenn wir Referenztypen verwenden. Warum ist das nützlich? Nun, dann können unsere Methoden mit unseren Originaldaten arbeiten, unabhängig davon, ob es sich um Werttypen oder Referenztypen handelt, und die Änderungen können beibehalten werden , sobald die Ausführung der Methode abgeschlossen ist Das ist die Stärke des Ref-Schlüsselworts im Shop. diese drei Tutorial-Reihen zu den Themen Stack, Heap-Speicher sowie Referenz - und Werttypen in C Shop abgeschlossen Heap-Speicher sowie Referenz - und Werttypen in C Shop 65. 15. Das struct-Schlüsselwort: In diesem Tutorial werde ich über Strukturen in C sprechen . Sharp-Strukturen verwenden das Schlüsselwort struct, aber was sind sie und wie funktionieren sie? Nun, Strukturen sind Klassen sehr ähnlich, und in diesem Tutorial wird davon ausgegangen, dass Sie ein wenig darüber wissen , wie Klassen funktionieren, wie Vererbung funktioniert, vielleicht Schnittstellen und auch vom Wert- und Referenztyp Variablen vom Wert- und Referenztyp und auch das Schlüsselwort read only. Zu all diesen habe ich bereits Tutorials gemacht. Wenn Sie sich bisher alles angesehen haben, werden Sie dieses Tutorial vollständig verstanden haben und sofort loslegen. Was ist eine Struktur? Schauen wir uns dieses Beispiel an. Genau hier habe ich eine quadratische Klasse, schauen wir uns das jetzt an. Hier gibt es zwei private Felder, die Breite und die Höhe des Quadrats. Es hat einen Konstruktor, der diese Felder einrichtet. Hier gibt es eine Beispielmethode, die nur die Fläche anhand dieser berechnet Und hier auch zwei öffentliche Immobilien , die die Breite und die Höhe offenlegen Es ist also ziemlich einfach. Also, was ich hier mache, ich instanziiere ein neues Objekt und gebe einige Beispieldateien in das Wenn ich die Anwendung jetzt starte, ein Quadrat mit der Höhe vier und hat ein Quadrat mit der Höhe vier und der Breite fünf eine Fläche Es macht also nicht wirklich viel. Lassen Sie mich jetzt eine Struktur vorstellen und was sie ist. Also das hier geht zur Square-Klasse über. Und ich werde einfach dieses Klassenschlüsselwort ändern und solche Struktur hinzufügen. Wenn Sie sich also mein Tutorial über Schnittstellen und Aufzählungen ansehen , in dem wir eine brandneue Klasse erstellen und einfach das Klassenschlüsselwort ändern In dieser Hinsicht ist es ziemlich ähnlich. Und jetzt haben wir eine Struktur. Dieses Quadrat ist jetzt eine Struktur. Es ist kein Kurs mehr. Aber Sie können sehen, dass es hier keine Fehler gibt. Es gibt keine roten, verschnörkelten Linien. Wie kommt es, dass ich gerade die ganze Klasse geändert habe und es gibt keine Fehler Läuft die Anwendung überhaupt? Nun, es sieht so aus, als ob es läuft. Und wir haben genau die gleiche Antwort, was ist hier los? Hier verwirren Strukturen und Klassen neue Entwickler oder Entwickler , die kein wirkliches Verständnis von Werttypen und Referenztypen haben wirkliches Verständnis von Werttypen und Referenztypen Strukturen und Klassen können sich in ihrem Verhalten sehr ähnlich erscheinen Sie können hier sehen, dass ich eine Struktur erstellt habe, sie hat private Felder, sie hat einen Konstruktor, sie hat Methoden, Eigenschaften Was ist hier der Unterschied zwischen einer Struktur und einer Klasse Kann ich jetzt einfach Strukturen anstelle von Klassen verwenden oder soll ich Strukturen komplett ignorieren und nur Klassen verwenden? Nun, die Antwort ist, dass Sie beide verwenden können. Einer der Hauptunterschiede zwischen Strukturen und Klassen besteht darin, dass Strukturen Werttypen sind. Nun, wie funktioniert das? Nun, wir haben bereits darüber gesprochen , dass Klassen Referenztypen sind. Wenn ich das hier wieder reinstelle, ist Square jetzt eine Klasse. Ich habe diese Methode hier einfach auskommentiert. Nun diese Methode hier, ich übergebe das Quadrat, das jetzt eine Klasse ist, in diese Methode Und ich ändere hier einige Eigenschaften. Ich habe schon einmal darüber gesprochen. Wenn Sie einen Referenztyp wie diesen hier übergeben, ist das ein Referenztyp, er befindet sich im Heap-Bereich des Speichers an eine Methode, dann wird er als Referenz übergeben Das bedeutet, dass die Methode auf den Speicher auf dem Heap zugreifen kann. Es funktioniert mit dem ursprünglichen Objekt , wenn die Methode abgeschlossen ist Hier haben wir immer noch Zugriff auf die Änderungen innerhalb dieser Methode vorgenommen wurden , wenn ich diese Anwendung ausführe. Jetzt werden wir sehen, dass sich diese Änderungen in der Ausgabe hier widerspiegeln. Schauen wir uns das an. Sie können hier 2.020.400 für die Gegend sehen 2.020.400 für Es ist eine Referenztypvariable genau hier. Es lebt auf dem Haufen. Lassen Sie uns das jetzt wieder in eine Struktur umwandeln und sehen, was passiert Nun, das ist eine Struktur, die ich bereits erwähnt habe. Die Strukturen sind Werttypen und keine Referenztypen. Diese Änderungen werden sich nicht in der Ausgabe widerspiegeln. liegt daran, dass die Methode mit einer Kopie des Wertetyps arbeitet . Alles, was sich hier geändert hat, spiegelt sich nur in der Kopie wider. Die Änderungen werden nicht fortbestehen. Wir werden 5.4 sehen, wie wir es zuvor getan haben. Wie Sie dort sehen können , besteht einer der Hauptunterschiede zwischen Klassen und Strukturen darin , dass Klassen Referenztypen und Strukturen Werttypen sind. Das ist ein Hauptmerkmal von Strukturen. Schauen wir uns einige andere Unterschiede zwischen Strukturen und Klassen an, da sie sich ziemlich ähnlich sind und anscheinend genauso funktionieren. Lassen Sie uns über die Unterschiede sprechen. Ich denke, das wird Ihnen helfen, besser zu verstehen, was Strukturen bewirken können, und auch Nachteile sie haben. Bei Strukturen können wir keine Vererbungsklassen verwenden, wir können zum Beispiel von einer Basisklasse erben Aber wenn wir das mit Strukturen versuchen und den Mauszeiger darüber bewegen, ist ihre Form in der Schnittstellenliste keine Schnittstelle Was bedeutet das? Ziemlich kryptisch, nicht wahr? liegt daran, dass man mit Strukturen tatsächlich Schnittstellen implementieren kann Sie können mit Schnittstellen arbeiten, das ist kein Problem. Dieser Fehler hier, er erwartet eine Schnittstelle, weil das so ziemlich das einzige ist , was man in dieser Hinsicht mit einer Struktur machen kann. Aber wenn ich versuche, von einer Klasse eine Basisklasse zu erben , lässt sie mich das nicht tun, weil es nicht möglich ist Das gesamte Konzept der Vererbung gibt es bei Strukturen nicht Das ist ein Vorteil, den eine Klasse gegenüber einer Struktur haben würde. Wir können nicht von einer Basisklasse erben, aber die Struktur selbst kann auch keine abstrakte Klasse oder Basisklasse Und das bedeutet, dass wir zum Beispiel keine virtuellen Methoden haben können zum Beispiel keine virtuellen Methoden Sie können hier sehen, als ich das versucht habe, es ist nicht einmal gültig, es liegt daran, dass es sich in einer Struktur befindet. Wir können also das Schlüsselwort virtual nicht verwenden, was bedeutet, dass wir es nicht überschreiben können, was bedeutet, dass wir kein polymorphes Und denken Sie daran, das ist das Konzept der Methodenüberschreibung. Zum Beispiel können wir nicht virtuell verwenden, wir können nicht abstrakt verwenden Wir können also so gut wie nichts in Bezug auf Vererbung oder ähnliches verwenden . Bei Strukturen gibt es viel einfachere Typen als Klassen, also stell es dir so vor. Eine Struktur ist einfacher als eine Klasse. Lassen Sie uns hier vielleicht über einen Vorteil einer Struktur sprechen, oder vielleicht, warum wir sie überhaupt verwenden würden. Warum sich überhaupt die Mühe machen? Warum nutzen wir nicht einfach Unterricht für alles? Nun, Strukturen haben keinen großen Speicherbedarf wie ein Objekt vom Referenztyp. Zum Beispiel habe ich hier ein Videospielobjekt , eine Videospielklasse. Darin befinden sich private Felder auf andere Referenztypen wie eine Spielklasse, eine Liste von Ganzzahlen, einige Zeichenketten und eine Aufzählung verweisen eine Liste von Ganzzahlen, einige Zeichenketten und eine Aufzählung Das ist ein ziemlich großer Fußabdruck und der lebt auf dem Haufen Aus diesem Grund legen wir es nicht auf den Stapel. Aber wenn Sie zum Beispiel eine Struktur für eine sehr einfache Klasse verwenden , zum Beispiel diese quadratische Klasse hier, hat sie nur einfache Werttypen wie nur einige Doubles Selbst wenn es Boolesche Werte und ganze Zahlen gäbe, würde es viel schneller funktionieren als Zuweisungen und Zuweisungen Wenn Sie also im Stack-Bereich des Speichers mit einfachen Werttypen und sogar Strukturen arbeiten , dann wird es Und Zuweisungen sind wiederum viel schneller und auch billiger Das ist also ein Vorteil der Verwendung einer Struktur. Sie denken vielleicht, okay, was ist, wenn ich einen Referenztyp innerhalb eines Wertetyps habe? Zum Beispiel ist eine Liste von Ganzzahlen eine Variable vom Referenztyp. Und dann mache ich weiter und füge das in meine Struktur ein, die ein Werttyp ist Ja, das ist möglich. Sie können sehen, dass es keine Fehler gibt. Die Anwendung wird ausgeführt, aber das wird als schlechte Praxis angesehen. Das solltest du nicht tun. Damit wird der Sinn, überhaupt eine Struktur zu verwenden, zunichte gemacht, was mich zu meinem nächsten Punkt zurückbringt Verwenden Sie eine Struktur nur, wenn Sie einen Container für einfache Werttypen haben einen Container für einfache Werttypen Zum Beispiel dieses Quadrat hier. Es hat eine Breite , die doppelt so groß ist. Es hat eine Höhe , die dem Doppelten entspricht. Wenn es eine Farbe hat, könntest du diese vielleicht durch eine Ganzzahl darstellen. Und diese Ganzzahl könnte auf etwas verweisen, das mit einer Farbe zu tun hat. Zum Beispiel könnte Weiß Null sein, Schwarz könnte eins sein, Rot könnte zwei sein. Diese arbeiten mit einfachen Werttypen. Hier wäre eine Struktur in diesem Fall perfekt, da sie selbst ein Wertetyp ist. Aber ich verwende auch Wertetypen darin. Ich habe nie vor, Vererbung zu verwenden, ich habe nie vor, Polymorphismus zu verwenden Ich habe nie vor, dass andere Strukturen oder Dinge daraus erben. Daher wäre eine Struktur dafür eine gute Wahl. Es ist einfach, es ist schnell, es verwendet Wertetypen. Ich möchte nie weiter darauf eingehen, was mit Erbschaft zu tun hat. Wenn all diese Kästchen angekreuzt sind, verwenden Sie eine Struktur. Aber sobald wir anfangen, Dinge zu denken wie, okay, ich denke, dieses Quadrat sollte von einer Basisklasse die Form erben Und vielleicht könnte die Farbe eine Aufzählung sein, vielleicht hätte sie eine Liste von Pixeln und dergleichen Und wir fangen an, hier Felder vom Typ Vererbung und Heavy und Referenz einzuführen , hier Felder vom Typ Vererbung und Heavy und Referenz , dann nein, wir wollen keine Struktur, wir wollen eine Klasse verwenden Kurz gesagt: Verwenden Sie eine Struktur, wenn Sie ein billiges Objekt haben, aber verwenden Sie eine Klasse, wenn Sie sie erweitern und umfangreiche Referenzobjekte verwenden möchten sie erweitern und umfangreiche Referenzobjekte verwenden Das ist im Grunde der Unterschied und warum Sie das eine verwenden sollten und nicht das andere Einer der Hauptvorteile von at gegenüber einem Wertetyp und allem, was damit zu tun hat , ist, dass Sie die gesamte Struktur als schreibgeschützt markieren können . Wenn Sie sich jetzt meine Tutorials zu Read Only ansehen, werden Sie verstehen, was es tut. Es ist ein unveränderlicher Datentyp. Sobald Sie einen Wert festgelegt haben, können Sie ihn nicht mehr ändern. Und dafür gibt es viele Gründe. Wenn ich versuche, diese gesamte Klasse als schreibgeschützt zu markieren , kann man sagen, dass sie für diesen Artikel nicht gültig ist Aber wenn ich zum Beispiel eine schreibgeschützte Struktur wie diese erstelle, dann ist das überhaupt kein Problem Offensichtlich gibt es ein paar Probleme, die damit zu tun haben. Sie können also sehen, dass Instanzfelder schreibgeschützter Struktur schreibgeschützt sein müssen. Diese müssen ebenfalls nur gelesen werden. Die andere Sache ist natürlich, dass wir den Set-Modifikator nicht verwenden können, wenn Dinge nur lesbar sind Wir müssen entweder hier in der Felddeklaration initialisieren , also initialisieren wir hier oder im Konstruktor hier Wenn du dir mein Tuchoil nur lesend ansiehst, wirst du dich daran erinnern und das verstehen, aber ich dachte, ich erwähne es einfach noch einmal Mit Strukturen können Sie die gesamte Struktur als schreibgeschützt markieren die gesamte Struktur als schreibgeschützt Was Sie in einer Klasse mit diesem Schlüsselwort nicht wirklich tun können. Und Sie werden vielleicht sehen, wenn Sie mit Ihren Programmierprojekten weitermachen , Sie werden feststellen, dass dies auch bei der Arbeit mit Strukturen durchaus üblich ist . Das ist eine mächtige Sache, die Sie auch tun können , wenn Sie mit Strukturen arbeiten. Aber ich denke, die wichtigste Erkenntnis daraus ist, keine Angst davor zu haben, Strukturen zu verwenden und zu experimentieren, sondern sie nur für einfache Behälter zu verwenden Also Dinge wie Quadrate, bei denen Sie einfache Werttypen haben. Sobald Sie anfangen, über stark belastete Referenztypen zu sprechen , verwenden Sie in diesem Fall eine Klasse. Aber Strukturen eignen sich sehr gut für die Arbeit mit Quick Muck Up-Anwendungen oder einfachen Dingen wie diesen Ich hoffe, dieses Tutorial hat dir geholfen. 66. 16-1. Der Objekt-Datentyp - Boxen und Unboxing: In diesem Tutorial werden wir über den Objektdatentyp sprechen über den Objektdatentyp Und es sieht ungefähr so aus. Möglicherweise sind Sie beim Schreiben in die Konsole auf den Objektdatentyp gestoßen . Wenn wir beispielsweise in die Konsole schreiben, gibt es viele verschiedene Methodenüberladungen, die wir hier verwenden können Aber Sie können sehen, dass einer der Parameter hier zum Beispiel Objekt ist Was ist das? Wie funktioniert es? Nun, schauen wir uns an, was der Objektdatentyp ist. Wenn Sie sich meine Tutorials zur Vererbung sowie zu Wert - und Referenztypen angesehen haben, wird es für Sie ganz einfach sein, den Objektdatentyp zu verstehen . Nun, der Objekttyp ist die ultimative Basisklasse für alle Datentypen, alle benutzerdefinierten Typen, unabhängig davon, ob wir Objektinstanzen, Referenztypen wie Arrays und ähnliches und auch einfache Werttypen wie Ganzzahlen, Bolenes, Zeichen und ähnliches erstellen Referenztypen wie Arrays und ähnliches und auch einfache Werttypen wie Ganzzahlen, Bolenes, Zeichen und ähnliches Es ist die ultimative Basisklasse für all diese Typen. Es ist ein Referenztyp, was bedeutet, dass er im Heap-Bereich des Speichers gespeichert ist Außerdem ist es wie eine ältere Technologie. Jetzt kam etwas namens Generika auf den Markt. Und im Allgemeinen sind Generika die bessere Methode, obwohl Sie heutzutage immer noch auf den Objektdatentyp stoßen den Objektdatentyp Und die Verwendung des Objektdatentyps kann zu einigen Problemen und Problemen führen, über die wir ebenfalls sprechen werden Das ist der Prozess des Boxens und Unboxens. Schauen wir uns jetzt ein Beispiel an, als ich gerade gesagt habe, dass der Objektdatentyp der ultimative Basistyp ist, was bedeutet das? Denken Sie daran, als ich zuvor über Schnittstellen gesprochen habe und wir können die Schnittstelle in Methoden übergeben Wenn wir dann die Schnittstelle implementieren, können wir unsere Objekte weitergeben. Wenn wir mehrere Klassen haben, die dieselbe Schnittstelle erweitern, können wir diese Objekte einfach beliebig weitergeben. Das ist der Funktionsweise der objektbasierten Klasse ziemlich ähnlich . Machen Sie sich keine Sorgen, wenn Sie diese Tutorials zu abstrakten Klassen und Schnittstellen nicht gesehen haben. Ich werde es jetzt erklären. Hier rufen wir einfach eine Methode und übergeben eine Zeichenfolge. Da steht nur Hallo Welt. Der Parameter ist eine Zeichenfolge. Was großartig ist , weil wir eine Zeichenfolge übergeben und sie dann an das Fenster ausgeben Eine sehr einfache Anwendung. Stellen Sie sich das jetzt vor. Ich werde diese Zeichenfolge einfach so in das Object-Schlüsselwort ändern . Lassen Sie uns jetzt die Anwendung ausführen. Auch hier können Sie sehen, dass wir genau das gleiche Ergebnis haben. Warum passiert das? Nun, es liegt einfach daran, dass eine Zeichenfolge wie diese hier befriedigend ist, das ist eine Beziehung Und es ist ein Objekt, genau wie eine Instanz einer Klasse. Zum Beispiel eine Videospielklasse, eine Hundeklasse, eine Tierklasse. Es gibt auch Klassen, aber sie sind auch Objekte. Dieses Objektschlüsselwort kann hier so ziemlich jeden Datentyp im System repräsentieren. Buchstaben, Zeichenketten und sogar ganze Zahlen. Zum Beispiel 3456. Die Ausgabe wird dieselbe sein und es gibt keine Probleme beim Kompilieren des Projekts Hier haben wir hier eine Ganzzahl, 3456, wir haben schon einmal darüber gesprochen Einfache Ganzzahlen, Zeichenketten, Zeichen, Boolene, das sind Sie befinden sich auf dem Stapel, im Stack-Bereich des Speichers. Objekte sind jedoch Referenztypen, sie werden auf dem Heap gespeichert Was hier passiert, hier findet eine implizite Konvertierung statt Diese Ganzzahl, die wir übergeben , wird in einen Objekttyp umgewandelt Dieser Vorgang wird Boxen genannt. Wenn wir diesen Objektwert dann wieder in eine Ganzzahl umwandeln , dann spricht man von Unboxing Wenn du mir nicht glaubst, werde ich es dir beweisen. Wenn Sie hier mit einem Objekttyp wie Value arbeiten, bietet es einige Methoden , die wir verwenden können Eine davon heißt get type. Was das bewirken wird, es wird hier den zugrunde liegenden Typ dieses Objektwerts abrufen . Im Moment übergeben wir hier eine Ganzzahl. Wenn ich das Programm ausführe, können Sie sehen, dass es den zugrunde liegenden Typ des Objekts ausgibt , nämlich eine Ganzzahl von int 32, einer 32-Bit-Ganzzahl Ähnlich verhält es sich, wenn ich eine Zeichenfolge übergebe und Hallo sage, dann erhalten wir zum Beispiel eine Zeichenfolge Sie können hier sehen, dass dies der zugrunde liegende Typ des Objekts ist , und wir können ihn mit der Methode get type hier abrufen. Lass uns jetzt über Boxen und Unboxing sprechen. Lass uns zuerst über Boxen sprechen. Was ist Boxen? Wir haben hier eine Ganzzahl namens numb und wir initialisieren sie auf 1234 Jetzt fügen wir diese Ganzzahl in ein Feld ein, daher der Name Boxen Wir sagen im Grunde, okay, ich möchte ein brandneues Objekt erstellen. Denken Sie daran, dass dies die ultimative Basisklasse für alle Typen ist. Ich möchte dem den Wert Num geben. Jetzt sollte OBJ gleich 1234 sein. Jetzt möchte ich den Wert dieser Zahl hier auf 100 ändern. Glaubst du, dieser Wert wird sich damit ändern? Was ich mache, ich gebe hier zwei der Werte Wenn wir die Anwendung ausführen, ist der Wert von num 100, was wahr ist, weil wir ihn geändert haben Aber Sie können sehen, dass sich dies hier nicht auf unseren Objektwert auswirkt. Was ist hier los? Ich dachte, Objekt wäre ein Referenztyp. Wenn etwas ein Referenztyp ist, haben wir einen Verweis auf diesen Speicherbereich. Nun, das ist die Strafe des Boxens. Was hier passiert, wenn man etwas in eine Box packt, dann steckt man quasi diese ganze Zahl in eine Objektbox. Da es sich bei Objekt jedoch um einen Referenztyp handelt, werden alle Objekte im Heap-Bereich des Speichers gespeichert Einfache Werttypen wie Ganzzahlen werden auf dem Stapel gespeichert. Was hier passiert, wenn wir ein neues Objekt erstellen und es auf „taub“ setzen, hier kopieren wir quasi das gesamte Objekt, weisen etwas zusätzlichen Speicher auf dem Speicherbereich zu und fügen diesen Und dann erstellen wir auch den Zeiger auf dem Stapel, der darauf Es passieren viele Dinge , wenn du das hier machst. Das ist jetzt implizit, was bedeutet, dass es automatisch hinter den Kulissen passiert Sie haben keine Kontrolle darüber. Boxen, eine sehr teure Operation wenn wir uns unser Beispiel zuvor angesehen haben, bei dem wir eine Ganzzahl an die Methode übergeben haben und wir einen Objektparameter hatten. All das passiert hinter den Kulissen. Ein ganzer Speicherbereich auf dem Heap wird zugewiesen, nur weil wir eine Ganzzahl übergeben und sie wird implizit in einen Objekttyp umgewandelt Das ist die Strafe des Boxens. Dies ist auch etwas, das wir sehr stark berücksichtigen sollten, insbesondere bei der Erstellung umfangreicher Anwendungen. Gibt es einen besseren Weg, das zu tun? Vielleicht sollten Sie stattdessen in Betracht ziehen , die Methode zu überladen Wenn wir zum Beispiel die rechte Zeile der Konsole haben, haben wir hier all diese verschiedenen Methodenüberschriften Wir können ein Char-Array, eine Dezimalzahl, eine Doppelzahl aufnehmen . Aber sobald wir all diese möglichen Werte haben, ja, dann gibt es eine Option , ein Objekt aufzunehmen Aber das ist nicht verpflichtend. Es gibt Designaspekte , die bei der Verwendung von Objekten hier berücksichtigt werden müssen. Wenn Sie beispielsweise bestimmte Datentypen ein Kästchen setzen, könnten wir eine Zeichenfolge oder ein Zeichen in ein Kästchen setzen, aber im Prinzip wird dieser Vorgang Boxen genannt. Das Gegenteil davon ist, wie Sie vielleicht vermutet haben, das Unboxing Was ist Unboxing? Nun, Unboxing ist so ziemlich das Gegenteil. Und das ist die Umwandlung eines Referenztyps, z. B. eines auf dem Heap gespeicherten Objekts, sich den Heap-Bereich des Speichers wieder in einen Wertetyp erinnert und dann im Stapel gespeichert wird Das ist das Gegenteil von Boxen, und das ist Unboxing. Es macht den Vorgang in umgekehrter Reihenfolge. Schauen wir uns jetzt ein Beispiel für Unboxing an. Jetzt werde ich dieses Objekt hier auspacken. Denken Sie daran, dass beim Entpacken ein Referenztyp in einen Werttyp umgewandelt Schauen wir uns das an. Jetzt möchte ich es wieder in eine Ganzzahl umwandeln. Wenn ich es in einen anderen Typ konvertiere, wird ein Fehler auftreten. Wir werden ein Problem mit der Typkonvertierung haben. Ich möchte eine Ganzzahl aus dieser ganzen Operation herausholen. Das ist der Punkt, an dem ich das Objekt wieder in seinen ursprünglichen Typ bringen will. Ich habe eine Ganzzahl namens result eingerichtet. Jetzt möchte ich das Objekt in den erwarteten Datentyp konvertieren . Das ist der erwartete Typ, den ich will, das ist die Konvertierung. Ich möchte dieses Objekt in eine Ganzzahl konvertieren. Und das ist der Prozess des Entpackens von Objekten, die auf dem Heap gespeichert sind Ich möchte es in einen einfachen Datentyp konvertieren, und jetzt wird es genau hier auf dem Stapel gespeichert Diese Ergebniszahl hier. Wenn ich nun das Ergebnis im Konsolenfenster ausgebe, schauen wir uns das Ergebnis an. Sie können hier sehen, wie ich meinen ursprünglichen Wert habe, 1234. Jetzt fällt Ihnen vielleicht eine Sache an diesem Tutorial auf, und das ist, hey, ich führe hier dieses Objekt-Schlüsselwort ein, diesen Objektdatentyp, aber Sie sollten ihn nicht wirklich oft verwenden. Ja, ich weiß zu schätzen, dass dies das allgemeine Thema dieses Tutorials ist, aber es ist gut, sich dessen bewusst zu sein. In den frühen Tagen von C Sharp war es durchaus üblich, verschiedene Datentypen auf diese Weise zu konvertieren . Also konvertieren wir es in einen Referenztyp und zurück in einen Wertetyp. Und das ermöglicht es uns, verschiedene Datentypen als ultimative Art von Basisklassenobjekt zu übergeben verschiedene Datentypen als . Es war also ziemlich nützlich, aber dann wurden Dinge wie Generika und andere Dinge eingeführt , die diese ganze Objektnotation von Boxen und Boxen irgendwie aus der Praxis und aus der Mode gebracht diese ganze Objektnotation von Boxen und Boxen irgendwie aus der Praxis und aus der Mode Aber es ist etwas , dessen Sie sich bewusst sein sollten, denn vielleicht arbeiten Sie mit älteren Systemen oder Sie arbeiten mit Systemen , die zu Ihren passen Es heißt zum Beispiel Interoperabilität, wenn Ihre Software mit einer anderen Software verknüpft wird und Sie auf diesen Objektdatentyp stoßen. Wie Sie sehen können, wird es heute noch verwendet. rechte Zeile der Konsole verwendet ein Objekt als Parameter und viele andere Methoden und Klassen verwenden es ebenfalls. Aber es ist gut, das Prinzip des Objektdatentyps und den teuren Prozess des Boxings und Unboxings zu kennen Objektdatentyps und den , dem Datentypen und Werttypen implizit in Referenztypen und dann wieder zurück in Werttypen konvertiert Werttypen implizit in Referenztypen und dann wieder zurück in Werttypen Das Boxen und Unboxing in C Sharp ist also mit einem ziemlich großen Aufwand Boxen und Unboxing 67. 16-2. Das dynamische Keyword und die dynamische Typprüfung: In diesem Tutorial werden wir uns das dynamische Schlüsselwort ansehen. Und das dynamische Keyword sieht ungefähr so aus. Aber bevor wir über das dynamische Keyword sprechen, wir einfach ein paar Schritte zurück. Wenn Sie sich meine vorherigen Tutorials ansehen in denen ich über C Sharp gesprochen habe, die Tatsache, dass es sich um eine stark typisierte und auch eine statisch typisierte Sprache Lassen Sie mich kurz darüber sprechen. einer statisch typisierten Sprache sind die Variablentypen, zum Beispiel eine Ganzzahl, zur Kompilierzeit bekannt Dann klicke ich genau hier auf diesen kleinen grünen Play-Button Die Software kompiliert. Und wenn es irgendwelche Probleme gibt, warnt mich der Compiler, die Software kompiliert nicht Und das ist eine statisch typisierte Sprache wie C Sharp. Dieser Vorgang wird als statische Typprüfung bezeichnet. Statische Typprüfung, aber was wäre, wenn ich Ihnen sagen würde , dass es auch etwas gibt, das als dynamische Typprüfung bezeichnet wird? Was ist dynamische Typprüfung? Hier sind zum Beispiel die Variablentypen zur Laufzeit bekannt. Wenn es ein Problem mit den Typen oder ähnlichem gibt, können wir die Software problemlos kompilieren. Wenn es jedoch einen Fehler gibt, wissen wir es erst, wenn die Software tatsächlich läuft. Was meine ich mit all dem? Nun, schauen wir uns hier ein Beispiel an. Hier habe ich ein Beispiel für eine Ganzzahl. Ich initialisiere es auf den Wert 55. Dann gebe ich es einfach auf dem Bildschirm aus. Es macht nicht wirklich viel. Was ist jedoch, wenn ich dieser Ganzzahl jetzt vielleicht einen Zeichenkettenwert zuweisen möchte ? Wenn ich zum Beispiel nur Hallo eintippe , können Sie sehen , dass hier ein offensichtlicher Fehler vorliegt. Es kann die Zeichenfolge nicht implizit in eine Ganzzahl konvertieren. Das liegt daran, dass der Typ dieser Variablen eine Ganzzahl ist. Aber was wir hier versuchen, ist eine Zeichenfolge hineinzustopfen. Es wird nicht in Buchstaben geschrieben. Nicht nur das, unser Programm lässt sich auch nicht kompilieren. Sie können sehen, dass hier ein Fehler vorliegt. Dies ist ein Beispiel für die statische Typprüfung. Es weiß, dass es sich um eine Ganzzahl handelt, also ist es ein Integer-Typ. Aber jetzt versuchen wir, dort eine Zeichenfolge einzufügen. Aber wir werden gerade in der Entwicklung auf dieses Problem aufmerksam gemacht in der Entwicklung auf dieses Problem Dies wird also als statische Typprüfung bezeichnet. Bei so etwas wie der dynamischen Typprüfung werden Sie jedoch nicht auf diesen Fehler hingewiesen Alles wird gut aussehen, die Software wird gut kompiliert Wenn Sie hier jedoch nichts gegen diesen speziellen Fehler unternehmen, werden Sie während der Laufzeit über diesen Fehler informiert Es gibt also andere Programmiersprachen, zum Beispiel Python oder Ruby. Nun, das sind dynamisch typisierte Sprachen. Das heißt, wir können das zum Beispiel tun und die Software wird problemlos kompiliert, das ist kein Problem Sie werden jedoch während der Laufzeit , während die Software läuft, über diesen Fehler informiert Laufzeit , während die Software läuft Dies wird als Laufzeit bezeichnet und hier kann der Fehler während der Kompilierung auftreten Hier kann C Sharp diese potenziellen Fehler im Zusammenhang mit Typen erkennen, und das wird als statische Typprüfung bezeichnet In Sprachen wie Python und Ruby werden Sie jedoch zur Laufzeit über diese Typfehler informiert Zum Beispiel während der Laufzeit, und das wird als dynamische Typprüfung bezeichnet Jetzt habe ich über statische Typprüfung und dynamische Typprüfung und die Unterschiede gesprochen . Es wird jetzt einfacher sein, das dynamische Schlüsselwort zu erklären. Unter der Haube verhält sich das dynamische Schlüsselwort also so ziemlich wie der Objektdatentyp Wenn Sie meine vorherigen Tutorials gesehen haben, in denen ich über den Objektdatentyp und seinen Kanal gesprochen habe , gilt er , gilt Basisklasse für alle Typen, zum Beispiel die Basisklasse von Double Integer Bolen. Aber nicht nur das, sondern auch Dinge wie Listen und benutzerdefinierte Objekte und solche Dinge Wenn Sie sich also an dieses Detail über den Objektdatentyp erinnern und es verstehen , werden Sie mit dem dynamischen Schlüsselwort sofort loslegen. Schauen wir uns nun ein Beispiel an. Also, was ich jetzt machen werde, ist ein Beispiel mit dem Objektdatentyp zu machen . Also diese Variable, die hier Test genannt wird, wird ein Typobjekt sein. Ich speichere hier einen Wert, 35,5, der ein Doppeltes sein könnte Zum Beispiel sieht es für mich wie ein Double aus, aber hier gibt es kein Problem, weil Objekt hier wie eine Basisklasse ist, es wird diesen Wert problemlos akzeptieren Aber jetzt versuchen wir, diesen Testwert, der ein Objekt vom Datentyp ist , um 7,5 zu erhöhen Objekt vom Datentyp ist , . Es sieht so aus, als würden wir a zu einem Double hinzufügen Was in Ordnung sein sollte, wenn wir es vorher doppelt hatten. Es hat ohne Probleme funktioniert. Sie können hier also sehen, dass es kein Problem gibt. Aber jetzt habe ich daraus einen Objektdatentyp gemacht, es gibt ein Problem. Wenn ich das hervorhebe, heißt es, dass Operator Plus nicht auf ein Objekt angewendet werden kann und Double bei der Arbeit mit Objekten, wir haben über Boxen und Unboxing gesprochen Was ich hier mache, ich habe hier einen einfachen Datentyp, 35.5, der wie ein Double ist, und ich stopfe das in einen Objektdatentyp Wenn Sie sich noch daran erinnern, dies ein Referenztyp ist, also wird er im Wärmebereich des Speichers gespeichert Was wir tun, ist den Wert hier zu testen. Wenn wir versuchen, den Wert zu erhöhen , gibt es hier ein Problem. Wir können diesem Wert hier nicht 7,5 hinzufügen. Was wir hier tun müssen, wenn beispielsweise den Wert erhöhen, ist, diesen Objektdatentyp explizit in einen Typ zu konvertieren , mit dem wir arbeiten können Wir versuchen, 7,5 hinzuzufügen, was ein Double ist, also muss ich das in ein Double umwandeln Wir können es mit der Klasse convert static, die wir in den vorherigen Tutorials die ganze Zeit verwendet haben, in ein Double der Klasse convert static, die wir in den vorherigen Tutorials die ganze Zeit verwendet haben konvertieren. Und das wird gut funktionieren. Was ich hier mache, ist den Wert hier auszupacken. Ich boxe hier, ich packe aus. Wenn wir das Boxen und Auspacken machen, wie wir es bereits besprochen haben, ist das ein bisschen leistungsintensiv wir das Boxen und Auspacken machen, wie wir es bereits besprochen haben, ist das ein bisschen leistungsintensiv Aber es funktioniert einwandfrei, wenn man das Objekt in ein Double umwandelt. Dann füge ich ein Double hinzu, dann speichere ich den Wert wieder im Objekt, also packe ich ihn erneut und gebe dann den Wert Wenn ich das Programm starte, siehst du jetzt, dass ich den Wert 43 habe, was ungefähr richtig aussieht Sie können sehen, dass es funktioniert. Kein Problem. Ich kann tatsächlich Werte zusammenfügen. Ich kann hier zum Beispiel sogar fünf hinzufügen , und es wird gut funktionieren. Das ist ein kleiner Vorteil, wenn man so etwas gegenüber einzelnen Datentypen verwendet , aber es gibt Leistungseinbußen. Aber was ich damit sagen will, ist, wenn Sie den Objektdatentyp verwenden und die Werte ändern möchten, müssen Sie das Unboxing hier durchführen Sie müssen hier eine explizite Konvertierung durchführen. Nun zu dem dynamischen Schlüsselwort, das ich gleich einführen werde, habe ich gesagt, dass es sehr eng mit dem Objektdatentyp verknüpft ist. Es verhält sich sehr ähnlich. Aber wir müssen diese explizite Konvertierung hier nicht durchführen diese explizite Konvertierung hier Und das ist nicht der einzige Unterschied. Einer der wichtigsten Unterschiede besteht darin, dass es eine dynamische Typprüfung in einer C Sharp-Umgebung ermöglicht . Lassen Sie uns also mit dem dynamischen Schlüsselwort beginnen. Das allererste, was ich tun werde, damit Sie es ein wenig besser verstehen, ist, dieses Beispiel mit dem dynamischen Schlüsselwort zu konvertieren. Also was ich hier mache, ich definiere diese Variable hier als dynamisch. Und weil es sich nicht um den Objektdatentyp und wir nichts explizit umwandeln müssen, brauchen wir diese Umwandlung nicht direkt. Wenn ich das Programm jetzt starte können Sie sehen, dass es genauso funktioniert wie zuvor. Es beschwert sich nicht darüber einem Objektdatentyp einen Wert hinzuzufügen Sie können also sehen, dass hier ein erheblicher Vorteil besteht Wir müssen zum Beispiel unsere Variablen nicht explizit umwandeln. Das ist also ziemlich gut. Und wie ich bereits erwähnt habe, funktioniert es wie das Objekt unter der Motorhaube. Es ist also fast, weißt du, die Master-Basisklasse, die mit ganzen Zahlen, Bouleenen und all diesen Dingen arbeitet Bouleenen und all diesen Dingen Das ist also der erste Vorteil der Verwendung von Dynamic. Wir müssen nichts explizit umwandeln, also müssen wir nicht explizit sagen, okay, mach das zu einer Ganzzahl. Deshalb können wir jetzt eine Ganzzahl hinzufügen oder daraus eine doppelte Zahl machen. Also können wir ein Double hinzufügen. Wir müssen nichts davon tun. Es sieht völlig in Ordnung aus. Sieht aus, wir haben es als Double definiert, jetzt fügen wir eine Ganzzahl hinzu. Das ganze Umwandlungs-Casting-Boxen und das fertige Boxen finden hinter den Kulissen statt. Davon haben wir keine Einsicht. Es ist alles für uns erledigt. Das ist also ein Vorteil, dass uns die Komplexität genommen wird. Schau dir an, was Als auch kann. Zum Beispiel initialisieren wir, das ist wie ein Double, und dann wollen wir eine Ganzzahl hinzufügen Was ist nun, wenn ich zum Beispiel sage, dass Test gleich Hallo ist? Was glaubst du, wird passieren? Lassen Sie uns jetzt die Anwendung ausführen, sie aussieht, wir geben Hallo aus Also was ich tun werde, ich werde hier einige Haltepunkte hinzufügen einige Haltepunkte hinzufügen Wir werden in den Pausenmodus wechseln , wenn wir die Anwendung ausführen Und dann werden wir diesen Variablentest hier unten analysieren . Lassen Sie uns das ansprechen, damit wir es uns besser ansehen können. Im Moment können Sie sehen, dass wir hier ein dynamisches Objekt haben , nämlich ein Testobjekt. Und es hat noch keinen Wert, weil wir diese Codezeile nicht ausgeführt haben. Sobald ich diesen Wert überschritten habe, können wir sehen, dass der Test jetzt abgeschlossen ist, weil wir einen doppelten Wert eingegeben haben Jetzt erhöhen wir den Wert um fünf, was ziemlich in Ordnung zu sein scheint Sie können also sehen, dass es immer noch ein Doppelter ist. nun versuchen, hier einen Zeichenkettenwert einzufügen, Wenn wir nun versuchen, hier einen Zeichenkettenwert einzufügen, können Sie sehen, dass wir jetzt eine dynamische Zeichenfolge haben. Sie können also sehen, dass es in der Art und Weise, wie es funktioniert, ziemlich flexibel ist. Es wirft so ziemlich einfach das gesamte Konzept der Typen über Haufen oder verbirgt Ihnen zumindest das Konzept der Variablentypen Bei der Entwicklung von Anwendungen kann es sich also so anfühlen, als ob Ihnen all diese Komplexität genommen wird Sie müssen sich keine Gedanken darüber machen, ob es sich um eine Zeichenfolge handelt, ob es sich um eine Ganzzahl handelt. Vielleicht Python-Programmierer oder wenn Sie Java-Skript gemacht haben, finden Sie das vielleicht wirklich nützlich Während der Laufzeit können jedoch Fehler auftreten, und zwar dann, wenn Ihre Anwendung tatsächlich ausgeführt wird Es gibt also einige Probleme im Zusammenhang mit dem dynamischen Schlüsselwort, mit denen Sie vorsichtig sein müssen. Also das dynamische Keyword, es klingt für Sie wahrscheinlich ziemlich gut. Wir müssen uns keine Gedanken über Typen machen, wir müssen nicht in verschiedene Typen konvertieren. Wir können es einfach für alles verwenden. Weißt du, warum nicht? Und vielleicht gibt es hier eine leichte Leistung, aber ansonsten scheint es ziemlich gut zu sein, oder? Nun, lassen Sie uns jetzt über die Nachteile der Verwendung von Dynamic sprechen jetzt über die Nachteile der Verwendung von Dynamic Aber zuerst werde ich ein Beispiel vorstellen, in dem wir mit einigen benutzerdefinierten Objekten arbeiten Also was ich hier habe, ich habe einen Videospielkurs, es ist ziemlich einfach. Es hat vier private Felder, einen Konstruktor, eine Beispielmethode und hier nur ein Beispiel für öffentliches Eigentum, das nur den Titel des Videospiels erhält. Es macht nicht viel Ich habe die Klasse instanziiert. Hier habe ich ein Videospielobjekt namens Game One. Wenn Sie meinen 00-Tutorials von früher gefolgt sind, als wir diese Instanz verwenden . Hier können wir verschiedene Dinge sehen. Wir können unsere Get Publisher-Methode sehen. Und wir können unser Eigentum genau hier sehen, den Titel. Wir können das sehen, wenn dieses Fenster hier erscheint, das ist, als würde Visual Studio uns helfen Und ein anderes Wort davon heißt Intellisense. Und was Intel Sense macht, es bietet uns nur einige nette Das erspart uns das Tippen. Zum Beispiel können wir darauf doppelklicken und haben dann Zugriff auf die Methode Nummer eins. Wir wissen, dass die Methode da ist. Zweitens wissen wir, dass wir auf die Methode zugreifen können, sie ist nicht privat oder so. Drittens, wenn wir darauf doppelklicken, müssen wir uns keine Gedanken über die Rechtschreibprüfung machen, also ist es ziemlich gut Es gibt uns auch Parametertypen, die wir verwenden können, und informiert uns auch über Rückgabetypen Intel Sense, auch bekannt als Visual Studio, ist also ein sehr gutes Feature, das uns hilft, ist also ein sehr gutes Feature, das uns hilft und ich kann es nur empfehlen, es zu verwenden. Bei Verwendung des dynamischen Schlüsselworts ist Intellisense jedoch ist Intellisense Nun, dafür gibt es einen guten Grund, aber es ist einer der großen Nachteile gegenüber der Verwendung des dynamischen Schlüsselworts Schauen wir uns das jetzt an. Im Moment richte ich hier gerade ein Spiel ein. Dann möchte ich zum Beispiel den Herausgeber ermitteln, lassen Sie uns das einfach in einer Zeichenfolge speichern. Ich werde es in einer Zeichenfolge namens Pub speichern. Und dann möchte ich es einfach im Fenster ausgeben. Hier ist nicht viel los. Es sollte zum Beispiel Blizzard ausgeben. Lassen Sie uns die Software jetzt ausführen und wir können Blizzard sehen Es sieht so aus, als ob es gut funktioniert. Lassen Sie uns das nun in einen dynamischen Typ umwandeln. Jetzt habe ich ein dynamisches Objekt namens Game One. Es hat den Wert der neuen Instanz der Videospielklasse. Wie ich schon sagte, es muss keine doppelte Ganzzahl sein. Es könnte ein komplexer Typ sein, es könnte ein Array, eine Liste oder sogar eine benutzerdefinierte Klasse sein , wie die Videospielklasse. Absolut, das ist überhaupt kein Problem. Vollständig unterstützt durch das dynamische Schlüsselwort . Und auch das ist wie das Objekt hinter den Kulissen. Soweit ist alles in Ordnung. Und wenn ich die Anwendung ausführe, erhalten wir genau das gleiche Ergebnis, überhaupt kein Problem. Aber sieh dir an, was passiert. Jetzt setze ich einen Punkt nach Spiel eins. Sie können sehen, dass wir das alles im wahrsten Sinne des Wortes verloren haben. Visual Studio weigert sich jetzt, uns zu helfen. Wir wissen nicht, welche Methoden wir zur Verfügung haben , es sei denn, wir schauen uns das an und kopieren sie vielleicht und fügen sie ein Auf diese Weise gibt es jedoch viele Probleme. Die Sache ist die, sie ist darauf angewiesen, dass die Erde keine Fehler macht. Erstens, wie ich schon sagte, vielleicht ist das eine private Methode, also können wir außerhalb dieser Klasse nicht einmal darauf zugreifen. Also, weißt du, könnten wir hier ein großes Problem schaffen. Wenn ich die Anwendung starte, heißt es jetzt, heißt es jetzt aufgrund ihrer Schutzstufe nicht zugänglich Nun, was ist, wenn ich einen Tippfehler gemacht habe? Was ist, wenn ich F hier einfüge? Sie können sehen, dass es nicht rot hervorgehoben ist. Führen Sie die Anwendung aus und sie enthält keine Definition. Nun, das liegt daran, dass ich es falsch buchstabiert habe und es ein Unfall ist Aber Visual Studio hilft mir nicht. Ich habe null Intellisense. Das ist also einer der Nachteile der Verwendung des dynamischen Schlüsselworts Verwendung des dynamischen Schlüsselworts Sie haben absolut überhaupt keinen IntelliSense. Und Intellisense ist wirklich nützlich, und viele Leute halten es für selbstverständlich Aber es gibt Ihnen alle Methoden und Eigenschaften, die Sie tatsächlich für ein Objekt verwenden können Sie fragen sich vielleicht, was diese Zauberei vorher war, bei der Sie Publisher falsch geschrieben haben und es keine rote Linie gab Warum war das so? Was ist hier los? Warum konnte das Programm dich ausführen? Das ist normalerweise nicht erlaubt. Nun ja, das stimmt, denn wenn ich das wieder in ein Videospielobjekt verwandle, kannst du sehen, dass wir die rote Linie bekommen. Und das liegt daran, dass ich zu Beginn dieses Videos gesagt habe, dass C Sharp eine statisch typisierte Sprache Und das bedeutet nur, dass alles bei der Kompilierung abgefangen wird. Ich kann die Anwendung also nicht einmal kompilieren , weil hier die Fehler abgefangen werden. Wenn Sie jedoch das dynamische Schlüsselwort verwenden, ist all das weg. Nichts, was dynamisch ist, wird bei der Kompilierung abgefangen. Der Fehler ist also weg. Das Programm kann kompilieren. Das Programm kompiliert, wenn das schwarze Fenster erscheint, wie Sie dort sehen können Aber jetzt wird der Fehler tatsächlich zur Laufzeit abgefangen. Und das ist der Fehler , der ausgelöst wird. Es wird hier als Runtime-Binder-Ausnahme bezeichnet. Also Runtime-Binder-Ausnahme. Das passiert also zur Laufzeit während Ihre Software tatsächlich läuft. Kurz gesagt, wenn Sie das dynamische Schlüsselwort so verwenden, lässt Ihnen Visual Studio einfach freie Hand. Es heißt wortwörtlich, okay, tu, was immer du willst Wenn etwas dynamisch ist, rufen Sie eine beliebige Nachricht an, rufen Sie eine beliebige Immobilie an. Weißt du, es spielt keine Rolle. Ich werde dir keine roten Linien geben. Ich lasse Sie Ihre Software kompilieren, Sie können tun, was Sie wollen. Sie können menschliches Versagen einführen, so ziemlich Sie haben freie Hand. Das ist also ein Vorteil oder vielleicht ein großer Nachteil der Verwendung des dynamischen Schlüsselworts. In dieser Hinsicht liegt die Wahl also bei Ihnen. Aber Programmiersprachen wie Python, Ruby, sogar Java Script, das sind dynamisch typisierte Sprachen C Sharp ist jedoch eine statisch typisierte Sprache. Sie fragen sich vielleicht, warum eine statisch typisierte Sprache dies überhaupt unterstützt Weißt du, warum haben wir das überhaupt? Ich dachte, das wäre eine statisch typisierte Sprache. Nun, was ist, wenn Sie Software erstellen möchten , die mit Python-Software funktioniert? Wenn Python und Ruby beispielsweise dynamisch typisierte Sprachen sind, muss meine Software vielleicht mit ihnen arbeiten Und eine ausgefallene Art, dies auszudrücken , heißt Interoperabilität oder kurz Interrupt Wenn ich Software erstellen möchte, die mit der Software einer anderen Person funktioniert, diese aber eine andere Sprache verwendet hat, dann ist das dynamische Schlüsselwort hier tatsächlich sehr nützlich, selbst wenn man mit dem Dokumentobjektmodell arbeitet Nun, das ist etwas, das HTML und XML verwenden , wenn sie solche Dinge verwenden. Sie wissen einfach erst zur Laufzeit, welche Methoden und Eigenschaften verfügbar sind. Deshalb ist es sehr nützlich. Zur Compilerzeit ist nicht alles bekannt . Wenn Ihre Software kompiliert wird, wird sie Ihnen manchmal nur zur Laufzeit zur Verfügung gestellt Deshalb ist das dynamische Schlüsselwort wirklich nützlich. Also ein paar ausgefallene Terminologie für Sie. Wenn wir unser einfaches Videospielobjekt haben über das wir bereits gesprochen haben, und wir sagen wollen, eine Methode namens get publisher aufrufen, dann ist das ein Beispiel für das, was Early-Binding genannt wird. Und das heißt einfach, okay, diese Methode steht uns zur Verfügung, wir verwenden sie genau hier. Alle Fehler werden bei der Kompilierung erkannt. Wenn wir auf diese kleine graue Schaltfläche klicken und die Bindung früh abgeschlossen ist, funktioniert alles, es liegt kein Fehler vor. Wenn ich das zum Beispiel getan habe, gibt es ein Fehlerbeispiel für frühes Binden. Wenn dies jedoch dynamisch wäre und wir versuchen, dies jetzt zu tun, haben wir keine Ahnung, ob diese Methode verfügbar ist. Wir haben keine Ahnung, ob diese Methode öffentlich, privat oder intern geschützt ist . Wir haben keine Ahnung, ob ich es richtig geschrieben habe. Wenn ich die Anwendung jedoch ausführe, erfolgt die Bindung während der Laufzeit. Jetzt sofort, okay? Ja, die Methode ist verfügbar. Wir haben es gerade aufgerufen, wir haben ein Ergebnis. Dies ist ein Beispiel für spätes Binden, frühes Binden vor spätem Binden während der Laufzeit. Ein paar Dinge, die Sie vielleicht in Zukunft hören werden, aber ich dachte, ich würde sie jetzt ansprechen. Eine andere Sache, die ich nicht erwähnt habe, war Dynamik. Wenn Sie eine Variable definieren, zum Beispiel eine einfache Ganzzahl oder etwas Ähnliches, was auch immer Sie wollen, ist der Typ nicht wichtig. Sie müssen es nicht initialisieren. Du kannst, wenn du willst. Das kann nicht schaden, ist aber nicht erforderlich. Du musst nicht sagen, okay, das entspricht fünf. Du kannst das später herausfinden. Das ist eine weitere Sache, die Sie mit dem dynamischen Keyword tun können. Eine andere Sache, die Sie mit Dynamic tun können, ist, es sogar an Methoden zu übergeben und es aus Methoden zurückzugeben. Ich habe gerade eine Beispielmethode namens Echo eingerichtet. Es wird nur den Wert des Herausgebers widerspiegeln. Ich weiß zum Beispiel für ein Faktenspiel einen Verlag , der das für mich erledigt, ich habe kein Intellisense Ich gehe davon aus, dass es richtig geschrieben ist. Dann geben wir das einfach auf dem Bildschirm aus. Lassen Sie uns das auskommentieren und dann rufen wir die eigentliche Methode auf. Das sieht ziemlich gut aus. Wir übergeben das dynamische Spielobjekt als Parameter an die dynamische Spielobjekt als Parameter an Methode und geben das Ergebnis der Get-Publisher-Methode wieder. Lassen Sie uns das Programm ausführen Sieht aus, als ob es funktioniert. Sie können es hier sehen, aber nicht nur, wie ich bereits erwähnt habe, wir können auch das dynamische Schlüsselwort zurückgeben. Also hier rufe ich hier die Methode , die jetzt keine Parameter benötigt. Ich initialisiere ein neues Videospielobjekt und gebe es sofort zurück Aber ich gebe das dynamische Schlüsselwort zurück , weil ich kein Videospielobjekt haben möchte Und dann fange ich das Ergebnis hier in einem neuen dynamischen Spielobjekt ab und dann erhalte ich den Herausgeber. Sie können also sehen, dass es auch als Rückkehr funktioniert , dynamisch. Sie können es problemlos weitergeben. Lassen Sie uns das dynamische Keyword jetzt zusammenfassen. Beim dynamischen Schlüsselwort müssen wir uns keine Gedanken über die Typen machen, wir müssen uns keine Gedanken über die Casting-Typen Das Boxen und die Umstellung auf Boxen sind für uns erledigt. Das ist großartig. Es gibt jedoch Auswirkungen auf die Leistung. Auch hier müssen wir uns darum kümmern, dass unsere Methoden korrekt buchstabiert werden herauszufinden, ob sie tatsächlich zugänglich sind. Viele verschiedene Dinge. Kurz gesagt, Dynamik wird in einer typischen C Sharp-Anwendung nicht verwendet Wenn Sie nur einen Taschenrechner oder etwas ganz Einfaches erstellen , sollten Sie das dynamische Schlüsselwort nicht wirklich verwenden Wenn Sie jedoch vielleicht mit anderer Software arbeiten vielleicht mit anderer Software die in dynamischen Sprachen entwickelt wurden, oder vielleicht mit etwas, das als COM-Objekt oder dem Dokument-Objektmodell für HTML bezeichnet wird . Hier kommt das dynamische Schlüsselwort ins Spiel, und hier sollten Sie es verwenden, da Sie in solchen Fällen zur Kompilierzeit sowieso keinen Zugriff auf diese Methoden haben Möglicherweise haben Sie nur zur Laufzeit Zugriff auf sie. Hier würden Sie also das dynamische Schlüsselwort in diesem Sinne verwenden . Es wird also nicht in gängigen Shop-Anwendungen verwendet. Es ist also eines von denen mit Szenarien in denen Sie sich nie wirklich fragen, ich das dynamische Schlüsselwort verwenden sollte. Es wird dir normalerweise präsentiert. Okay, ja, das sieht definitiv so aus , als ob ich das dynamische Schlüsselwort verwenden sollte. Und genau das passiert im Allgemeinen, wenn Sie zum Beispiel eine neue Software Das dynamische Schlüsselwort bietet also eine dynamische Typüberprüfung, und es ist im Grunde der Objektdatentyp, aber auf Steroiden. Danke fürs Zuschauen. Ich hoffe es war nützlich. 68. 16-3. Das var-Keyword und die Typ-Inferenz: Basierend auf allem, was wir bisher gelernt haben. Was wäre, wenn ich dir sagen würde, dass wir keine Datentypen mehr benötigen? Zum Beispiel benötigen wir keinen Objektdatentyp für Videospiele. Wir benötigen keinen Listendatentyp. Wir benötigen keinen String-Array-Datentyp, nicht einmal ein Interble oder ein Zeichen Und alles ist in Ordnung und die Software wird kompiliert. Was zur Hölle ist hier los? Nun, lassen Sie mich etwas ganz anderes vorstellen. In diesem Tutorial werde ich jetzt über das Varki-Wort in C Sharp sprechen Es sieht ungefähr so aus. Wenn Sie meine vorherigen Tutorials zum dynamischen Schlüsselwort nicht gesehen haben , in denen ich über dynamische Typprüfung und auch über statische Typprüfung gesprochen habe, all diese guten Dinge, dann empfehle ich Ihnen dringend , sich diese anzusehen, bevor Sie mit diesem Tutorial fortfahren. Andernfalls wird es Ihnen schwerer fallen die in diesem Tutorial hervorgehobenen Konzepte zu verstehen. Was ist also das Schlüsselwort Var? Wie funktioniert es? Nun, wir können das Schlüsselwort Var verwenden , wenn wir so etwas wie eine Variable definieren. Zum Beispiel haben wir hier eine Integer-Variable und wir setzen sie auf 55. Wir könnten dies auch als v festlegen, was wie ein Var-Datentyp aussieht. Va ist jedoch kein Datentyp. Das Schlüsselwort Var ist die Abkürzung für okay. Finden Sie heraus, um welchen Datentyp es sich tatsächlich handelt , wenn Sie beispielsweise Ihre Anwendung kompilieren Alle Prüfungen, die das Schlüsselwort Var verwenden, werden also zur Kompilierzeit durchgeführt. Erinnern Sie sich jetzt an unser letztes Tutorial, in dem wir über das dynamische Schlüsselwort gesprochen haben und darüber, wie alles, was mit einem dynamischen Schlüsselwort zu tun zur Laufzeit herausgefunden wurde. Existieren die Methoden zum Beispiel? Existieren die Eigenschaften? Und dann verbindet es es irgendwie in einer späten Bindung miteinander. Zur Laufzeit, naja, die Va ist zur Kompilierzeit fertig. Wenn ich also zum Beispiel versuche, eine Methode für eine var-Variable aufzurufen eine Methode für eine var-Variable , dann wird es zu einem Fehler kommen, wenn die Methode nicht existiert. Aber das werden wir später behandeln. Schauen wir uns ein kleines Beispiel mit dem Schlüsselwort var an und dann machen wir weiter. Schauen wir uns jetzt ein paar einfache Beispiele an. Hier habe ich hier eine lokale Variable namens test. Aber anstatt ihr beispielsweise eine Ganzzahl oder eine Zeichenfolge oder etwas Ähnliches zu geben , verwende ich hier das Schlüsselwort var. Und wie ich bereits erwähnt habe, liegt es an Visual Studio und dem Compiler, herauszufinden, um welchen Datentyp es sich handelt Ich sage Visual Studio , weil ich die Variable hier gerade definiert habe Und wenn ich hier mit der Maus drüber fahre, können Sie sehen, dass es denkt, es ist eine Ganzzahl Wenn ich das in eine Zeichenfolge ändere, ist es egal, was da drin steht . Es kann leer sein. Ich bewege den Mauszeiger über Test, und jetzt ist es ein String-Datentyp Was es macht, es berechnet den Datentyp auf der Grundlage dessen, womit Sie ihn initialisieren Ich habe es mit einer Zeichenfolge initialisiert. Hier können Sie sehen, wenn ich mit der Maus darüber fahre, dass es sich wie zuvor um einen String-Datentyp Es könnte zum Beispiel eine Ganzzahl oder sogar ein Double sein, jetzt ist es ein Double Wenn ich die Anwendung nun tatsächlich kompiliere, wird hier anhand Ihrer Aktionen herausgefunden, ob etwas gültig oder ungültig ist. Dies ist der Kompilierungsprozess und hier wird tatsächlich herausgefunden, um welchen Datentyp es sich zur Kompilierungszeit handelt. Das ist ein einfaches Beispiel dafür dass Var kein Datentyp ist. Aber Sie können sehen, dass sein Datentyp tatsächlich auf dem basiert, wofür Sie ihn initialisieren Was passiert, wenn ich nicht initialisiere? Nun, das ist nicht möglich. Man kann nicht wirklich etwas mit dem Schlüsselwort var definieren und ihm keinen Wert geben weil dann das System keinen Datentyp daraus berechnen kann , wann immer es mit dem Schlüsselwort var immer initialisiert werden muss dem Schlüsselwort var immer initialisiert werden muss, damit es herausfinden kann, um welchen Datentyp es sich handelt, zum Beispiel eine Zeichenfolge Der Prozess, den Datentyp anhand des Initialisierungswerts zu ermitteln , nun, dafür gibt es ein ausgefallenes Wort und es heißt Typinferenz Vielleicht hören Sie das in der Zukunft. Es heißt Typinferenz, und hier erraten wir den Datentyp anhand des Anfangswerts. Unsere lokale Variable hier, der Typ, ist eine Zeichenfolge, weil sie hier auf dem Initialisierungswert basiert auf dem Initialisierungswert Was wir dann nicht tun können, ist dies einfach in einen völlig anderen Typ umzuwandeln . Das kannst du hier sehen. Der Typ kann nicht in eine Zeichenfolge konvertiert werden, sobald dieser initialisiert wurde. Zum Beispiel ist dies jetzt eine Zeichenfolge. Es ist so ziemlich eine Zeichenfolge für ihre gesamte Lebensdauer. Wir können es nicht einfach dann, okay, zu einer Ganzzahl machen, es zu einem Booling Das können wir mit dem Schlüsselwort Var nicht machen. Schauen wir uns ein Beispiel mit einigen komplizierteren Objekten an. Lassen Sie uns nun zum Beispiel ein Spielobjekt definieren. Dies ist unsere Videospielklasse, in der wir nur einige Beispielwerte übergeben. Hier kannst du dir den Kurs hier ansehen . Hier ist nicht viel los. Privates Feld, ein Konstruktor und eine Beispielmethode. Ich nenne diese Beispielmethode hier einfach Get Publisher Back Out Here. Ich richte ein neues Videospielobjekt ein, aber ich speichere es hier in einem Spiel, das das Schlüsselwort Var verwendet. jetzt dieses Spielobjekt verwenden, können Sie sehen, dass ich die volle Intellisense Hier habe ich die vollständige Visual Im Gegensatz zum dynamischen Schlüsselwort, denn ich erinnere mich daran, dass im letzten Tutorial als ich über Dynamik gesprochen habe, alles zur Laufzeit herausgefunden wird Wir haben also überhaupt kein Intellisense, weil all dies zur Kompilierzeit herausgefunden wird Dann habe ich vollen Zugriff auf den Intellisense . Ich werde also keine Tippfehler machen, Methoden erraten, Methoden aufrufen, die vielleicht privat sind, und ich rufe sie außerhalb Ich werde diese Fehler nicht machen, wie vielleicht bei der Verwendung des dynamischen Schlüsselworts der Fall wäre Wenn ich die Anwendung starte, können Sie jetzt sehen, dass ich den Herausgeber problemlos finde und dass ich vollen Zugriff auf die Intellisense habe Lassen Sie uns also über einige Fallstricke bei der Verwendung des Schlüsselworts Var sprechen der Verwendung des Was kann ich damit nicht machen? Und warum ist es schlecht? Zum Beispiel? Nun, im Gegensatz zum dynamischen Keyword hat Var nicht wirklich viele Nachteile oder negative Auswirkungen. Es gibt jedoch einige Nachteile. Zum Beispiel können wir das Schlüsselwort var nicht mit Methoden verwenden. Also hier habe ich hier eine Testmethode. Wenn ich versuche, etwas vom Typ var zurückzugeben, wird es mich nicht lassen. Ebenso, wenn ich es als Parameter verwende und ihm einfach einen Namen gebe, lässt es mich das auch nicht. Das liegt einfach daran, Visual Studio nicht über genügend Informationen , um den Typ anhand einer Rückgabe oder eines Parameters zu erraten . Zumindest wird mir das vorgegaukelt. Aber Sie können das Schlüsselwort var nicht als Parameter für eine Methode verwenden als Parameter für eine Methode oder sogar ein v von einer Methode zurückgeben. Es ist einfach nicht möglich. Aber mit dem dynamischen Schlüsselwort zum Beispiel können Sie das, mit dem Schlüsselwort var nicht. Schauen wir uns einen weiteren möglichen Nachteil der Verwendung des Schlüsselworts Var an. Lassen Sie uns jetzt einige dieser Dinge hier aufräumen. Was ich tun werde, sagen wir zum Beispiel, ich möchte eine Finanzsoftware entwickeln. Ich möchte damit Geld berechnen, aber ich möchte ein hohes Maß an Dezimalgenauigkeit. Ich möchte kein Geld verlieren, weil meine Software nicht genügend Dezimalstellen zulässt. Es ist ziemlich einfach zu machen. In einem Fall wie diesem benötige ich einen dezimalen Datentyp. Wenn Sie sich an mein erstes Tutorial erinnern , in dem ich über Dezimalzahlen gesprochen habe, habe ich über Gleitkommazahlen und über Doppelzahlen gesprochen Wenn Sie sich erinnern, hat Dezimalzahlen den höchsten Genauigkeitsgrad, also viele Doppelgänger liegen irgendwo in der Mitte. Und Gleitkommazahlen haben die geringste Genauigkeit, die geringste Anzahl von Dezimalstellen Ich möchte eine Dezimalzahl, weil ich mit Geld arbeite. Ich möchte nicht, dass etwas verloren geht Ich werde eine neue Variable erstellen. Es wird das Schlüsselwort var verwenden und ich werde es Geld nennen. Jetzt werde ich das initialisieren. Möge es zum Beispiel nicht wirklich wichtig sein, welcher Wert, aber ich werde vielleicht so etwas eingeben Eigentlich nein, lass uns ihn einfach auf Null setzen. Also habe ich es mit Null initialisiert und wenn ich das jetzt genauer betrachte, können Sie sehen, dass davon ausgegangen wird, dass der Datentyp doppelt ist Jetzt entspricht das Doppelte einem mittleren Genauigkeitsgrad, aber es liegt kein Weißt du, syntaktisch ist daran nichts falsch . Es ist perfekt. Die Anwendung läuft. Ich gebe hier Null aus. Jetzt kennt das System meine Absicht nicht , das System weiß es nicht Ich möchte eine Anwendung erstellen, die auf Geld basiert. Ich möchte eigentlich ein hohes Maß an Dezimalstellen. Ich möchte, dass das hinter den Kulissen eine Dezimalzahl ist. Also, wie mache ich das? Also, wenn Sie eine Dezimalzahl definieren, müssen Sie M einfach genau dort platzieren. Und wenn ich nach Geld suche, können Sie sehen, dass es sich jetzt um eine Dezimalzahl handelt, nicht um eine Doppelzahl Aber Sie können sehen, dass das nur menschliches Versagen ist. Ich könnte leicht vergessen, das M zu schreiben und jetzt habe ich ein Double. Also vielleicht, wenn ich meine Software kompiliere, meinen Kunden gebe, dann fangen sie an, sie zum Beispiel zu benutzen. Dann stellen sie fest, dass aufgrund der Rundung ein bisschen Geld fehlt , weil angenommen wird, dass es sich um ein Double handelt Ich verliere also viel an Genauigkeit, wenn ich diesen winzigen Fehler mache Diese Software ist dafür verantwortlich, Geld zu verlieren, und das ist nicht gut. Und auch hier verlieren Sie möglicherweise kein Geld. Sie könnten Geld gewinnen, aber Tatsache ist, dass es falsch ist. Ich könnte also leicht vergessen, dieses M hier zu verwenden und eine Dezimalzahl zu bekommen. Es ist also etwas, womit Sie sehr vorsichtig sein sollten . Deshalb werde ich Ihnen das jetzt klarstellen, wenn ich diesen Geldwert einfach auf einen hohen Grad an Dezimalgenauigkeit setze , weil wir mit Geld arbeiten Wenn ich die Anwendung starte, können Sie sehen, dass all diese Genauigkeit gekürzt wurde, sodass ziemlich viele Informationen fehlen Und das nur für die Tatsache , dass hier ein M verwendet wird. Also, weißt du, es ist ziemlich einfach zu machen. Also, wenn ich das zunächst als Dezimalzahl herausfinden würde. Und dann mache ich so etwas, dann können Sie sehen, dass es eine rote Linie gibt, sodass die Software nicht einmal kompiliert werden kann. Es ist ein Fehler aufgetreten. Und es heißt so ziemlich, okay, wenn du eine Dezimalzahl brauchst, musst du hier das M-Suffix verwenden Ich werde diesen Fehler niemals machen. Wenn ich diese Variable Geld explizit als dezimalen Datentyp definiere , ist das ein bestimmtes Szenario, in dem die Verwendung eines Var-Schlüsselworts zu Problemen führen könnte. In Zukunft möchte ich jetzt ein weiteres Beispiel zeigen, das mit dem Schlüsselwort Var und einem möglichen Nachteil seiner Verwendung zu tun hat. Hier habe ich meinen Videospielkurs genau hier. Hier gibt es verschiedene Felder. Was ich tun werde, ich werde einfach diese Felder kopieren und sie hier in die Hauptmethode verschieben hier in die Hauptmethode , damit ich etwas veranschaulichen kann. Was ich habe, ich habe diese verschiedenen Typen hier. Ich habe Ganzzahlen, Zeichenketten, Liste von Ganzzahlen und auch ein Spielobjekt Was ich tun werde, anstatt diese Datentypen hier zu haben, werde ich sie alle durch das Schlüsselwort Var ersetzen Und du wirst etwas bemerken wenn ich die Spielinformationen ändere, um das Schlüsselwort Var zu verwenden . Jetzt müssen wir ihm einen Wert geben , bevor wir es einfach so lassen können. Was als Null bezeichnet wird, hat keinen Wert, und wir werden in einem späteren Tutorial über Null sprechen. Aber jetzt benötigt es tatsächlich einen Wert, weil es den Datentyp ermitteln muss , ab dem Sie das Objekt instanziieren Jetzt können wir das nicht so leer lassen. Wir müssen ihm einen Wert geben. Das ist eine wichtige Sache, die es zu beachten gilt. Wenn wir das Schlüsselwort var verwenden, müssen wir es initialisieren Was ich tun werde, ich werde diese einfach in das Schlüsselwort Var ändern Damit wir noch etwas sehen können. Der andere Nachteil, vielleicht ein potenzieller Nachteil, oder zumindest das Bewusstsein, besteht darin, dass es schwierig ist, , wenn man sich die deklarierten Variablen hier ansieht zu sagen, um welchen Datentyp es sich handelt, wenn man sich die deklarierten Variablen hier ansieht. Vielleicht können wir herausfinden, dass console eine Zeichenfolge und title eine Zeichenfolge ist usw. Aber wir können die Null sehen und wissen, dass es sich um eine Ganzzahl handelt. Aber wenn wir das verwenden, besonders einer anderen Stelle in der Anwendung, müssten wir jedes Mal mit der Maus über die Variable fahren und herausfinden, dass es sich um eine Ganzzahl handelt indem wir uns nur diesen Namen ansehen. Offensichtlich steht daneben var, sodass wir den Datentyp int auch nicht sehen es sich handelt ersten Blick ist etwas unklar, um welchen Datentyp Vielleicht können wir mit unseren Variablennamen vorsichtiger sein und sie vielleicht rating int oder vielleicht rating number nennen . Und dann wissen wir auf den ersten Blick, dass, okay, es eine Zahl ist. Es ist besonders nützlich beim Debuggen, aber es ist nur zu beachten, wenn Sie das Schlüsselwort var verwenden, insbesondere bei der Deklaration der Variablen Hier sind diese expliziten Informationen in Bezug auf den Datentyp verschwunden Wir können uns wirklich nur den Anfangswert ansehen. Wir müssen unsere Maus über jeden einzelnen bewegen, nur um zu verstehen, um welchen Datentyp es sich handelt Wenn Sie also große, komplizierte Software haben und versuchen, Hunderte von Variablen zu debuggen, kann es ziemlich zeitaufwändig sein, herauszufinden, welchen Typ die Variable hat, und vielleicht gibt es ein Typproblem Vielleicht versuchen Sie zum Beispiel, eine Zeichenfolge in eine Ganzzahl einzuspeisen Wenn das ein potenzieller Fehler ist, dann kann es, du weißt schon, etwas länger dauern , bis er wenn wir hier keine expliziten Typen haben. Und wir müssen quasi mit der Maus über jeden einzelnen fahren, um herauszufinden, um welchen Typ es sich handelt Und das ist keineswegs ein Hindernis, es zwingt Sie nur dazu Ihre Variablen richtig zu benennen Zum Beispiel könnte eine Variable namens Bewertungsnummer ein besserer Name sein als nur Bewertung. Sie enthält etwas mehr Informationen über die Daten, die Sie in dieser Variablen speichern. Wenn überhaupt, lehrt es dich , ein besserer Entwickler zu sein. Das Letzte, worüber ich sprechen möchte, ist, wann ich das Schlüsselwort Var verwenden sollte. Sollte ich es komplett ignorieren und es nur als ein bisschen Wissen behalten oder soll ich es ständig verwenden? Gibt es irgendwelche Nachteile? Gibt es praktische Gründe? Nun, viele Leute verwenden das Schlüsselwort Var tatsächlich für alles. Ich habe mir Software angeschaut und sie verwenden nicht einmal Datentypen, oder zumindest hat fast alles das Schlüsselwort Var. Ich meine, daran ist nichts wirklich falsch, besonders wenn Sie beschreibende Variablentypen verwenden Sie sind ziemlich vorsichtig, wenn Sie zum Beispiel Dezimalzahlen und Gleitkommazahlen definieren. Es ist also nichts falsch daran, das Schlüsselwort Var zu verwenden Sie können das Schlüsselwort Var für so ziemlich alles verwenden, oder Sie können Standarddatentypen verwenden. Es liegt an dir. Es gibt jedoch einige Situationen, in denen das Schlüsselwort Var einige Vorteile hat. Also lass mich dir diese jetzt zeigen. Lassen Sie uns hier einige dieser Beispiele erläutern. Nehmen wir zum Beispiel an, wir entwickeln eine Software , die eine Reihe von Videospielshops verwaltet. Wir haben hier unseren Videospielkurs. Jedes Geschäft, das Videospiele verkauft, wird eine Liste von Videospielen in seiner Sammlung haben. Es wird ungefähr so aussehen. Wir möchten jedoch mehrere Geschäfte verwalten. Jedes Geschäft wird eine Liste mit Videospielen haben, aber vielleicht möchten wir katalogisieren, was jedes einzelne Geschäft hat. In einer solchen Situation hätten wir eine Liste mit einer Liste von Videospielen. Und das wird zum Beispiel wie bei der Ultimate Game Collection sein. Schauen Sie sich in diesem Fall diesen Datentyp hier an. Es ist ziemlich lang, es ist ziemlich nervig zu schreiben, es ist sogar ziemlich kompliziert , es anzusehen. Du könntest das sogar erweitern, indem du sagst, ich habe eine Liste von einer Liste von einer Liste. Sie wissen also, dass das Dilemma weitergeht. Sie können sehen, wie groß das ist. Aber in einer solchen Situation könnten Sie das Schlüsselwort var verwenden. Und das vereinfacht das alles einfach. Das erspart eine Menge Tipparbeit. Und Sie können sehen, dass Sie dort eine nette praktische Abkürzung haben, wenn Sie hier ziemlich große Datentypen haben und Sie nicht alles abtippen möchten und aus welchem Grund auch immer, in Tell Sense es Ihnen nicht anbietet. Oder vielleicht möchten Sie es wiederholen und nicht den ganzen Datentyp ausschreiben. Es ist ziemlich einfach, einfach das Schlüsselwort Var zu verwenden. Weißt du, es ist überhaupt kein Problem. Und wissen Sie, in Fällen wie diesem, wenn Sie keine Dezimalzahlen oder Doppelzahlen definieren und das Risiko besteht, dass Sie vielleicht die Dezimalgenauigkeit verlieren, dann ist so etwas völlig Es ist ein ziemlich einfacher Weg, das zu tun. Und Sie können sehen, wie schnell es war, nur drei Zeichen auf der Tastatur einzugeben, im Vergleich zu all dem hier. Nur ein Beispiel, es gibt noch ein paar weitere Beispiele, die wir noch nicht behandelt haben, aber wir werden eines davon behandeln. Eines der beiden Beispiele ist also etwas, das als Linkabfragen bezeichnet wird. Und ein anderes Beispiel ist die Erstellung anonymer Objekte , über die wir bald sprechen werden. Und das Schlüsselwort var eignet sich sehr gut zum Erstellen anonymer Objekte. Aber um es zusammenzufassen, und das Ergebnis dieses Tutorials ist, dass var kein Datentyp ist Var ist einfach eine nette Art zu sagen, okay, lassen Sie uns den Datentyp anhand der Initialisierung herausfinden anhand der Und dieser Prozess wird Typinferenz genannt. Das ist also das Schlüsselwort var in C Sharp. 69. 16-4. Anonyme Typen: In diesem Tutorial werde ich über anonyme Typen im C-Shop sprechen . Wenn Sie mein Tutorial zum Schlüsselwort Var noch nicht gesehen haben, empfehle ich Ihnen dringend, es zuerst anzusehen, bevor Sie sich dieses Tutorial ansehen. Also anonyme Typen, was sind sie? Schauen wir uns hier ein Beispiel an. Hier habe ich eine Klasse namens Videospiel, und ich erstelle vier Objekte. Es ist nicht wirklich wichtig, was hier drin ist, aber es gibt einen Konstruktor, einige Felder, verschiedene Eigenschaften und solche Dinge Sie können also in diesem Beispiel sehen, ich hier vier Objekte einrichte, indem ihnen unsere Klassen voranstelle, wie bei einem Datentyp Dann instanziiere ich ein neues Objekt mit all Aber um das zu tun, muss ich eine Klasse erstellen Jetzt muss meine Klasse einen Konstruktor haben. Nun, es muss keinen haben, aber ich habe einen und ich will einen Es hat all diese privaten Felder, einige Methoden und Eigenschaften und solche Dinge. Es hat also all das Zeug in dieser Klasse hier, nur um hier für Objekte zu erstellen. Aber bei sogenannten anonymen Typen müssen wir keine Klasse definieren. Sie sehen diese Klasse hier , in der wir Videospiele definieren. Wir brauchen keine dieser Definitionen. Wir brauchen diese Datei nicht. Wir brauchen diesen Kurs an sich nicht. Also, wie funktioniert das? Warum sollte es für uns von Vorteil sein, keine Klasse zu haben , aber wir müssen von der Klasse aus instanziieren Das ergibt für mich keinen Sinn. Bitte erläutern Sie anonyme Typen, sie sind aus mehreren Gründen nützlich. Einer der Hauptgründe ist etwas, das Link genannt wird. Nun, wir haben noch nicht über Link gesprochen, also werde ich jetzt nicht darüber sprechen. Aber eine andere Situation, zum Beispiel , wenn Sie einen Prototyp für eine Software entwickeln Sie möchten schnell eine Software erstellen, um sicherzustellen, dass etwas funktioniert Oder vielleicht möchten Sie nicht eine ganze Klasse mit vielen Methoden und Dingen erstellen . Weil das, was Sie erstellen, etwas ganz Einfaches und Schnelles ist . Es gibt also wirklich ein paar Gründe. Aber einer der Vorteile ist Geschwindigkeit, und ein weiterer Vorteil ist, wenn Sie etwas nicht besonders Kompliziertes erstellen, hat es vielleicht nur zwei Eigenschaften und Sie können nicht viel damit anfangen. Dann können Sie sogenannte anonyme Typen verwenden. Wie erstelle ich also eine Instanz einer Klasse , die nicht existiert? Nun, das ist eine sehr gute Frage. Und es beginnt mit dem Schlüsselwort var. Also was ich tun werde, ich werde dieses Videospielobjekt hier simulieren, aber anstatt die Videospielklasse zu verwenden, werde ich einen anonymen Typ verwenden. Also werden all diese gelöscht und wir werden diesen als Beispiel verwenden. Wie kann ich mit anonymen Typen eine Klasse instanziieren , die nicht existiert? Nun, weil die Klasse nicht existiert daher anonym ist, können wir sie hier nicht wirklich mit einem Klassennamen beginnen Hier verwenden wir das Schlüsselwort var über das wir in einem früheren Tutorial gesprochen haben. Jetzt wollen wir ihm einen Namen geben, ich nenne es einfach Game On. Jetzt müssen wir ein neues anonymes Objekt instanziieren. Wie machen wir das? Wir verwenden das neue Schlüsselwort, aber jetzt verwenden wir geschweifte Klammern In diesen geschweiften Klammern werden wir nun unsere Eigenschaften für unsere Klasse einrichten Diese Zeile hier ahmt diese Zeile hier ziemlich genau nach. Der einzige Unterschied besteht darin, dass wir keine Klasse definieren müssen Diese Klasse muss nicht existieren. Wir können sie nennen , wie wir wollen. Es spielt keine Rolle, weil es ein anonymer Typ ist. Wenn ich mein Objekt hier verwende, wenn ich hier einen Punkt setze, können Sie sehen, dass ich auf alle Eigenschaften zugreifen kann , die ich hier definiert habe. Ich habe sie mit verrückten Zeichen wie Gampd buchstabiert, aber Sie können sehen, dass das in der Liste erscheint und ich kann tatsächlich darauf als Eigenschaft zugreifen Genau hier haben wir eine Konsole , Herausgeber und Bewertung, du kannst sehen, dass es egal ist, wie ich sie nenne, es spielt keine Rolle, welche Werte Das ist rein anonym , weil es keinen Namen hat, es hat keine Klasse. Da es anonym ist, speichern wir es mit dem Schlüsselwort var in einem Objekt. Genau hier können Sie sehen, dass das ziemlich mächtig ist. Wir brauchen keine Klasse, sie ist völlig anonym, und dafür verwenden wir hier einfach das neue Schlüsselwort. Aber hier gibt es ein paar Ausnahmen. Wenn wir einen anonymen Typ wie diesen hier erstellen , können wir nur schreibgeschützte Eigenschaften erstellen. Es gibt keinen Konstruktor, es gibt keine Methoden, es gibt keine privaten Felder Stellen Sie sich vor, diese Klasse, die hier als Videospiel bezeichnet wird , wäre ein anonymes Objekt, dann können Sie hier nur schreibgeschützte Eigenschaften haben , Titel, zum Beispiel, Bewertung des Herausgebers und deren Schreibschutz Sie können die Werte nur abrufen, Sie können sie nur einmal festlegen. Und dann definierst du den anonymen Typ, genau hier, das anonyme Objekt, aber hinter den Kulissen würde das generiert werden, würde das generiert werden wenn du einen anonymen Typ erstellst. Lesen Sie also nur Eigenschaften, keine Konstruktoren, keine Felder, keine Methoden Das sind also die Einschränkungen bei der Verwendung von so etwas. Es hört dort nicht wirklich auf. Beim Erstellen anonymer Typen. Hier können wir tatsächlich einen anonymen Typ in einen anderen anonymen Typ einfügen . Wir können eine Reihe anonymer Typen erstellen. Wir können also viele verschiedene Dinge mit ihnen machen. Lassen Sie mich Ihnen jetzt ein Beispiel zeigen. In diesem Beispiel habe ich einen anonymen Typ genau hier in einem anderen anonymen Typ. Wenn ich hier meinen Tiertyp verwende und zu Punkt gehe, kann ich zu einer Art wechseln, die ebenfalls ein anonymer Typ ist , und auf das Geräusch zugreifen, das das Tier machen könnte. Die Tierart könnte ein Hund sein, wobei der Name des Tieres ein Hund wäre, und dann wäre das Geräusch eine Bar. Sie können zum Beispiel sehen, dass ich tatsächlich kaskadierende anonyme Typen habe Sie sind ziemlich mächtig darin, wie sie funktionieren. Und Sie können sehen, dass Sie, genau wie zuvor, das Schlüsselwort Var verwenden , die volle Kontrolle über den Intel-Sinn haben. Sie können hier deutlich alles sehen , was Sie angegeben haben. Das ist ziemlich cool. Eine Sache, die Sie nicht wirklich tun sollten, aber Sie können, ist, diese anonymen Typen an Methoden zu übergeben. Schauen wir uns ein Beispiel an. Nun, als ich zuvor über das Schlüsselwort var gesprochen habe, kann man var nicht als Parameter für eine Methode verwenden, es funktioniert nicht. Was Sie benötigen würden, ist das dynamische Schlüsselwort , in dem das funktionieren würde. Wenn ich die Testmethode dann hier nenne, gebe ich unser Tier gleich hier ab. Und dann können wir von hier aus darauf zugreifen. Aber weil wir Dynamic verwenden, haben wir, wenn Sie sich mein Tutorial Dynamic ansehen, wenn Sie sich mein Tutorial Dynamic ansehen, hier keinen Zugriff auf den Intell Sense, aber wir können ihn verwenden Aber auch hier gilt: Wir sollten Dynamic nicht wirklich verwenden , wenn wir es nicht brauchen Es wird wirklich nur empfohlen , es zu verwenden, wenn Sie es unbedingt müssen. Ich sehe nicht viele Situationen, in denen Sie möglicherweise einen anonymen Typ an eine Methode übergeben. Wirklich, sie sollten nur innerhalb der Methoden verwendet werden , sie sind definiert. Aber wenn Sie das tun müssen, können Sie ja das dynamische Schlüsselwort verwenden , um dieses Problem zu umgehen. Sie können jetzt also sehen, dass ich Dynamic verwende. Ich habe keinen Zugriff auf den Intel-Sense, aber ich kann das jetzt hier an diese Methode weitergeben. Lassen Sie uns also überprüfen, ob es funktioniert. Sie können hier also sehen, wie Bark ausgegeben wird. Es sieht so aus, als ob es ganz gut funktioniert Dies ist ein Beispiel für anonyme Typen in C Shop, da es sich um einen anonymen Typ handelt und er keinen Typ hat Daher würden Sie zu diesem Zeitpunkt das Schlüsselwort Var verwenden. Und Sie können hier sehen, dass Sie ihm zwei Methoden übergeben können, aber Sie müssten das dynamische Schlüsselwort verwenden , um es zu übergeben. Aber ich empfehle nicht, das zu tun. Schließlich handelt es sich bei der Erstellung anonymer Typen nur um Eigenschaften, und wenn sie einmal definiert sind, gelten sie als schreibgeschützt. Und Sie können sie nicht ändern, wie Sie hier sehen können Das sind anonyme Typen in C-Shop. 70. 17-1. Das null-Keyword: In diesem Tutorial werden wir über das Schlüsselwort Null sprechen. Das Null-Schlüsselwort sieht ungefähr so aus. Was ist das Null-Schlüsselwort und wie wird es auch verwendet? Warum sollten wir es verwenden? Wenn Sie mein vorheriges Tutorial gesehen , in dem wir über Stack - und Heap-Speicher sowie über Referenztypen und Werttypen gesprochen haben, werden Sie dieses Tutorial sehr schnell verstehen dieses Tutorial sehr schnell Hier sind einige Objekte vom Typ Referenz, wie zum Beispiel Listen, Zeichenketten, Arrays, Videospielobjekte Es ist eine benutzerdefinierte Klasse. All dies sind Referenztypen, und sie werden im Heap gespeichert, dem Heap-Bereich des Im Gegensatz dazu sind dies einfache Werttypen, also zum Beispiel Ganzzahlen, Boolings Haben Sie sich jemals gefragt, wann Sie eine Variable deklarieren, damit wir sie nicht initialisieren, ihr keine Werte Sie können sehen, dass die Software kompiliert wird, sie funktioniert, das ist kein Problem Wir haben sie deklariert, alles sieht ziemlich gut aus. Aber haben Sie jemals darüber nachgedacht, was die Standardwerte für diese sein könnten? Wenn wir ihnen nicht wirklich einen Wert geben, welcher wäre dann der Standardwert? Wäre er Null? Wäre es, was wäre es? Nun, lassen Sie uns einen Blick darauf werfen. Ich werde am Ende von hier einen Breakpoint hinzufügen und dann werde ich im Locals-Fenster nachschauen. Lassen Sie uns die Anwendung ausführen. Wenn wir jetzt hier zum Tab Locals kommen, können wir uns verschiedene Dinge ansehen, die mit unseren Variablen zu tun haben, die wir gerade definiert haben. Hier können Sie unsere Referenztypen sehen. Wir haben unsere Liste hier, wir haben unser benutzerdefiniertes Objekt hier, unser String-Array genau hier, Sie werden etwas bemerken. Der aktuelle Wert ist nein. Aber wenn Sie sich diese Wertetypen wie Integer, Boolean und Character oder ihre Standardwerte ansehen, unterscheiden sich ihre Standardwerte geringfügig Typischerweise hat ein Wertetyp den Standardwert Null. Wenn Sie Bolen als Null angeben, wäre das falsch. Ein Boolean als Eins wäre wahr. Sie können sehen, dass Bolen auch einen Standardwert von Null hat. Sogar diese Zeichenvariable hier hat einen Standardwert von Null Sie können hier ein Muster sehen. Es sieht so aus, als hätten Referenztypen einen Standardwert von Null oder was auch immer Null ist. Typen haben einen Standardwert, der wie Null aussieht. in diesem Beispiel hier Was ist in diesem Beispiel hier los? Erinnerst du dich, als wir über Referenztypen gesprochen haben? Wenn wir einen Referenztyp haben, wird ein Zeiger auf dem Stapel erzeugt. Aber der eigentliche Kern der Operation die Daten auf dem Haufen Der Zeiger auf dem Stapel zeigt auf die Daten auf dem Heap. Jetzt haben wir hier einen Referenztyp deklariert. Diese Liste und ihr Standardwert sind beispielsweise Null. Was Null hier sagt, ist, dass es sich um eine Nullreferenz handelt. Wir haben unseren Zeiger auf der Aufrufliste. Das ist im Stack-Bereich des Speichers, aber wir haben noch nichts auf dem Heap, wir haben es nicht instanziiert Das bedeutet, das neue Schlüsselwort zu verwenden . Wenn wir etwas mit dem neuen Schlüsselwort instanziieren, erstellen wir etwas im Heap-Bereich des Speichers In diesem Teil erstellen wir den Zeiger auf dem Stapel. In diesem Teil erstellen wir tatsächlich die Daten auf dem Heap und daher zeigt der Zeiger darauf Im Moment instanziieren wir jedoch nichts. Wir haben unseren Zeiger auf dem Stapel, aber er zeigt nirgendwohin Es gibt keinen Verweis auf die Daten im Heap-Speicher. Daher ist der Standardwert Null, was für eine Nullreferenz steht Es geht nirgendwohin. Sobald wir jedoch das neue Schlüsselwort verwenden, ändert sich der Wert von Null und es wird auf die Daten auf dem Heap verwiesen Stellen Sie sich Null als Nichts oder einen Nullzeiger oder eine Nullreferenz Es führt nicht wirklich irgendwohin, aber vielleicht wird es das später tun Sie können hier zum Beispiel sehen, dies nur für Objekte vom Typ Referenz gilt, komplizierte Objekte, über die wir bereits gesprochen haben. Es gilt nicht für Objekte vom Typ Wert. Da gibt es jedoch eine gewisse Bedingung. Dies gilt für Objekte vom Typ Wert, wenn sie als nullwertfähig markiert sind Jetzt werden wir später über NULL-Werte sprechen. Mach dir darüber keine Sorgen. Aber für dieses Beispiel gilt Null, wenn Objekte vom Typ Referenz deklariert werden, weil wir einen Zeiger benötigen, aber keinen haben Der Anfangswert ist Null, was nichts ist. Schauen wir uns ein paar Beispiele an, die jetzt mit dem Schlüsselwort Null arbeiten. Also was ich tun werde, ich werde eine Eigenschaft ausgeben oder vielleicht versuchen, eine dieser Methoden hier dieser Referenztypen zu verwenden . Ich werde einfach in das Konsolenfenster schreiben , ich werde eine zufällige Eigenschaft aus dieser Liste ausgeben. Ich werde zum Beispiel die Anzahl der Listenpunkte sagen. Schauen wir uns an, was hier passiert. Jetzt habe ich eine rote Linie. Sie können die Verwendung einer nicht zugewiesenen lokalen Variablenliste sehen. Ich kann dieses Objekt nicht einmal verwenden , weil es nicht zugewiesen ist Aber warte, ich dachte, es wäre standardmäßig Null. Nun, Null passiert standardmäßig zur Laufzeit, nicht zur Kompilierzeit. Das ist Kompilierzeit. Wir machen die Entwicklung tatsächlich genau hier. Das ist Kompilierzeit. Ich kann die Anwendung nicht einmal kompilieren. Was wir zur Kompilierzeit tun müssen, ist das einfach auf Null zu initialisieren Auf diese Weise verschwindet der Fehler und wir können das Programm tatsächlich ausführen Aber der Compiler hilft uns hier. Es heißt, schau, das ist Null. Sie sollten eigentlich keine Eigenschaften für einen Nullwert verwenden, sonst wird er umfallen. Aber indem wir es ausgetrickst haben, haben wir diesen Fehler behoben. Ich kann Ihnen also ein Beispiel für die Verwendung von etwas zeigen , das Null ist Jetzt ist die Liste Null. Ich versuche hier auf eine Eigenschaft namens count in der Null-Objektliste zuzugreifen . Mal sehen, was passiert. Jetzt ist hier ein Fehler aufgetaucht und es heißt Nullreferenz, Ausnahmeobjektreferenz, nicht gesetzt auf eine Instanz eines Objekts Jetzt werden Sie diesen Fehler bei Ihren zukünftigen Unternehmungen mit C Sharp häufig sehen Ihren zukünftigen Unternehmungen mit C Sharp Es ist nur eines dieser Dinge. Aber im Grunde können Sie hier sehen, unser Referenztyp Null ist. Wenn etwas Null ist, können wir keine Methoden dafür verwenden. Wir können keine Eigenschaften dafür verwenden, weil es keinen Wert hat, es hat keinen Speicher auf dem Heap gespeichert Es ist so ziemlich nur ein leerer Zeiger auf ein Objekt. Da ist nichts. Es ist Null, wir können es nicht benutzen. Alles was wir tun müssen, ist es zu instanziieren und ihm tatsächlich etwas zu geben Wenn ich die Anwendung jetzt ausführe, können Sie hier sehen, dass der Fehler behoben ist, weil wir das Objekt instanziiert haben und es nicht mehr Null ist Das ist etwas, bei dem man sehr vorsichtig sein sollte , wenn man mit Null arbeitet Ich denke, du verstehst den Punkt Null. Nun, wenn ich zum Beispiel eine Zeichenfolge habe, lassen Sie uns einige dieser Sachen hier löschen. Wenn ich eine Zeichenfolge habe, nenne ich sie Test. Ich werde es mit einer leeren Zeichenfolge initialisieren. Und was ich damit sagen will, ist zum Beispiel, dass eine leere Zeichenfolge nicht dasselbe ist wie Null Wir haben über Null gesprochen. Wir wissen, dass es sich um eine Nullreferenz handelt. Was viele Leute tun, verwechseln sie ein bisschen mit Null. Sie denken, es ist nur ein leerer Wert, wie eine leere Zeichenfolge. Das ist überhaupt nicht wahr. Und das kann ich dir beweisen, wenn ich zum Beispiel nur einen Bolen aufstelle Und ich habe eine Bedingung , die diese leere Zeichenfolge hier mit dem Nullwert vergleicht , und Sie werden sehen, dass sie falsch ist Was ich hier sagen will, ist, ob Test gleich Null ist, wenn eine leere Zeichenfolge dasselbe wie Null ist, ich kann es sogar so schreiben, ich brauche nicht einmal eine Variable. Dann gib den Wert true aus, wenn es derselbe ist, andernfalls false, wenn nicht. Sie können dort also sehen, dass Null keine leere Zeichenfolge ist. Ein Anfängerfehler, vielleicht das zu denken. Aber ich dachte, ich hätte erwähnt, dass Null nicht dasselbe ist wie eine leere Zeichenfolge. Null ist einfach eine Nullreferenz. Eine leere Zeichenfolge ist genau das, eine leere Zeichenfolge. Ich hoffe, das klärt, was Null ist und wie es verwendet werden kann und warum es erscheint In unserem täglichen Leben machen wir Softwareentwicklung. Danke fürs Zuschauen. 71. 17-2. Nullable-Werttypen: In diesem Tutorial werden wir über Typen sprechen, die Nullwerte zulassen Was sind nullfähige Typen? In unserem letzten Tutorial empfehle ich Ihnen dringend, sich das anzusehen wir über das Schlüsselwort Null gesprochen haben, habe ich kurz erwähnt, dass Objekte vom Referenztyp wie Listen und Objekte und Dinge, wenn Sie sie nicht initialisieren, den Standardwert Null erhalten, was ein Nullzeiger ist Bei Werttypen haben diese jedoch in der Regel den Standardwert Null Aber wenn wir versuchen, das Schlüsselwort Null mit einem Objekt vom Typ Wert zu verwenden , wird das nicht funktionieren, weil wir ihm nicht wirklich einen Referenzzeiger geben können. Da es sich um einen Wertetyp handelt, speichert es beispielsweise einen Wert wie 3.456 oder true Es speichert tatsächlich den Wert eines Wertetyps im Stack-Bereich des Speichers Was ist also ein Typ, der Nullwerte zulässt? Nun, ein Wertetyp wie dieser, der auf Null gesetzt werden kann, ist eine Instanz, in der ein Werttyp tatsächlich Null speichern kann Also warum sollten wir das tun wollen und wie machen wir das? Als ich zum Beispiel zuvor versucht habe, dies auf Null zu setzen , hat es nicht funktioniert. Wenn ich jedoch hier nach dem Datentyp ein Fragezeichen hinzufüge , können Sie sehen , dass der Fehler behoben ist. Was ist hier los? Nun, um ein Objekt vom Typ Wert in einen Ball, einen Charakter, einfache Typen umzuwandeln . Wenn wir hier am Ende ein Fragezeichen hinzufügen, dann steht das für einen Wertetyp, der Nullwerte zulässt Jetzt ist diese Variable ein Wertetyp, der NULL-Werte zulässt. Jetzt kann sie einen Wert annehmen, oder sie kann das Schlüsselwort Null annehmen Warum möchtest du das vielleicht tun? Was ist der Sinn davon? Nun, stellen Sie sich vor, Sie haben zum Beispiel ein Klassenbuch. Sie haben ein bisschen Software und sie kennzeichnet die Anwesenheit der Schüler in Ihrem Klassenzimmer. Nehmen wir an, es ist eine Datenbank an die Datenbank angehängt, Sie haben alle Namen der Schüler, Vorname, Nachname, all das gute Zeug. Und dann haben Sie einen booleschen Wert in der Datenbank und der Wert in der Datenbank würde so etwas heißen wie ist anwesend Nun, wenn die Kinder noch nicht einmal im Klassenzimmer angekommen sind, dann wissen wir nicht, ob sie anwesend sind Wir können nicht wirklich die Wahrheit sagen , weil wir es nicht wissen. Wir haben das Register nicht wirklich gemacht, wir haben nicht wirklich überprüft , welche Schüler zur Klasse gekommen sind. Aber wenn ich den Wert von Falls standardmäßig in der Datenbank speichere , kann ich ihn einfach auf true ändern , wenn sie in der Klasse anwesend sind. Nun, ich meine, das heißt, dass sie nicht anwesend sind, aber ich bin mir wirklich noch nicht sicher, weil sie noch nicht im Klassenzimmer angekommen sind . In Fällen wie diesem möchten Sie vielleicht Beispiel einen dritten Wert für einen Bolen Vielleicht möchtest du Null , falls wir es noch nicht wissen. Wenn der Student ankommt und er hier ist, können wir das für wahr halten. Aber wenn der Student abwesend ist, vielleicht ist er krank, wir können falsch sagen. In solchen Fällen möchten wir vielleicht einen dritten Wert. Und ein Schlüsselwort wie Null steht für so etwas wie einen Standardwert, zum Beispiel, dass man das Ergebnis noch nicht kennt, oder so etwas Ähnliches. Wenn wir uns also nicht sicher sind, ob sie schon da sind, könnten wir hier so etwas wie einen nullbaren Datentyp verwenden , nämlich den Und wir wissen nicht, ob sie in der Klasse sind, also können wir sie einfach auf Null initialisieren Und in der Datenbank dafür wäre dieses Feld vielleicht leer Oder es könnte sogar Null stehen. Es spielt keine Rolle. Aber der Punkt ist, wenn die Kinder anfangen, in die Klasse zu kommen, dann können wir das auf wahr und falsch setzen. Und das ist quasi das Prinzip, das dahinter steckt. Es gibt Ihnen zum Beispiel eine dritte Option. Und auch hier ist das bei ganzen Zahlen ähnlich. Wir können diese auf Null setzen, wenn wir keinen bestimmten Wert für die Zahl haben , die wir modellieren möchten Also, es gibt viele verschiedene Gründe, warum wir bei der Arbeit mit nullwertfähigen Werttypen einen nullwertfähigen Wertetyp verwenden möchten , indem einfach ein kleines Fragezeichen hinter dem Typ hinzufügen hinter dem Es gibt Ihnen ein paar weitere Optionen. Und warum ist das so? Nun, nehmen wir zum Beispiel diese Variable hier . Das ist nullfähig Wenn ich danach einen Punkt setze, habe ich hier Zugriff auf ein paar Immobilien Wenn ich das Fragezeichen entferne, sodass ich ein einfaches Bolen habe, können Sie sehen, dass diese Eigenschaften verschwunden sind. Was ist hier los? Warum habe ich diese zusätzlichen Eigenschaften für einen Wertetyp, der NULL-Werte zulässt liegt daran, dass es sich hinter den Kulissen um eine Struktur handelt, die einer Klasse sehr ähnlich ist eine Struktur handelt, die einer Klasse sehr ähnlich Anstatt wie zuvor eine einfache Boolene zu haben, bei der wir einfach eine Boolene haben und sie dann verwenden können Wir können es im Fenster ausgeben, wir können es an eine Methode übergeben, all das Wir haben eine Struktur. Stell es dir wie eine Klasse vor. Was die Klasse in diesem Fall macht, ist, dass sie nur zwei Eigenschaften verfügbar macht Einer ist der tatsächliche Wert für unseren nullbaren Datentyp. Dieser Stop-Wert, der jetzt anwesend ist , wäre dasselbe wie ein Datentyp , der keine NULL-Werte zulässt. Wenn diesen Wert verwenden, können wir hier die Eigenschaft value verwenden, um den zugrunde liegenden Wert zu ermitteln , der wahr oder falsch wäre Zum Beispiel hat es noch eine andere Sache namens hat einen Jetzt können wir diese boolesche Eigenschaft hier tatsächlich verwenden , um herauszufinden, ob sie einen Wert hat Was Sie normalerweise für so etwas tun würden ist eine if-Anweisung zu haben und zu sagen, okay, hat sie einen Wert Okay, sie hat einen Wert, also können wir zum Beispiel auf den Wert zugreifen und ihn auf der Konsole ausdrucken. Also so etwas und Dinge auf diese Weise zu tun und uns diese Eigenschaften zur Verfügung zu haben , vermeidet Dinge wie Nullreferenzausnahmen oder einfach nur die Suche nach Null zum Beispiel. Aus diesem Grund stehen diese Eigenschaften zur Verfügung. Wir wollen überprüfen, ob es einen Wert hat und dann können wir den Wert verwenden. Aus diesem Grund sind diese sehr nützlich. diesem Grund werden bei der Definition eines Datentyps, der NULL-Werte zulässt, diese zusätzlichen Eigenschaften zur Verfügung gestellt, damit Sie sie nutzen können , weil Sie damit diese dritte Option erhalten, die Wenn Sie sich fragen, ob Sie ein Objekt vom Typ Wert haben , das Nullwerte zulässt, und Sie es nicht initialisieren, dann wäre der Standardwert Null, in diesem Fall nicht Null dann wäre der Standardwert Null, in diesem Fall nicht Null. Da es nullwertfähig ist, ist der Standardwert kurz gesagt Null ist Das ist ein Beispiel für nullfähige Typen in C-Shop. 72. 17-3. Die Null-Koalescing-Operatoren: Nullkoaleszenzoperatoren in C sharp klingen sehr kompliziert. Aber was sind sie? Nun, eines davon sieht so aus, zwei Fragezeichen, ein anderes sieht so aus, zwei Fragezeichen gefolgt von n sind gleich Aber was sind diese zufälligen Zeichen, die du da eintippst? Ich höre Sie fragen: Erlauben Sie mir, zu erklären Null-Koaleszenzoperatoren es Ihnen ermöglichen, mit Referenztypen wie dieser Liste hier zu arbeiten , mit Referenztypen wie dieser Liste hier Was Null sein könnte, aber es könnte nicht Null sein. Außerdem Werttypen, die auf Null gesetzt werden können, die Null sein könnten oder etwas völlig anderes sein könnten Schauen wir uns hier ein Beispiel an. Also hier erstelle ich hier eine Liste von Zeichenketten, und das wird Einkaufsliste genannt. Und das wird alle Artikel auf meiner Einkaufsliste enthalten . Also gehe ich als Nächstes einkaufen, ich habe diesen Typ hier , der eine Ganzzahl ist und das sind die Kosten für meinen Einkauf. Jetzt werde ich diesen Wert standardmäßig auf Null setzen, weil ich noch nicht eingekauft habe. Jetzt finde ich vielleicht die Zeit, einkaufen zu gehen, aber vielleicht finde ich nicht die Zeit, einkaufen zu gehen. Wenn ich einkaufen gehe, entsprechen die Kosten dem Wert meines Ladens. Wenn ich mir jedoch nicht die Mühe machen kann, einkaufen zu gehen, wird der Wert Null beibehalten , weil ich noch nicht eingekauft habe Daher fallen für meinen Shop keine Kosten an. Später in der Anwendung spielt es keine Rolle, ob ich einkaufen gegangen bin oder ob ich nicht einkaufen ob ich einkaufen gegangen bin oder ob ich nicht einkaufen gegangen bin. Aber ich möchte eine Nachricht ausgeben, die besagt, dass meine Einkaufskosten damals dem Wert des Ladens entsprachen. In einer normalen Welt mit einem einfachen Datentyp wie diesem initialisieren Sie ihn vielleicht auf Null und dann, oder er könnte einen anderen Wert haben Ich starte zum Beispiel das Programm, es zeigt mir die Kosten für meinen Shop Wenn ich jedoch einen Wertetyp wie diesen erstelle, der Nullwerte zulässt, und ihn mit Null initialisiere, verwende ich hier normalerweise die Eigenschaft value, um auf den Wert zuzugreifen Wenn dies jedoch keinen Wert hat, habe ich vielleicht keine Zeit gefunden, einkaufen zu gehen Wenn ich dann das Programm starte, habe ich hier einen Fehler Wir haben schon einmal darüber gesprochen. Das Objekt, für das NULL-Werte zulässig sind, muss einen Wert haben. Sie können sehen, dass ich auf diese Werteigenschaft zugreife, aber ich überprüfe nicht , ob sie einen Wert hat Normalerweise mache ich in diesem Fall einfach eine if-Anweisung hier und überprüfe hier die Eigenschaft has value dieses nullbaren Typs Jetzt sage ich, wenn ich einen Wert habe, dann möchte ich den Wert ausgeben Das sieht so aus, als ob es funktionieren sollte. Jetzt sieht es so aus, als hätte ich nichts. Aber es stürzt nicht Zumindest sieht es ziemlich gut aus. Aber Sie können sehen, dass ich jedes Mal, wenn ich versuche, auf diesen Wert zuzugreifen , hier eine Bedingung erfüllen muss. Ich muss eine if-Anweisung machen und überprüfen, ob dort ein Wert steht bevor ich ihn endlich verwenden kann. Ob ich es im Fenster ausgeben möchte, ob ich den Wert an eine Methode oder eine Methode einer Klasse oder an einen anderen Ort übergeben möchte . Also im Grunde muss ich es überprüfen, bevor ich es tatsächlich benutze. Aber was wäre, wenn ich dir sagen würde, dass es eine Möglichkeit gibt diese beiden Dinge zu einem zu kombinieren? An dieser Stelle stelle ich einen der Nullkoaleszenzoperatoren vor, nämlich die beiden Fragezeichen Schauen wir uns hier an, wie ich das vereinfachen kann. Ich werde dort die Überprüfung „ Hat Wert“ entfernen und dann werde ich hier den Punktwert entfernen. Dann werde ich einen der Null-Koaleszenzoperatoren einführen , das sind zwei Fragezeichen Ich werde hier einfach Null als Beispiel verwenden und das Ganze in Klammern setzen, und das Ganze in Klammern setzen damit es keinen Was glaubst du, wird das jetzt bewirken? Oder vielleicht weißt du es nicht, weil ich es nicht genug erklärt habe. Lassen Sie uns die Software ausführen und sehen, was passiert. Ich lasse die Software jetzt laufen, da steht, dass die Einkaufskosten gleich Null waren. Sie können sehen, naja, die Kosten sind Null, aber aus welchem Grund auch immer, sie gibt diese Null hier Wenn ich jedoch die Kosten von 4567 ändere und die Anwendung starte, gibt sie jetzt tatsächlich 4567 aus Was ist hier los? Nun, dieser Null-Koaleszenzoperator sagt im Grunde, wenn das Null ist, es also keinen Wert gibt, dann bewerte, was sich auf der rechten Seite dieser beiden Fragezeichen befindet der rechten Seite dieser beiden Fragezeichen Wenn dies jedoch einen Wert hat, alles, was nicht Null ist Bewerten Sie beispielsweise diese Seite der Fragezeichen und ignorieren Sie diese Seite vollständig. Bewerten Sie diese Seite nicht einmal. So funktioniert also einer der Operatoren ohne Koaleszenz. Und Sie können sehen, dass wir diese Bedingung dort nicht brauchen. Es ist hier in einer ordentlichen kleinen Aussage aus zwei Zeichen verpackt , das sind zwei Fragezeichen Lassen Sie mich das etwas besser veranschaulichen, nur für den Fall, dass Sie es beim ersten Mal nicht verstanden haben Lassen Sie mich hier eine Methode erstellen. Und ich nenne es einfach Get Default Cost. Also, was diese Methode tun wird, sie wird einen Standardwert für die Kosten zurückgeben , wenn kein Wert angegeben ist. Mit diesem Operator hier wird es einfach Null zurückgeben. Ich füge nur eine Zeichenfolge an das Ergebnis an, was auch immer das auswertet Es wird entweder auf der linken Seite ausgewertet, was die Kosten ist, oder auf der rechten Seite, was Null ist Es muss jedoch nicht nur eine Null oder eine einfache Variable sein . Es könnte zum Beispiel das Ergebnis einer ganzen Methode sein. Wenn das nun Null ist, was es auch ist, wird es alles auswerten, was sich auf dieser Seite befindet. Es könnte ein einfacher Typ sein, es könnte eine Methode sein. Sie sehen, dass es hier viele Optionen gibt. Das nennt man Evaluieren. Wenn ich die Anwendung starte, gibt sie jetzt Null aus Und nur um zu beweisen , dass die Methode tatsächlich ausgeführt wird, lassen Sie uns sie ausführen Auch hier können Sie sehen, dass die rechte Seite ausgewertet wird , weil die linke Seite Null ist. Das ist die Stärke der beiden Fragezeichen, auch bekannt als Null-Koaleszenzoperator Hier ist die Syntax, hier die beiden Fragezeichen Die Verwendung ist, Sie haben einen Typ, der Nullwerte zulässt, unabhängig davon, ob es sich um einen einfachen Datentyp handelt, oder ob es sich um eine Liste handeln könnte, zum Beispiel, weil Referenztypen Null sein können , wie Sie Und dann haben wir auf der rechten Seite etwas, mit dem wir auswerten können, ob der nullwertfähige Typ, also dieser Typ auf der linken Seite , Null ist Wir haben über all das gesprochen, aber das ist eine nette Visualisierung falls Sie sie nicht gleich beim ersten Mal verstanden Das ist einer der Null-Koaleszenz-Operatoren hier. Ich möchte jetzt einen weiteren Null-Koaleszenzoperator einführen , der ungefähr so aussieht Es sind zwei Fragezeichen, gefolgt von einem Gleichheitszeichen. Und es ist dem letzten Beispiel ziemlich ähnlich, hat aber auch mit der Aufgabe zu tun. Also, was bedeutet das alles? Nun, schauen wir uns dieses Beispiel hier an. Ich habe hier eine Liste von ganzen Zahlen. Und diese Liste wird all diese Ausgaben zusammenfassen. Also all die Rechnungen, die ich diesen Monat bezahlt habe, alle Kosten für die Einkäufe, die ich in diesem Monat gemacht habe, und die gesamten Kosten mein Geld für nutzlose Dinge auszugeben Also alle diese werden hier als separate Einzelposten zu diesen Gesamtsummen hinzugefügt hier als separate Einzelposten zu diesen Gesamtsummen Es ist eine Liste, also möchte ich jede dieser Summen zu dieser Liste hinzufügen Das können wir also ganz einfach machen. Wir können die Methode ad verwenden, die das der Liste hinzufügt, und dann können wir einfach die Summen hier einfügen, aber denken Sie das der Liste hinzufügt, und dann können wir einfach die daran, es sich um einen Typ handelt, der Nullwerte zulässt, also müssen wir den Wert hier verwenden, was gut aussieht, aber oh, warte, nein Jetzt müssen wir überprüfen, ob es einen Wert hat. Wir müssen dieses Eigentum nutzen. Oh ja. Aber das muss hier so sein, dass es einen Wert hat. Dann können wir zum Beispiel den Wert hinzufügen. Das sollte funktionieren, aber denken Sie daran, als ich sagte, dass Null-Koaleszenzoperatoren Abkürzungen für all das sind Wir brauchen das alles überhaupt nicht. In solchen Fällen können wir den anderen Null-Koaleszenzoperator verwenden, nämlich die beiden Fragezeichen und das Gleichheitszeichen Was macht das und wie funktioniert das? Nehmen wir zum Beispiel an, diese sind hier als Null definiert, aus welchem Grund auch immer, während unserer Software geben wir ihnen keine wirklichen Werte, sie bleiben Null. Nun, vielleicht hat einer von ihnen einen Wert, aber aus welchem Grund auch immer, können einige von ihnen immer noch Null sein. Wir kommen dazu, diese zur Liste hinzuzufügen, wir wollen nur die Werte hinzufügen, bei denen sie nicht Null sind , weil wir einer Liste keine Null-Sachen hinzufügen können. Selbst wenn wir es versuchen, wird es nicht zu Buchstaben. Was ich tun möchte, ist, wenn diese zum Beispiel einen Wert wie diesen haben , dann möchte ich ihn der Liste hinzufügen. Dieser hat einen Wert von 4567, also möchte ich ihn hinzufügen Wenn sie jedoch Null sind, möchte ich stattdessen Null oder einen anderen Standardwert hinzufügen stattdessen Null oder einen anderen Standardwert Im Grunde möchte ich keine Null hinzufügen, weil ich das nicht kann. Es gibt tatsächlich einen schnellen Weg, das zu tun. Was ich tun kann, ist diesen Null-Koaleszenzoperator gefolgt von einer Null zu verwenden diesen Null-Koaleszenzoperator gefolgt von . Lassen Sie uns das zurücksetzen Was das bedeutet, wenn diese Variable hier Null ist, dann wird sie dieser Variablen Null zuweisen dann der Liste hinzufügen. Wenn das so ist, wenn die linke Seite dieses Operators Null ergibt, was auch der Fall ist, weil sie Null ist, dann erhält diese Variable den Wert dessen, was sich auf der rechten Seite befindet Denken Sie daran, dies könnte ein einfacher Wert sein, es könnte eine Methode sein, die einen Rückgabewert hat Es kann grundsätzlich jeder Ausdruck sein, der ausgewertet werden kann. Also lass uns hier einfach Null setzen. Was wir tun können, wir können das für all diese tun. Wir wollen zum Beispiel all unsere Kosten für die Rechnungen dazurechnen. Wir wollen natürlich die Kosten hinzurechnen, die entstehen, wenn wir unser Geld für nutzlose Dinge ausgeben. Schauen Sie sich jetzt an, was passiert, wenn ich das Programm starte und hier einen Breakpoint hinzufüge. Jetzt gehe ich hier runter zu meinen Gesamtwerten und erweitere sie. Sie können hier sehen, dass die Liste alle Nullen enthält. Dies ist der Standardwert, wie Sie hier sehen können Nicht nur das, Sie können sehen, dass sich dies in den Variablen selbst widerspiegelt, sie haben jetzt den Wert Null Um diesen Punkt zu veranschaulichen, werde ich einfach eins in etwas Ähnliches ändern. Ich werde die Software noch einmal ausführen. Wenn ich zum Locals-Fenster hier unten komme, können Sie sehen, dass diese Variable diesen Wert tatsächlich beibehalten hat. Sie wurde ihr zugewiesen, sie hat jetzt einen neuen Wert, 4567, und das spiegelt sich jetzt auch in der Liste Dieser Null-Koaleszenzoperator ist gleichbedeutend mit Fragezeichen Wenn die linke Seite Null ist, erhält die linke Seite den Wert auf der rechten So funktioniert dieser Operator. Genau wie zuvor. Ich werde einen Code-Kommentar schreiben, damit Sie das hier illustriert sehen können. Wenn der Nullwert-Typ beispielsweise Null ergibt, sind die Einkaufskosten Null, und zu beispielsweise Null ergibt, sind die Einkaufskosten Null, diesem Zeitpunkt sind sie Null Dann werten Sie alles aus, was sich auf der rechten Seite dieses Operators befindet, und weisen Sie es dem Typ zu, für den Wenn der Typ, für den Nullwerte zulässig sind, Null ist, erhält er natürlich er Das sind zwei Null-Koaleszenzoperatoren in C Sharp, wie sie funktionieren und warum sie nützlich Es ist nichts, was man nicht schon mit einer Bedingung machen kann, um den Wert zu überprüfen, aber es ist eine nette Abkürzung, um Code und auch Entwicklungszeit zu minimieren 73. 18-1. Benannte und optionale Parameter: Ich werde jetzt ein paar Tipps vorstellen, die Sie beim Aufrufen von Methoden in C Sharp verwenden können. Das hat mit der Übergabe der Parameter zu tun. Ich werde über sogenannte benannte Parameter und auch optionale Parameter in C Sharp sprechen. Schauen wir uns dieses Beispiel hier an. Es macht nicht wirklich viel. Ich habe eine Beispielmethode, sie verwendet verschiedene Parameter, alle von unterschiedlichen Typen. Wir haben ein Videospielobjekt, ein paar Zahlen, eine Zeichenfolge und auch ein Booling Innerhalb der Methode geben wir nur die Title-Eigenschaft dieses Spielobjekts aus, die wir hier oben im Konstruktor angeben Als Nächstes addieren wir die beiden Zahlen und zeigen das Endlich haben wir eine Bedingung. Wenn der Wert dieser boolenden Variablen wahr ist, geben wir die Nachricht hier aus Es ist ein ziemlicher Spießrutenlauf mit Aufgaben . Es hat in der realen Welt keinen wirklichen Zweck. Es dient nur dem Zweck dieses Beispiels. Wenn wir die Methode aufrufen, können Sie sehen, dass wir hier ein neues Objekt einrichten. Und dann rufen wir die Methode übergeben dieses Objekt und auch den Rest der Parameter wenn ich das Programm ausführe. Sie können sehen, dass es beim Aufrufen von Methoden so ziemlich genau das tut, was es bisher sagt. Wir haben diese Methoden mit den Parametern in der Reihenfolge aufgerufen , in der sie erscheinen. Das Spielobjekt ist „Zuerst bestehen wir das Spiel zuerst“, gefolgt von Nummer eins. Nummer eins. Nummer zwei, Sie können alle in der Reihenfolge sehen, in der sie angegeben sind , indem Sie sogenannte benannte Parameter verwenden. Wir müssen die Parameter nicht der Reihe nach angeben. Schauen wir uns jetzt ein Beispiel dafür an. Angenommen, ich möchte die Position dieser beiden Parameter hier ändern, Hallo, und auch den booleschen Wert true Jetzt möchte ich zuerst den Bolen angeben . Was wir tun, wir nehmen den Namen des Parameters hier und stellen ihm einfach so einen Doppelpunkt Wir werden das zuerst spezifizieren, jetzt werden wir die Nachricht spezifizieren. Danach machen wir genau das Gleiche. Wir nehmen den Parameter, fügen den Doppelpunkt und dann seinen Wert hinzu. Jetzt habe ich die Reihenfolge dieser beiden Parameter getauscht. Um das zu tun, muss ich den Namen des Parameters angeben , nur um dem System mitzuteilen , welcher zu welchem gehört. Wir korrigieren das hier einfach mit einem Doppelpunkt. Wenn ich die Anwendung starte, haben wir jetzt genau das gleiche Ergebnis. Das sind benannte Parameter. Sie können sehen, dass wir nur die Reihenfolge der letzten beiden Parameter geändert haben. Die ersten drei bleiben in derselben Reihenfolge. Dass wir diesen keinen Namen geben müssen , weil sie in derselben Reihenfolge sind. Wenn ich jedoch meinen ersten Parameter benennen und ihn an einer völlig anderen Stelle platzieren möchte, muss ich jeden einzelnen Parameter benennen. Andernfalls erhalten wir hier eine Fehlermeldung. In diesem Fall muss ich die ersten drei nicht benennen , da sie von Anfang an in exakt derselben Reihenfolge sind. Aber wenn ich das Spiel zum Beispiel ganz bis zum Ende verschiebe zum Beispiel ganz bis zum Ende und dem Spiel einen Namen gebe, der ungefähr so aussieht, dann erhalte ich diesen Fehler. Und das liegt daran, dass ich allem anderen den Namen voranstellen muss . Jetzt können Sie sehen, dass der Fehler behoben wurde , weil das Spiel aus der Position verschoben wurde. Und das war der allererste. Daher gibt es überhaupt keine Bestellung. Also werden sie alle einen Namen brauchen. In diesem Fall ist das die Stärke benannter Parameter. Aber warum ist es nützlich? Nun, man könnte argumentieren, dass es die Lesbarkeit verbessert. Man könnte anhand des eigentlichen Aufrufs selbst sagen, vorausgesetzt, diese Methode war in einer anderen Klasse oder einer anderen Datei gesperrt , Sie haben diese Sichtbarkeit nur auf Ihrer Seite, Sie können deutlich sehen, dass Nummer eins den Wert dieser Zahl zwei hat, da Sie dadurch ein bisschen mehr Informationen über den Aufruf Es erzeugt jedoch etwas mehr Code in Ihrer Anwendung. Ein weiterer Grund, vielleicht arbeitet ein Entwickler an dieser Methode. Hier ist die Methode noch nicht ganz fertig. Sie haben zum Beispiel vielleicht fünf Parameter, aber vielleicht werden sie bald noch ein paar mehr hinzufügen. Ihre Aufgabe als Tester ist es, die Methode zu testen. Sie testen die Methode mit diesen fünf Parametern, wissen aber nicht, ob der Entwickler später weitere davon hinzufügen wird. Was Sie also tun können, Sie können hier benannte Parameter verwenden hier benannte Parameter um beliebige Tests durchzuführen. Wenn der Entwickler dann zwei weitere in beliebiger Reihenfolge hinzufügt, spielt das keine Dann wissen Sie, dass Ihre Parameter nicht versehentlich an andere übergeben werden. Wenn der Entwickler dann zum Beispiel zwei weitere Integer-Parameter hinzufügt, dann wissen wir, dass Nummer eins und Nummer zwei in diesem Fall 5,3 sein werden. Wenn der Entwickler zum Beispiel 3,4 hinzufügt, setzen wir diese Zahlen nicht versehentlich in diese Slots. In solchen Fällen ist es sehr nützlich, wenn Sie nicht versehentlich Parameter desselben Typs an verschiedene Parameter übergeben . Sie sagen buchstäblich, okay, dieser Parameter, der so heißt, erhält diesen Wert. Das ist ziemlich nützlich. Das sind nicht nur Methoden. Sie können dies auch in Konstruktoren und einigen anderen Dingen tun Wenn ich zu dieser Videospielklasse gehe, in der wir diesen Parameter für den Konstruktor angegeben haben , können Sie sehen, dass der Konstruktor nur ein Argument akzeptiert, nämlich Genau wie beim Aufrufen von Methoden kann ich dem zum Beispiel einen Titel voranstellen und es wird problemlos kompiliert Wir sind nicht auf Methodenaufrufen mit solchen benannten Parametern beschränkt . Wir können sie auch in Konstruktoren und ähnlichen Dingen verwenden Konstruktoren und ähnlichen Dingen Lassen Sie uns jetzt über optionale Parameter sprechen . Was bedeutet das? Wenn Sie einen optionalen Parameter haben, können Sie dem Parameter einen Standardwert geben , wenn kein Parameter angegeben ist. Schauen wir uns zum Beispiel diese Display-Meldung Bolen an. Genau hier übergeben wir den Wert von true. Sagen wir einfach, wir müssen keinen Wert übergeben. Aber wir können, wenn wir wollen, was wir hier tun können, sagen, okay, wenn dieser Parameter nicht an diese Methodenanzeige übergeben wird, dann setzen wir ihn einfach auf den Standardwert true. Wenn der Parameter weggelassen wird, ist er nicht da. Wenn diese Methode dann aufgerufen wird, wird sie sie einfach auf true initialisieren Wenn das hier wahr ist, wird die Nachricht ausgegeben Wir können uns das jetzt ansehen, um zu sehen, ob das funktioniert. Sie können sehen, wie die Nachrichten ausgegeben werden. Ebenso wird uns diese Meldung überhaupt nicht angezeigt, wenn ich diesen Standardwert auf False ändere . Es wird nicht Hallo sagen, was nicht der Fall ist. Bei der Angabe optionaler Parameter in C Sharp müssen sie nach den erforderlichen Parametern suchen. Wenn ich beispielsweise eine Nachricht zu einem optionalen Parameter mache, initialisiere ich sie einfach mit einem Standardwert einer leeren Zeichenfolge wie dieser Sie können sehen, dass ich hier einen kleinen Fehler habe, wenn ich versuche, die Anwendung zu kompilieren Wenn ich das zum Beispiel einfach auf true setze, können Sie sehen, dass ein Fehler vorliegt. Wenn wir hierher kommen, können wir diesen Fehler hier sehen. Optionale Parameter müssen hinter allen erforderlichen Parametern stehen. Alle optionalen Parameter müssen am Ende stehen. Hier kannst du so viele haben, wie du willst. Zum Beispiel können wir message als leere Zeichenfolge zum Standardwert machen und die Nachricht auch als Standardwert true anzeigen. Dann können wir diese Werte tatsächlich entfernen. Wir können sogar so weit gehen zu sagen, okay, lass uns diese beiden Zahlen auf Null initialisieren , wenn sie nicht angegeben sind Sie können also dort sehen, dann brauchen wir diese zum Beispiel nicht Aber es hängt wirklich von Ihrem Zweck ab und davon, was Sie erreichen möchten, wenn wir die Anwendung ausführen. Jetzt können wir sehen, wie wir die beiden Zahlen addieren, eine Null, weil wir sie mit Null initialisieren, weil wir die Parameter nicht angeben So ziemlich das Einzige, was wir tun, ist hier den Titel des Videospiels auszugeben, obwohl wir diese Methode hier aufrufen Wenn wir uns jetzt die Parameterliste ansehen können Sie sehen, dass es hier etwas mehr zusätzliche Informationen Es erfordert ein Videospiel , da dies ein erforderlicher Parameter ist. Sie können jedoch sehen, dass optionale Parameter jetzt über diese eckigen Klammern verfügen. Außerdem erhalten Sie den Standardwert 00, eine leere Zeichenfolge und auch „true“ Es gibt Ihnen auch einige Rückmeldungen darüber, was erforderlich ist , wenn Sie versuchen, diese Methode aufzurufen. Sie können sehen, wie diese optionalen Parameter dargestellt werden , wenn Sie versuchen, Ihre Methoden aufzurufen. Auch hier sind Sie nicht auf Methodenaufrufen beschränkt. Damit können Sie diese, genau wie zuvor, in Konstruktoren und auch in einigen anderen Dingen verwenden auch in einigen anderen Dingen Delegiert Indizes. Wenn ich meinen Parameter Standardwert, als leere Zeichenfolge, auf den Konstruktor setze, benötige ich diesen Wert nicht mehr, da er optional ist Wenn wir die Anwendung ausführen, erhalten wir nur eine leere Zeichenfolge Sie können dort sehen, dass es keinen Spieltitel , da der Standardwert eine leere Zeichenfolge ist. Das ist die Stärke benannter Parameter und auch optionaler Parameter in C Sharp. Es eröffnet den Dingen ein ganz neues Reich von Möglichkeiten. Ich hoffe, dieses Tutorial hat dir geholfen und viel Spaß beim Codieren. 74. 18-2. Das out-Keyword: Ich werde über das Schlüsselwort out in C Sharp sprechen und warum es nützlich ist. Betrachten Sie dieses Beispiel hier. Diese Methode, was sie tut, benötigt vier Parameter. Ich möchte diese beiden addieren und dann diese beiden zusammen subtrahieren Sie können sehen, dass ich das hier mache. Ich erhalte das Ergebnis der Addition in dieser Variablen und das Ergebnis der Subtraktion in dieser Variablen Aber wie gebe ich beide zurück? Als wir über Rückgaben in Methoden gesprochen haben, können wir hier einen Typ zurückgeben, aber wir können nur einen Wert zurückgeben. Wie würde ich vielleicht 235 verschiedene Dinge aus einer Methode machen? Ist das möglich? Nun, kurz gesagt, ja, wir können dafür das Schlüsselwort out verwenden. Und Sie sehen das Schlüsselwort out, das in vielen Fällen verwendet wird. Zum Beispiel könnte eine Methode einige Operationen ausführen und ein Ergebnis zurückgeben. Aber wir möchten vielleicht auch zurückgeben, ob die Methode erfolgreich war , oder vielleicht ein Protokoll aller Fehler, die dabei aufgetreten sind. Wir benötigen nicht nur das Ergebnis der Methode, sondern vielleicht auch mehr Informationen darüber, wie sie damit umgegangen ist, weißt du, welche Fehler aufgetreten sind oder so ziemlich ähnliches. Schauen wir uns also das Schlüsselwort out an und wie nützlich es ist. Nun das Schlüsselwort out darüber, wie es sich verhält Es ist dem Schlüsselwort ref sehr ähnlich Wenn Sie sich mein Tutorial zum Schlüsselwort ref oder zur Übergabe von Typen anhand von Methoden nicht angesehen haben, empfehle ich Ihnen dringend, sich das anzusehen Schlüsselwort ref oder zur Übergabe von Typen anhand von Methoden nicht angesehen haben, empfehle ich Ihnen dringend, sich das anzusehen Was ich hier tun werde, ich habe hier zwei lokale Variablen definiert, result, add und results subtract, und ich habe sie auf Null initialisiert Im Moment gebe ich sie im Fenster aus. Innerhalb der Methode mache ich so ziemlich genau das Gleiche, aber ich möchte, dass sich diese Ergebnisse hier in diesen Variablen widerspiegeln damit ich sie in das Fenster ausgeben kann, weil ich diese beiden Werte momentan nicht aus dieser Methode herausholen kann diese beiden Werte momentan nicht aus dieser Methode herausholen Wie mache ich das? Schauen wir uns die Verwendung des Schlüsselworts out an, was ich hier in der Parameterliste tun kann. Für diese Methode kann ich mit dem Schlüsselwort out einen zusätzlichen Parameter hinzufügen . Was ich tun möchte, ich möchte diese beiden Werte aus der Methode zurückgeben . Ich werde hier zwei Ausgangsvariablen haben. Die erste wird das Ergebnis der Addition sein. Der zweite wird das Ergebnis der Subtraktion sein Ergebnis der Subtraktion Da diese nun mit ihren eigenen Typen und eigenen Namen an die Methode übergeben werden , kann ich ihnen dann keinen brandneuen Typ geben. Ich entferne diese. So ziemlich funktioniert es. Jetzt können Sie sehen, dass hier ein Fehler aufgetreten ist. Und wenn ich mit der Maus darüber fahre , dass kein Argument angegeben wird, das dem erforderlichen Parameter entspricht, muss ich im Grunde zwei zusätzliche Parameter angeben Die Anzahl der Parameter entspricht der Definition. Hier, ich brauche noch zwei. Wenn Sie hier das Schlüsselwort out in der Methodendeklaration haben , müssen Sie beim Aufrufen der Methode auch das Schlüsselwort out angeben . Das werde ich hier tun. Wenn Sie sich mein Video über das Schlüsselwort ref und die Übergabe von Wert- und Referenztypen an Methoden angesehen haben, wissen Sie, dass wir, wenn wir etwas per Referenz an eine Methode übergeben , die Werte innerhalb der Methode ändern können und wir verweisen auf den Speicherbereich , in dem sich diese Variablen Genau das macht das Schlüsselwort out. Hier gibt es jedoch einen subtilen Unterschied zwischen dem Schlüsselwort ref und dem Schlüsselwort out. Das heißt, Variablen müssen nicht initialisiert werden, bevor eine Variable mit dem Schlüsselwort out übergeben mit dem Schlüsselwort out Was meine ich damit? Nun, lassen Sie uns tatsächlich sehen, ob dieses Beispiel funktioniert. Zuerst, bevor wir uns selbst überholen, übergebe ich 20 Werte als Schlüsselwortparameter. Sie kommen in die Methode, und dann legen wir die Werte genau hier fest. Lass uns einen Blick darauf werfen. Sie können sehen, dass wir das erwartete Ergebnis erzielen. Zwei plus zwei ist 4,6 minus vier ist zwei. Es funktioniert. Und wir bekommen tatsächlich beide Ergebnisse aus der Methode zurückgegeben. Aber es geht nicht wirklich darum , aus der Methode herauszukommen, es geht nur darum, diese beiden Werte zu modifizieren, während sie per Referenz an diese Methode übergeben werden, und dann geben wir nur die Ergebnisse Ich habe bereits gesagt, dass es einen subtilen Unterschied zwischen dem Schlüsselwort out und dem Schlüsselwort f Und das heißt, dass bei Verwendung des Schlüsselworts out die übergebenen Variablen nicht initialisiert werden müssen, das heißt, sie benötigen keinen Wert Es wird immer noch funktionieren, wenn ich die Software starte. Jetzt können Sie sehen, dass sie Werte haben. Und das liegt daran, dass wir, wenn hier Dinge an eine Methode übergeben werden , ihnen einen Wert geben müssen. Wenn wir das nicht tun, übergeben wir eine Variable. Hier können Sie sehen, dass ein Fehler vorliegt und es heißt, dass das Ergebnis ad zugewiesen werden muss, bevor die Methode abgeschlossen ist. Also müssen wir hier tatsächlich etwas mit diesen Out-Parametern machen. Wir müssen etwas mit ihnen machen, ihnen einen Wert geben, sie initialisieren, etwas tun, das den subtilen Unterschied zwischen out und ref ausmacht Aber im Allgemeinen ermöglicht Ihnen das Schlüsselwort out gewissermaßen, mehr als ein Objekt aus einer Methode zurückzugeben, und das ist ihre Hauptstärke Wirklich eine andere Sache, wir müssen unsere Variablen hier nicht definieren. Wir können sie tatsächlich alle in einer Zeile definieren. Wenn ich diese Variablen zwischen dem Schlüsselwort out und der Variablen komplett entferne , tippe ich einfach zum Beispiel int für den Datentyp ein. Jetzt definieren wir hier unsere Variablen tatsächlich in einer Codezeile. Und Sie können sehen, es sieht nach einer tollen Idee aus. Also definieren wir sie hier, dann geben wir sie alle in einem weiter. Und dann tut es etwas, wirft sie wieder raus. Und dann geben wir die Ergebnisse aus. Sie können also sehen, dass wir hier dieselben Ergebnisse erzielen. Das ist also die Stärke des Schlüsselworts out in C Sharp. 75. 18-3. Das in Keyword: Ich werde über das Schlüsselwort in C Sharp sprechen. Jetzt habe ich ein sehr einfaches Beispiel. Hier rufe ich eine Methode auf, die zwei Zahlen zusammenzählt. Wenn die Methode aufgerufen wird, füllen wir das Ergebnis davon in eine Variable und geben das Ergebnis aus, indem wir zwei plus zwei addieren, wir erhalten die Ausgabe von vier Wie kommt das Schlüsselwort dazu? Nun, wenn wir das Schlüsselwort hier in einer Methode verwenden, können wir es vor jedem beliebigen Parameter angeben. Erstens, was das Schlüsselwort bewirkt, verhindert es, dass wir diesen Wert überhaupt ändern können. Wenn wir dann zum Beispiel versuchen, einen solchen Wert festzulegen, können Sie sehen, dass die Software nicht einmal kompiliert wird. Wenn wir das markieren und mit der Maus darüber fahren. Es heißt, dass die Variable int nicht zugewiesen werden kann, da sie schreibgeschützt ist Es hindert uns tatsächlich daran irgendetwas mit dieser Variablen zu tun. Auch hier könnten wir dies auf eine beliebige Anzahl von Parametern setzen , die wir möchten. Dies sind einfache Werttypen, einfache Ganzzahlen. Schauen wir uns an, wie das mit Objekten funktioniert. Sie können hier zum Beispiel sehen, dass ich hier ein Beispiel mit einem Objekt habe, wie zum Beispiel ein Videospiel Ich setze den Titel des Spiels über den Konstruktor auf Minecraft und gebe einfach den Titel des Spiels Aber wenn ich versuche, dieses Objekt in irgendeiner Weise zu ändern , wenn ich das Schlüsselwort in angebe, wird ein ähnlicher Nur-Lese-Fehler Sie können hier sehen, dass ich den Titel lösche , indem ich ihn auf eine leere Zeichenfolge setze Aber es heißt, es kann nicht zugewiesen werden, es ist nur lesbar. Ebenso habe ich genau den gleichen Fehler, wenn ich versuche, daraus eine neue Instanz zu erstellen versuche, daraus eine neue Instanz . Das ist die Stärke des Schlüsselworts in C Sharp. Es verhindert, dass Dinge wie Methoden versehentlich Ihre Parameter ändern , die Sie übergeben möchten. Wenn Sie wissen, dass diese Methode nicht dafür verantwortlich ist , Ihre Parameter in irgendeiner Weise zu ändern, sollten Sie erwägen, sie mit dem Schlüsselwort in anzugeben , um Ihre Daten zu schützen und zu verhindern, dass Methoden Ihre Daten ändern und dass unerwartete Dinge passieren, was ziemlich oft passieren kann, glauben Sie mir. Aber das Schöne an dem Schlüsselwort ist ja, Sie könnten hier zum Beispiel eine Konstante oder eine schreibgeschützte Variable übergeben . Aber vielleicht sind Ihre Objekte nicht schreibgeschützt oder konstant, sondern Sie möchten sie nur vorübergehend nur für die Dauer der Methode lesbar machen . Das ist der Sinn des Q-Wortes in C-Shop. 76. 18-4. Das params-Schlüsselwort: Das Schlüsselwort Perms in C Sharp. Es sieht einfach so aus und ist die Abkürzung für Parameter. Aber was bedeutet es und was macht es? Schauen wir uns dieses Beispiel an. Genau hier habe ich eine Methode, die einige einfache Ganzzahlen zusammenfügt Es benötigt vier Parameter, addiert sie alle zusammen und gibt das Ergebnis aus Die Methode übernimmt sie von dem, was auch immer sie aufruft. Wir fügen 224,5 hinzu. Lassen Sie uns das Ergebnis ausgeben. Da ist es da. Wenn ich zum Beispiel zwei Zahlen addieren möchte, möchte ich vielleicht drei Zahlen zusammenzählen. Oder vielleicht 17 Zahlen zusammen. Aber ich will dasselbe, ich will nur eine Methode. Ich möchte dieselbe Methode und eine Methode, um all diese Zahlen zu addieren. Wie erreiche ich das? Nun, vielleicht könnte ich ein benutzerdefiniertes Objekt erstellen, zum Beispiel alle Zahlen eingeben. Oder vielleicht eine Liste erstellen und alle Zahlen zur Liste hinzufügen. Dann kann ich die Liste an diese Methode übergeben. Im Wesentlichen macht das das Schlüsselwort prams genau das. Wenn ich in diesem Fall das Schlüsselwort Prams verwende, tippe ich hier Prams in die Hier ist es ein Parameter selbst. Als nächstes gebe ich den Datentyp ein. Der Datentyp kann hinter den Kulissen so ziemlich alles sein. Er verwendet den Objektdatentyp, dem ohnehin alle Datentypen abgeleitet Aber wir verwenden Integer. Wir können benutzerdefinierte Objekte verwenden, wenn wir möchten. Benutzerdefinierte Instanzen, das ist nicht wirklich wichtig. Ich werde diese Liste einfach aufrufen weil diese Liste all unsere Zahlen enthalten wird all unsere Zahlen enthalten , die wir an diese Methode übergeben. Wenn wir jetzt mit Listen arbeiten, werden wir so etwas wie eine Schleife verwenden, um jedes Element in dieser Liste in einer Schleife zu durchlaufen. So können wir alle Zahlen zusammenzählen. Lass uns das jetzt machen. Wir initialisieren eine Variable auf Null. Dadurch wird eine Liste aller Zahlen gespeichert, die wir addieren Das sollte genau dort funktionieren. Wir schauen uns jede Zahl in der Liste an. Wir führen eine laufende Bilanz, fügen hier alles zu diesem Ergebnis hinzu und geben es dann aus. Wir werden das gleiche Ergebnis erzielen. Hier können Sie 13 sehen Das ist nun die Stärke des Schlüsselworts params. Schau dir das an. Okay, ich habe das Aufrufargument hier geändert, um dieser Liste viel mehr Parameter hinzuzufügen, aber Sie können sehen, dass es keine Probleme verursacht hat. Das ist die Stärke des Schlüsselworts params. Wenn wir zum Beispiel eine Liste erstellen und diese an die Methode übergeben würden, müssten wir die Liste auch auf diese Weise ändern Aber Sie können sehen, dass dies überhaupt keine Fehler verursacht. Wir können die Software kompilieren und wir können die Software ausführen, und wir haben hier unser erwartetes Ergebnis. Das ist die Stärke des Schlüsselworts params. Es ermöglicht uns, eine Methode zu verwenden, um eine unterschiedliche Anzahl von Parametern desselben Typs zu akzeptieren , und dann kann es mit diesen Informationen arbeiten Damit sind nun einige Regeln verbunden. nur ein Schlüsselwort params geben Pro Methodendeklaration kann es beispielsweise Wir können nicht zwei davon haben, also wird es nicht funktionieren Zweitens muss das Schlüsselwort params hier am Ende von allem Wenn ich hier mehr als einen Parameter habe, müssen params ganz am Ende stehen Es kann nicht am Anfang sein, es kann nicht in der Mitte sein Sie können also sehen, dass hier ein Fehler aufgetreten ist, weil er am Ende der Liste stehen muss. Und schließlich müssen die Parameter hier ein eindimensionales Array sein Es kann kein zweidimensionales Array sein, es kann nichts Seltsames sein Es gibt also einige Regeln, die mit dem Schlüsselwort params verknüpft sind Das ist also die Stärke des Schlüsselworts params in C Sharp. Ja, es gibt andere Möglichkeiten, dieselben Ergebnisse zu erzielen, aber je mehr Tools Sie in Ihrer Toolbox haben, desto besser werden Sie als Entwickler Das ist also das Schlüsselwort params in C Sharp. 77. 19-1. Enumerations - Der enum-Typ: Ich möchte über Aufzählungen in C Sharp sprechen, auch bekannt als Enums. Und das Schlüsselwort sieht ungefähr so aus. Aber was ist eine Aufzählung und warum sollte ich sie verwenden? Nun, ich habe hier ein Beispiel. Hier richte ich vier Videospielobjekte ein. Sie nehmen verschiedene Parameter auf. Schauen wir uns jetzt die Klasse an. Sie können also sehen, dass eine Konsole, ein Videospieltitel, ein Videospiel-Publisher und eine Bewertung erforderlich sind. Lassen Sie uns also genau hier auf diese Bewertungszeichenfolge achten. Was ich tun möchte, ich möchte nur bestimmte Bewertungen für alle zulassen. Zehn plus Teenager, reifer, 17 und so weiter, und so weiter Ich möchte nur, dass diese Werte weitergegeben werden und ich möchte mich nur mit diesen Werten befassen Aber wenn Sie diese Objekte einrichten, können Sie sehen, dass ich sie hier einfüge. Aber es ist sehr leicht , einen Fehler zu machen. Ich könnte einen Rechtschreibfehler machen, vielleicht einen Kleinbuchstaben, so etwas Wenn diese Anwendung mit einer Datenbank verbunden ist, gibt es ein paar Probleme Ich werde falsche Werte speichern und das ganze System kann durcheinander geraten Wenn jemand zum Beispiel nach einem Spiel suchen möchte und die Bewertung falsch ist, weil es falsch geschrieben wurde, dann wird dieses Videospiel vielleicht nie in der Suche auftauchen, wenn er nach Bewertung dieses Videospiel vielleicht nie in der Suche auftauchen Es gibt viele Gründe, warum wir brauchen , dass unsere Daten präzise und korrekt sind Eine Möglichkeit, dieses Problem anzugehen, besteht darin , sicherzustellen , dass für diese Zeichenkettenvariable keine Rechtschreibfehler für diese Zeichenkettenvariable Bewertung besteht beispielsweise darin, etwas zu verwenden Eine Bewertung besteht beispielsweise darin, etwas zu verwenden, das als Aufzählung oder Aufzählung bezeichnet wird Wie richte ich das ein und wie integriere ich es hier in meinen Videospielkurs Nun, lass uns einen Blick darauf werfen. Gehen wir hier auf die rechte Seite , wo wir unser Projekt haben. Wir schreiben Click, Go to Add und dann Go to Class. Wir werden das etwas nennen , das unserer Bewertung entspricht. Wenn wir nun eine sehr umfangreiche Software haben, sollten wir das vielleicht sehr anschaulich beschreiben Ich denke, vielleicht ist die Bewertung von Videospielen gut. Wenn Sie jedoch eine Aufzählung erstellen, haben Sie manchmal eine Klasse mit genau demselben Namen, und Sie können keine Klasse mit demselben Namen erstellen Was viele Leute tun, wenn sie eine Aufzählung erstellen, ist , danach das Wort Status oder Typ hinzuzufügen Jedes Mal, wenn sie eine erstellen, endet sie also entweder mit Status oder Typ Es liegt wirklich an dir, es spielt keine Rolle. Aber ich werde es ungefähr so nennen. Also pass auf, du merkst, dass es sich hier um eine Klasse handelt, wenn ich auf Hinzufügen klicke Wenn wir also nach links kommen, haben wir jetzt einen internen Klassenbewertungstyp für Videospiele. Nun, wir wollen keine Klasse, wir wollen eine Aufzählung. Und dafür gab es keine Vorlage, also haben wir jetzt eine Aufzählung Es ist so einfach wie das Ändern der Klasse in eine Aufzählung. Wir haben hier eine Aufzählung. Also, wie funktioniert das? Nun, lass uns hier zu unserem Videospielkurs gehen und unsere erlaubten Bewertungen nehmen. Ich werde sie hier als Kommentar einfügen , damit ich auf sie verweisen kann. Und ich möchte für jede dieser Bewertungen einen Eintrag in der Aufzählung erstellen für jede dieser Bewertungen einen Eintrag in der Aufzählung Also ich will alle zehn plus Teenager, reife 17, und so weiter Also ich will all diese Artikel in dieser Aufzählung haben. Und die Aufzählung ist wie eine Liste. Also wie eine Liste von Werten. Und diese Liste ist nicht nur eine Liste, sondern sie ist wie eine schreibgeschützte Liste. Wir können diese Informationen nicht ändern. Es ist so gut wie schreibgeschützt, also verwenden wir es, um auf diese Werte zu verweisen. Es wird alles gleich klar werden. Ich werde für jede dieser Bewertungen einige Werte erstellen für jede dieser Bewertungen einige Werte In der Aufzählung werde ich damit beginnen, was für alle steht Sobald ich einen Wert erstellt habe, setze ich ein Komma und dann eine neue Zeile Jetzt kann ich den nächsten machen. Jetzt gibt es ein Problem. Sobald ich zehn eingegeben habe, liegt das daran, dass Ihre Artikel in Aufzählungen keine Zahlen oder bestimmte Zeichen wie dieses Pluszeichen enthalten dürfen Zahlen oder bestimmte Zeichen wie dieses Wir müssen das abtippen. In diesem Fall können wir zehn plus sagen, und das funktioniert einwandfrei. Lass uns weitermachen. Ich habe hier eine grobe Aufzählung eingegeben . Sie können sehen, dass sich all diese Werte in der Aufzählung widerspiegeln Wir können zu einem späteren Zeitpunkt weitere hinzufügen, wenn wir möchten. Nun, wie funktioniert das? Wie können wir das in unseren Unterricht integrieren? Nun, das ist jetzt wie ein Datentyp bei dem wir vorher eine Zeichenkettenbewertung hatten. Wir können diese Aufzählung genau hier verwenden. Wenn wir hier zu unserer Klasse gehen, ersetzen wir Zeichenfolge durch den Bewertungstyp für Videospiele Wir ersetzen es auch im Parameter und auch in allen Methoden, die wir hier haben. Auch da. Und es sieht so aus, als hätten wir ein Problem, und das liegt an der Barrierefreiheit. Standardmäßig ist unsere Klasse intern, aber da unsere Videospielklasse öffentlich ist, müssen wir auch die Aufzählung öffentlich machen Jetzt sind all diese Fehler verschwunden. Jetzt haben wir den Parameter tatsächlich in unseren Konstruktor geändert , einen Aufzählungstyp Schauen wir uns an, wie wir diese Objekte jetzt konstruieren. Jetzt können Sie hier sehen, dass bei all diesen Fehlern aufgetreten sind. Lassen Sie uns versuchen, diesen Teenager so zu ändern, dass er unsere Aufzählung verwendet. Wenn ich hier ein Komma setze, siehst du die Intellisens. Die automatische Vervollständigung hat unsere Die automatische Vervollständigung hat Wir werden einfach darauf doppelklicken. Dann setzen wir einen Punkt. Jetzt können Sie sehen, dass es hier eine nette Liste gibt. Wenn jemand diese Objekte konstruieren möchte. Jetzt können sie nicht einfach irgendeinen Wert eingeben. Schau, dafür ist ein Bewertungstyp für Videospiele erforderlich. Sie können es in der Parameterliste sehen. Aber jetzt können wir einfach nichts mehr angeben. Wir müssen etwas aus dieser Liste auswählen. Wenn wir das nicht tun, wird die Anwendung nicht einmal kompiliert , weil ein Fehler vorliegt. Sie können sehen, wie diese Aufzählung uns zwingt, ein Element aus dieser Liste auszuwählen Jetzt können wir zum Beispiel Teen sagen. Wenn wir nun jedes dieser Objekte durch die Aufzählung ersetzen, können Sie sehen, wann wir diese Objekte konstruieren Jetzt wird es ungefähr so aussehen Sie können sehen, dass es sich um eine verschlossene Idee handelt. Aber nicht nur das, es zwingt Menschen oder Software oder irgendetwas anderes, keine Fehler in unseren Informationen zu machen. Du würdest das nicht wirklich für etwas wie Blizzard oder World of War Crafts verwenden Blizzard oder World of War Crafts weil diese einzigartig sind Vielleicht könnte die Konsole jedoch eine Aufzählung darstellen , da es nur eine begrenzte Anzahl von Konsolen gibt nur eine begrenzte Weißt du, du hast die Playstation X-Box oder den PC. Das könnte also wiederum durch eine Aufzählung dargestellt werden, aber für so etwas wie eine Bewertung scheint dies ein perfekter Kandidat für die Verwendung als Aufzählung zu sein, scheint dies ein perfekter Kandidat für die Verwendung als Aufzählung zu wenn mit Aufzählungen gearbeitet Zum Beispiel sind diese Videospiele vielleicht Datenbank gespeichert Diese Datenbank wird nun den Namen und den Titel des Videospiels enthalten und möglicherweise nicht den vollständigen Namen der Aufzählung in der Datenbank haben vollständigen Namen der Aufzählung in der Datenbank Sie könnte eine Ganzzahl wie 01 oder zwei haben. Jede dieser ganzen Zahlen kann für eine andere Bewertung in der Aufzählung stehen eine andere Bewertung in der Aufzählung Zum Beispiel wäre jede Zahl 010 plus eins, zehn wäre zwei usw. Wenn Sie Aufzählungen in Visual Studio definieren, gibt es einen zugrunde liegenden Typ, d. h. im Hintergrund Standardmäßig hat jeder von ihnen einen Wert , der eine Ganzzahl ist Und ich werde dir zeigen , was ich damit meine. Dadurch wird eine dieser Aufzählungen im Konsolenfenster ausgegeben dieser Aufzählungen im Konsolenfenster Ich werde nur die Videospiel-Bewertung vom Typ Teen ausgeben. Wahrscheinlich steht das nur auf dem Fenster selbst, da steht nur Teen. Aber sieh dir an, was passiert, wenn ich das in eine Ganzzahl umwandle. Wenn ich also die Anwendung starte, sehen Sie jetzt, dass sie den Wert zwei hat. Standardmäßig gibt es hier eine zugrunde liegende Ganzzahl. Das liegt daran, dass das erste Element standardmäßig 012345 ist. Dies erfolgt standardmäßig. Es ist das Standardverhalten, aber Sie können es tatsächlich ändern , wenn Sie möchten. Sie können Ihre eigenen Werte für diese angeben. Standardmäßig sieht es ungefähr so aus. Jeder hat den Wert Null. Dieser hat den Wert 12345. So sieht es hinter den Kulissen aus. Diese haben diese Integer-Werte. Sie können sie mit der Nummer oder mit dem Namen referenzieren. Die Wahl liegt bei Ihnen. Aber normalerweise, wenn Sie so etwas vielleicht in einer Datenbank speichern so etwas vielleicht in einer Datenbank oder diese Werte an eine andere Software weitergeben , senden Sie die Ganzzahl vielleicht nur, weil sie kleiner ist und einfacher zu handhaben ist. Aus diesem Grund haben Aufzählungen einen zugrunde liegenden Typ. Betrachten Sie dies zum Beispiel als einen Index. Aber wie gesagt, Sie können Ihre eigenen Typen, aber auch Ihre eigenen Werte konfigurieren . Ich möchte zum Beispiel, dass dieser zehn ist, der andere 2030, 40, 50. Es spielt keine Rolle, die Wahl liegt ganz bei Ihnen. Und wenn wir das jetzt erneut im Konsolenfenster ausgeben, können Sie sehen, dass Zehn jetzt den Wert 22 hat, und das liegt daran, dass wir ihm den Wert 22 gegeben haben. Ich weiß nicht, warum wir das gemacht haben, aber Sie können sehen, dass das Prinzip so funktioniert. Im Grunde genommen verwendet es hinter den Kulissen eine Ganzzahl, aber Sie können dies auf Wunsch in einen anderen Datentyp ändern , z. B. ein Byte oder ein Long oder etwas Ähnliches. Die Wahl liegt wirklich bei Ihnen, aber standardmäßig. Es sieht ungefähr so aus. Wenn Sie den Typ ändern möchten, können Sie danach einen Doppelpunkt hinzufügen und den neuen Typ hier eingeben. Wenn Sie hier einen Typ haben, müssen alle diese Werte dem Typ folgen, den Sie angeben. Vielleicht nutzen Sie das nicht sofort, aber es ist immer gut, dieses Wissen im Kopf zu haben , wenn Sie es zu einem späteren Zeitpunkt anwenden möchten. Aber das sind die Möglichkeiten und Dinge, die Sie mit Aufzählungen machen können Was auch ziemlich üblich ist, ist, wenn Sie zum Beispiel eine Aufzählung haben All dies sind Bewertungen für Videospiele. Möglicherweise möchten Sie keine Bewertung angeben, aber der Benutzer hat die Wahl zwischen sechs Optionen. Aber was ist, wenn es optional ist? Also, was viele Leute tun, definieren ein Element namens non und geben ihm normalerweise den Wert Null. Oder sie könnten ihm den Wert 999 geben und ihn zum Beispiel ans Ende setzen. Dies ist jedoch nur ein Beispiel dafür wie Sie es optional machen können. Non wäre in diesem Fall das optionale Feld. Wenn es nicht verpflichtend ist, können Sie andernfalls hier eine Bewertung auswählen. Auch dies spiegelt sich nur darin wider, dass Sie den Artikel auswählen, der kein Artikel aus der Liste ist. Für dieses Spiel gibt es keine Bewertung In diesem Fall ist es optional. Jetzt die Aufzählungen. Aufzählungen haben noch viel mehr zu bieten, und Sie können viel mehr mit ihnen machen Hier gibt es eine statische Klasse namens enum. Sie können verschiedene Methoden verwenden, um mit Ihren Aufzählungen umzugehen Sie können den zugrunde liegenden Typ abrufen, wie die Ganzzahl, über die wir zuvor gesprochen haben Und du kannst verschiedene Dinge tun. Also haben wir hier nur an der Oberfläche gekratzt. Aber was ich erwähnen werde, ist eine Sache, um Ihre Projekte etwas besser zu organisieren Wenn wir hier nach rechts kommen und mit der rechten Maustaste auf unser Projekt klicken, und ich neige dazu, genau hier einen neuen Ordner hinzuzufügen, und das nenne ich normalerweise Enums In diesem Ordner habe ich alle meine Aufzählungen abgelegt, damit sie übersichtlicher Auf diese Weise werden Sie nicht wirklich verwirrt, weil sie dieselbe Dateierweiterung wie eine Klasse haben Sie können alle Ihre Aufzählungen in einem Enum-Ordner verstecken alle Ihre Aufzählungen in einem Enum-Ordner Wenn Sie sich erinnern, als wir im Schnittstellen-Tutorial über Schnittstellen gesprochen haben, dass sie das Schlüsselwort interface und nicht das Schlüsselwort class haben, dann können Sie auch einen Ordner für Ihre Schnittstellen erstellen Das ist ziemlich üblich. Es hält die Dinge einfach organisiert, weil sie dieselbe Dateierweiterung haben. Wenn Sie eine sehr große Anwendung mit Hunderten von Klassen haben , können Sie Ihre Aufzählungen leicht finden , einfach weil sie sich alle in einem Verzeichnis namens Enums ein nettes Stück Organisation bei der Arbeit mit Schnittstellen. Und Aufzählungen sind auch sehr nützlich Aufzählungen Es verhindert Rechtschreibfehler oder ähnliches. Und es ist sehr nützlich , wenn Sie eine begrenzte Liste von Elementen haben , zum Beispiel Vielleicht, wenn du mit Farben in einem Kartenspiel arbeitest oder wenn du Monate des Jahres repräsentierst oder etwas Ähnliches Denken Sie jedoch daran, dass Aufzählungselemente wie Konstanten nur gelesen werden können, sodass Sie ihnen nichts zuweisen können. Betrachten Sie sie daher als schreibgeschützt, wenn Sie mit ihnen arbeiten Das sind also Aufzählungen im Geschäft. 78. 19-2. Rekursion und Dateibehandlung (File IO / System.IO): Ich werde jetzt über ein brandneues Konzept sprechen. Und dieses Konzept wird Rekursion genannt. Wenn Sie mit Informatik vertraut sind oder vielleicht schon andere Programmiersprachen oder sogar Mathematik Vielleicht haben Sie schon einmal von diesem Wort gehört , aber vielleicht auch nicht. Warum bin ich dann bei Google? Ich höre dich fragen. Nun, als ich mit meiner Programmiertätigkeit begann, war Rekursion etwas , das mich wirklich verwirrte Haben Sie jemals den Film Inception gesehen, wo der Typ schläft und dann in einem Traum ist, aber dann geht er im Traum schlafen Und spielt irgendwie mit deinem Verstand und du fragst dich, ob er träumt? In welcher Träumungsebene befindet er sich oder ist er wieder wach? Weißt du, es ist sehr verwirrend. Und die verschachtelten Träume in diesem Film haben mich immer an das Konzept der Rekursion erinnert und Sie werden sehen Aber hoffentlich werde ich es in diesem Tutorial in einfache Schritte aufteilen, damit Sie es viel einfacher verstehen als ich es früher getan habe, als ich mit dem Lernen begann. Und ich werde dir zeigen warum. Wenn du den Begriff Rekursion googelst, bekommst du hier eine Beschreibung. Der Prozess der Definition eines Problems oder einer Lösung in Form einer einfacheren Version von sich selbst Sie können zum Beispiel eine Operation definieren und Ihren Weg nach Hause finden, als ob Sie zu Hause wären. Verstehst du, was ich hier meine? Es ist nicht sehr klar, oder? Und je mehr du scrollst, desto verwirrter wirst du. Es ist einfach eines dieser Dinge, über die man sich irgendwie die Haare rauft und wenn man sich die Bilder anschaut, naja, die Bilder helfen auch nicht wirklich. Man macht sich einfach ein Bild von etwas in etwas anderem und es wiederholt sich für immer. Lassen Sie mich Ihnen erklären, was Rekursion ist. Es hilft, sich die Rekursion in C Sharp in Google anzusehen, und es gibt Ihnen eine bessere Erklärung was es in Bezug auf C Sharp ist Rekursion ist ein Konzept , bei dem sich eine Methode selbst aufruft, und genau das ist es In der Welt von C Sharp definiert man eine Methode und die Methode ruft sich dann selbst Nun, warum sollte sich eine Methode selbst aufrufen wollen? Nun, wenn Sie innerhalb einer Methode Funktionen haben , um etwas zu tun, dann möchten Sie diesen Code vielleicht wiederverwenden. Warum nicht? Beim Programmieren dreht sich alles um die Wiederverwendung von Code. Das spart Zeit, ist einfacher zu pflegen, und dafür gibt es noch viele andere Gründe Das werden wir uns heute ansehen, Rekursion in C Sharp, und wir werden eine Methode definieren, die sich selbst aufruft Wir sind hier in Visual Studio. Jetzt möchte ich eine Methode einrichten , die sich selbst aufruft. Wenn Sie sich andere Tutorials zur Rekursion ansehen, werden Sie wahrscheinlich etwas sehen, bei dem Sie den Faktor einer Zahl vier berechnen müssen dem Sie den Faktor einer Zahl vier berechnen Faktoriell ist eins mal zwei, drei mal vier Und dann richten Sie eine Methode ein, um das zu tun. Ich denke, das ist ein ziemlich schwaches und langweiliges Beispiel. Ich denke, wir können etwas gebrauchen vielleicht können wir es in der realen Welt anwenden. Ich denke, dafür ist eine Suchfunktion wirklich gut. Was ich tun möchte, ich möchte dir meine sehr schlechte Musiksammlung vorstellen. Hier kannst du sehen, dass es ziemlich eklektisch ist. Wir haben hier alle verschiedenen Genres. Ich möchte einen Suchbegriff angeben und das könnte ein beliebiger sein, es könnte ein Bandname sein, es könnte der Name eines Songs sein, irgendwas in der Art. Ich möchte alle Musikdateien zurückgeben , die diesen Kriterien entsprechen. Also werden wir den Benutzer nach einem Suchbegriff fragen, der Benutzer wird ihn eingeben. Das Ergebnis werden die vollständigen Dateipfade all unserer Musikdateien sein. Jetzt ist diese Musiksammlung sehr unorganisiert, weshalb wir hier eine Suchfunktion benötigen Ich habe hier einen Musikordner und darin habe ich einen Ordner mit dem Namen „Noch mehr Musik Ich habe all diese neuen Ordner und dann habe ich überall Musik. Ich denke, eine Suchfunktion könnte für dieses Beispiel gut Das Problem, ich brauche etwas, um die Verzeichnisse in einem Dateipfad , den ich der Software zur Verfügung stelle. Also wenn ich die Software, diesen Dateipfad hier, zur Verfügung stelle, brauche ich ihn, um die Verzeichnisse zu bekommen. Das zweite, was ich tun muss, ist, die Software dazu zu bringen, alle Dateien in einem Verzeichnis und nacheinander jede dieser Dateien zu überprüfen , um zu sehen, ob sie den Suchkriterien entsprechen. Es muss zwei Aufgaben erledigen. Und warum ist dieses Szenario ein gutes Beispiel für Rekursion? Wie kann ich eine rekursive Methode auf dieses Beispiel anwenden? Nun, ich möchte die Verzeichnisse und die Dateien für jedes Verzeichnis hier drin Ich möchte hier dieselbe Logik anwenden. Ich möchte diese Verzeichnisse, diese Dateien haben. Und dann möchte ich es in diesen Verzeichnissen überprüfen. Es gibt mehr Verzeichnisse, dann bekommst du auch die Dateien. Die Methodenlogik gilt für so ziemlich jedes Verzeichnis hier. Ich möchte die Funktionalität wiederverwenden. Ich möchte es zunächst hier verwenden. Dann möchte ich in diesen Ordnern stöbern. Graben Sie weiter, bis es keine mehr gibt, und überprüfen Sie dann die Dateien hier. Rekursion wird ein sehr gutes Beispiel etwas sein, das wir hier für dieses spezielle Szenario verwenden können Schauen wir uns an, wie wir das machen können. Ich bin jetzt hier in Visual Studio. Was ich tun muss, ist eine Methode zu erstellen. Und die Methode wird sich selbst aufrufen. Und die Aufgabe der Methode besteht im Wesentlichen darin, nach einer Datei zu suchen , die der Benutzer angibt. Lassen Sie uns das jetzt einrichten. Als erstes möchte ich den Benutzer nach einem Suchbegriff fragen . Lass uns das machen. Dann möchte ich die Eingabe des Benutzers akzeptieren. Jetzt habe ich den Suchbegriff vom Benutzer. Ich möchte eine Methode aufrufen. Lassen Sie uns eine Methode einrichten , die tatsächlich die Suche durchführt. Ich werde die Methode search aufrufen. Ich finde, das ist ein ziemlich passender Name. Jetzt muss ich einige Parameter definieren. Welche Parameter sollte es annehmen? Nun, als Erstes müssen wir wissen, wo die Musik auf dem System befindet. Wir brauchen einen Dateipfad. Ich denke, das ist ein ziemlich guter erster Parameter. Der zweite ist wahrscheinlich der Suchbegriff. Wir brauchen die Methode, um zu wissen , wonach wir eigentlich suchen. Der letzte, vielleicht ein Referenzparameter und vielleicht ist das eine Liste oder ein Array. Dies wird alle unsere Ergebnisse sammeln. Wenn Sie nach etwas suchen, haben Sie möglicherweise ein Ergebnis, möglicherweise keine Ergebnisse. Möglicherweise erhalten Sie aber auch zehn Ergebnisse, z. B. zehn Treffer für Ihre Suche. Wir können nicht einfach einen einfachen Typ zurückgeben, wir müssen etwas wie ein Array oder eine Liste zurückgeben. Ich denke zum Beispiel, dass es ziemlich passend sein wird, hier eine Sammlung wie eine Liste zu verwenden . Ich nenne das Ergebnisse, weil es all unsere Ergebnisse enthalten wird , die wir bei unserer Suche gefunden haben. Jetzt haben wir den Pfad , auf dem sich die Musik befindet. Wir haben den Suchbegriff für das, wonach wir suchen. Jetzt haben wir hier eine Sammlung , in der unsere Ergebnisse gespeichert werden. Eine Sache, die Sie sich vielleicht fragen, ist, warum haben wir das nicht als Rückgabewert? Warum brauchen wir einen Parameter, der ein Referenztyp ist, wie hier zum Beispiel? Nun, die Wahrheit ist, dass es nicht wirklich wichtig ist, ob ich das als Rückgabetyp festlege. Ich denke, es könnte dieses Beispiel etwas komplizierter machen. Ich möchte Ihnen vermitteln, wie Rekursion funktioniert, bei der eine Methode eine Methode aufruft, die auch als rekursive Methode bezeichnet Wenn ich einen Rückgabetyp einrichte, muss ich den Wert aus jedem Aufruf an die Methode in sich selbst zurückgeben jedem Aufruf an die Methode in sich Ich denke, das könnte das Beispiel etwas verkomplizieren. Ich werde vorerst einen Parameter verwenden, wenn ich die Lösung dann tatsächlich entwickelt habe, werde ich ihn einfach auf einen Rückgabetyp umstellen, damit ich Ihnen auch dieses Beispiel zeigen kann Das ist der Grund dafür hier. Es wird nur die Ergebnisse speichern. Bei der Entwicklung rekursiver Methoden wie dieser hier ist es immer gut, zuerst die Basisfunktionalität zu Und genau dafür ist es konzipiert, Rekursion komplett zu ignorieren Dort ruft sich die Methode selbst auf. Ich möchte den Pfad verwenden , der uns gegeben wurde, und den Suchbegriff verwenden und sehen, ob wir hier tatsächlich einige Ergebnisse aus dem Stammordner erhalten können . Im Moment ignorieren wir das Durchforsten von Ordnern und dergleichen Ich möchte diese Dateien hierher bringen, alle Dateien für das angegebene Verzeichnis abrufen und dann nacheinander jede Datei überprüfen, um sicherzustellen, dass sie unseren Suchbegriff enthält Wenn ja, möchte ich es der Ergebnisliste hinzufügen , die wir gerade erstellt haben. Schauen wir uns an, wie wir diese Dateien tatsächlich für ein Verzeichnis abrufen können , und überprüfen wir dann jeden Titel, um sicherzustellen, dass er unseren Suchbegriff in Visual Studio enthält . Wenn wir nun mit Dateien, Verzeichnissen, Dateipfaden oder ähnlichem arbeiten wollen , gibt es tatsächlich einen Namensraum, den wir verwenden können. Dieser wird uns zur Verfügung gestellt. Wir verwenden das Schlüsselwort using und geben dann System ein und dann steht O für Input Output. Es ist so ziemlich alles , was mit Dateien zu tun hat , die in Textdateien protokolliert werden, aus Dateien lesen, all diese Dinge. Es ist ein wirklich nützlicher Namespace, den wir verwenden können. Er ist standardmäßig nicht enthalten. Zum Beispiel zuvor in einem früheren Tutorial, in dem wir die statische Klasse Mathe verwenden und innerhalb der Mathematik verschiedene mathematische Funktionen ausführen können. Dies ist standardmäßig enthalten , da es sich um eine sehr beliebte Bibliothek handelt. Wenn Sie eine Anwendung erstellen, möchten Sie vielleicht viele Dinge tun, die zum Beispiel mit Mathematik zu tun haben, und auch viele andere Dinge. Allerdings funktioniert nicht jede Software , die Sie erstellen, mit Dateien. diesem Grund müssen wir diese Bibliothek manuell explizit einbeziehen. Das sind nur ein paar Informationen. Wenn Sie dafür einen anderen Namespace verwenden möchten, können Sie ihn unten im System-I-Namespace hier hinzufügen im System-I-Namespace hier Es gibt viele Dinge, die du tun kannst. Du kannst all diese Sachen hier machen. Viele, viele Dinge. Es gibt jedoch einige statische Klassen auf die Sie vielleicht aufmerksam gemacht werden möchten. Die erste ist zum Beispiel Directory, und das ist eine statische Klasse. diese Weise können wir Verzeichnisse auf unserem System erstellen , indem wir ihm einfach einen Pfad als Parameter geben. Wir können Verzeichnisse löschen. Wir können Dateien in einem Verzeichnis abrufen, das wir bereitstellen. Wir können viele Dinge mit Verzeichnissen tun. Dieses Verzeichnis, die statische Klasse, ist wirklich nützlich. Eine andere ist eine statische Klasse namens file. Mit file können wir Dateien erstellen. Wenn wir beispielsweise eine Protokolldatei erstellen möchten, können wir Dateien löschen. Wir können überprüfen, ob Dateien existieren, wir können geöffnete Dateien verschieben. Es gibt also viele verschiedene Dinge, die mit Dateien zu tun haben. Die letzte, die sehr nützlich ist, ist die statische Pfadklasse. Path ist wirklich nützlich, um mit Pfaden zu arbeiten. Wenn wir unseren Dateipfad angeben, können wir den Dateinamen aus dem Pfad abrufen. Wir können vielleicht die Erweiterung einer Datei ermitteln. Wir können tatsächlich mit einem vollständigen Pfad arbeiten und wir können Pfade auch miteinander verbinden. Das ist wirklich gut für die Arbeit mit Verzeichnispfaden. Es gibt drei statische Klassen, die Sie in Zukunft sehr nützlich finden werden. Und wir werden heute einige davon verwenden , wenn wir unsere rekursive Funktionssuche entwickeln Hier habe ich bereits erwähnt, dass wir mit unserer Methode zunächst die Dateien im Routenverzeichnis abrufen wollen die Dateien im Routenverzeichnis abrufen , nur um sicherzugehen, dass es tatsächlich funktioniert Wir wollen alle Dateien in einem bestimmten Verzeichnis abrufen alle Dateien in einem bestimmten Verzeichnis Wir kennen diese Information , weil dies der Pfad ist , der an unsere Methode übergeben wird. Ich möchte alle Dateien in diesem Verzeichnis hierher bekommen. Dazu verwenden wir die statische Verzeichnisklasse und es gibt eine Methode namens get files. Get files benötigt einen Parameter und das ist der Pfad, in dem sich die Dateien befinden. Die Rückgabe dieser Methode ist nun ein String-Array. Jetzt enthält dieses Array die vollständigen Dateipfade für jede Datei in diesem Verzeichnis. Wenn wir zu unserem Musikkanal rüber kommen, wird er all diese Dateien hierher bekommen. Jedes Element im Array wird den vollständigen Dateipfad enthalten. Der vollständige Pfad auf dem System, das ist das Ergebnis dieser Methode, Dateien abrufen. Ich werde das in einer Variablen namens files speichern. Das werden alle Dateien im angegebenen Verzeichnis sein. Jetzt möchte ich all diese Dateien hier durchgehen und überprüfen, ob der Dateiname, nicht unbedingt der gesamte Pfad, ist diese Dateien hier durchgehen und überprüfen, ob der Dateiname, . Wir wollen nur den Dateinamen überprüfen, um zu überprüfen , ob der Dateiname unseren Suchbegriff enthält. Hier brauchen wir eine Schleife. Ich denke, für jede Schleife könnte das ausreichend sein. In diesem Fall hat uns Visual Studio hier freundlicherweise Hilfe bei der automatischen Vervollständigung gegeben Ich nehme es jetzt. In diesen vier Schleifen möchte ich jede Datei nacheinander überprüfen und überprüfen, ob der Dateiname dieser Datei unseren Suchbegriff enthält. Wie mache ich das? Nun, wenn ich das überprüfen will, brauche ich eine Bedingung. Ich weiß, dass ich hier eine If-Aussage brauche. Nun, welche Bedingung brauche ich in der Erklärung? Nun, ich muss den Dateinamen aus diesem Pfad abrufen. Ich will nicht den Laufwerksbuchstaben, ich will nicht die Ordnernamen, ich will nur den Dateinamen, wenn ich mit Pfad arbeite. Wie ich bereits erwähnt habe, ist eine statische Klasse namens Path dafür sehr gut geeignet. Es gibt eine Methode namens get file name without extension, die den Dateinamen abruft, sagen wir drei. Es gibt auch eine Methode namens Get-Dateiname. Sie können wählen, welche Sie möchten, je nachdem, ob Benutzer auch nach Dateierweiterungen suchen sollen. Ich werde einfach diesen benutzen. Es benötigt einen Parameter und das ist der Pfad von diesem hervorgehobenen Code hier. Dadurch wird der Name der Datei abgerufen, ohne dass die Erweiterung auf unsere Musik übertragen wird. Es wird diesen hervorgehobenen Abschnitt genau hier haben, was großartig ist. Das wollen wir in Visual Studio noch einmal überprüfen. Jetzt weiß ich, dass das der Dateiname ohne die Erweiterung und ohne den Pfad ist. Ich möchte versuchen zu sehen, ob etwas davon unseren Suchbegriff enthält. In einem früheren Tutorial habe ich die Arbeit mit Zeichenketten behandelt, habe ich die Arbeit mit Zeichenketten behandelt bei der wir verschiedene Dinge mit Zeichenketten, Teilstrings und ähnlichen Dingen gemacht haben Teilstrings und ähnlichen Dingen Da es sich hier um eine Zeichenfolge handelt, path get file name ohne die Erweiterung eine Zeichenfolge zurück Daher wird dies eine Zeichenfolge darstellen. Wenn ich Kunst dahinter setze, haben wir all diese verschiedenen Dinge, die wir mit Saiten machen können. Es gibt hier eine Methode namens contains. Enthält. Nimmt einen Parameter an, bei dem es sich entweder um ein Zeichen, eine Zeichenfolge oder tatsächlich um zahlreiche Parameter handelt. Ein Zeichen und ein Vergleichstyp. Aber wir wollen hier nur diese Zeichenkettenüberladung verwenden. Wir wollen überprüfen, ob es unseren Suchbegriff enthält. Ich denke, das ist ein ziemlich guter Zustand. Nun, da ist ein kleines Problem drin, das ich etwas später enthüllen werde, aber vorerst werde ich es belassen Jetzt überprüfen wir nacheinander, ob jede Datei unseren Suchbegriff enthält. Das ist ziemlich gut. Wenn es nun tatsächlich unseren Suchbegriff enthält, dann wollen wir diesen Pfad hier, nämlich Datei, zu unserer Ergebnisliste hinzufügen . Lass uns das jetzt machen. Dazu verwenden wir die Methode add. Wir fügen die Datei dort hinzu. Wenn Sie nichts über Listen wissen, dann habe ich ein Tutorial dazu gemacht. Ich empfehle dir, das auszuprobieren. Jetzt sieht es so aus, als ob wir etwas ziemlich Gutes machen. Wir schauen uns alle Dateien im angegebenen Verzeichnis an. Wenn es den Suchbegriff enthält, fügen wir ihn hier der Ergebnisliste hinzu. Da es sich um einen Referenztyp handelt, wird er sich daran erinnern, was wir hinzugefügt haben wenn die Ausführung dieser Methode abgeschlossen ist. Das liegt daran, dass es auf dem Heap gespeichert ist, es ist ein Referenztyp. Jetzt möchte ich diese Methode tatsächlich aufrufen. Geben Sie Parameter dafür an. Lass uns das machen. Jetzt. Der erste Parameter ich benötige, ist der Pfad, in dem sich die Musik befindet. Holen wir uns das. Leg das jetzt wieder rein. Das ist das Routenverzeichnis , in dem sich die gesamte Musik befindet. Der nächste Parameter, den wir eingerichtet haben, ist der Suchbegriff , den wir aus der Eingabe des Benutzers übernehmen. Als letztes müssen wir eine Liste bereitstellen , in der wir unsere Resorts tatsächlich speichern werden. Ich werde hier in Maine einen lokalen definieren. Erstelle hier eine neue Liste. Ich habe ihm keine Kapazität zugewiesen, weil wir nicht wissen, wie viele Resorts es geben wird. Habe hier gerade eine MT-Liste erstellt. Ich werde das in die Methode übernehmen. Wenn die Ausführung der Methode abgeschlossen ist, haben wir hier unten Zugriff auf diese Ergebnisse. Das liegt daran, dass es sich, wie ich bereits erwähnt habe , um einen Referenztyp handelt. Jetzt wollen wir nur noch die Ergebnisse dem Benutzer anzeigen. Wir könnten dafür vielleicht auch jeweils eine Vier verwenden. Was ich tun möchte, jedes Mal wir ein Ergebnis in Ergebnissen haben, werde ich sagen, lassen Sie uns das Ergebnis einfach ausgeben. Dann könnte ich eine if-Aussage hinzufügen , die besagt, dass, wenn es keine Ergebnisse gibt, ich vielleicht die Tatsache ausdrucken werde, dass es keine Ergebnisse gibt. Okay, es sieht also ungefähr so aus. Ich weiß, dass es in der Softwareentwicklung elegantere Möglichkeiten gibt , so ziemlich alles zu erledigen, aber ich versuche, das so zu schreiben, dass Sie verstehen es leichter zu ist, weil das Gehirn eben so funktioniert. Vielleicht können wir es am Ende aufräumen, was optional ist, aber was ich vermitteln möchte, ist das Prinzip der rekursiven Methoden Wir haben hier bei der Softwareentwicklung einige Basisfunktionen , wir testen können, nur um sicherzugehen, dass sie funktioniert, wir müssen die Entwicklung der Software nicht komplett abschließen Ich denke, jetzt ist vielleicht ein guter Zeitpunkt, um das zu testen, nur um sicherzugehen, dass es funktioniert. Lassen Sie uns die Anwendung jetzt ausführen. Geben Sie nun bitte einen Suchbegriff ein. Versuchen wir zum Beispiel, nach Aba zu suchen. Warum gehe ich nicht in meine Bewerbung, ich tippe Abba sagt es gibt keine Ergebnisse für meine Suche. Warum ist das so Lass uns versuchen, das herauszufinden. Ich gehe jetzt zurück zur Software, ich erhalte hier keine Ergebnisse, aber ich füge hier eindeutig ein Ergebnis hinzu. Was ist hier los? Mal sehen, ob wir das herausfinden können. Lassen Sie uns hier einen Breakpoint setzen und die Software ausführen . Geben Sie Ab ein. Was haben wir hier? Es sieht so aus, als würden wir all unsere Dateien hier haben. Haben wir tatsächlich diesen Grenzpunkt erreicht , an dem wir den Mehrwert hinzufügen ? Es sieht so aus, als ob wir es nicht sind. Also stimmt hier etwas nicht. Wir können den Dateinamen nicht richtig ermitteln oder hier passiert etwas ganz anderes. Es sieht so aus, als hätte ich versehentlich den Pfad hierher eingegeben, obwohl wir eine Datei haben sollten. Im Moment suchen wir nur nach dem Dateipfad, in dem sich die Musik befindet, und nicht nach dem Dateinamen, der sich in der Schleife befindet. Wenn das Problem dadurch behoben ist, okay, es sieht so aus, als ob es funktioniert Wie Sie jetzt sehen können, ist niemand perfekt. Fehler passieren, aber wenn Sie sich meine Tutorials zum Debuggen und dergleichen ansehen , wissen Sie auch, wie Sie Probleme selbst beheben Es sieht also so aus, als ob es funktioniert. Lass uns ganz schnell etwas anderes versuchen. Ich habe vorhin auf ein Problem hingewiesen, und zwar, wenn ich nach Aber suche, wo es klein geschrieben ist, ich treffe und es heißt, es gibt keine Ergebnisse Aber wir haben eindeutig einen Song namens Abba. Was Sie hier sehen können, ist, dass es ein Problem gibt, bei dem Groß- und Kleinschreibung unterschieden wird. Das liegt daran, dass Aber im NP Drei in Großbuchstaben geschrieben ist, wir aber einen Suchbegriff in Kleinbuchstaben verwenden. Also, wie umgehen wir das? Nun, Datei ist eine Zeichenfolge und der Suchbegriff ist eine Zeichenfolge. Wenn wir Zeichenketten verwenden, stehen uns viele Dinge zur Verfügung. Was wir verwenden können, ist diese Methode, die hier als Lower bezeichnet wird. Was das macht, es wandelt all das in Kleinbuchstaben um. In ähnlicher Weise können wir dies für den Suchbegriff tun. Jetzt vergleichen wir all unsere Suchbegriffe, alle in Kleinbuchstaben, dem Namen der Datei, alles in Kleinbuchstaben. Jetzt sollten wir keine Probleme mehr haben, bei denen Groß- und Kleinschreibung beachtet wird. Wenn ich die Anwendung jetzt starte und nach Aber suche, können Sie sehen, dass ich jetzt das Ergebnis habe. Jetzt ignorieren wir den Fall. Das ist ziemlich gut Ich werde noch einmal suchen und vielleicht nach dem Buchstaben E suchen , um sicherzugehen , dass wir mehrere Ergebnisse erhalten. Wenn ich zurückkomme, sieht es ziemlich gut aus. Es sieht so aus, als ob wir alle Dateinamen bekommen , die den Buchstaben enthalten. Das ist ziemlich gut. Ich glaube, wir sind bereit für die Rekursion Wir haben die Basisfunktionalität in Betrieb. Wir freuen uns, dass es für das Basisverzeichnis funktioniert. Jetzt können wir Rekursion einführen. Das Problem ist, wenn Sie die Rekursion von Anfang an einführen , vor allem, wenn Sie sich nicht auskennen. Wenn Sie dann einen Fehler haben, kann dies nur an Ihrer Kernfunktionalität liegen Es ist wirklich gut, das zum Laufen zu bringen bevor Sie die Rekursion einführen Es macht die Dinge viel einfacher. Lassen Sie uns eine Rekursion in diese Methode einführen. Ich weiß es zu schätzen, dass Sie das vielleicht nicht beim ersten Mal bekommen, aber machen Sie sich keine Sorgen, Sie werden es irgendwann bekommen Es gibt ein paar Möglichkeiten, wie wir dieses Problem angehen können. Was ich tun möchte, ich habe diese Suchmethode , die die Dateien abruft, was ziemlich gut ist. Aber ich möchte dieser Methode auch das nächste Verzeichnis im aktuellen Verzeichnis geben . Hier haben wir zum Beispiel unser Musikverzeichnis. Wir überprüfen bereits die Dateien, aber ich möchte auch alle Verzeichnisse hier haben. Dann möchte ich in jedem Verzeichnis die Kernfunktionalität ausführen, nämlich die Dateien abrufen, aber ich möchte trotzdem auch die Verzeichnisse abrufen. Dann möchte ich hier drinnen dasselbe tun , die Dateien holen. Gibt es hier irgendwelche Verzeichnisse? Offensichtlich benötige ich eine Funktion, um alle Verzeichnisse im aktuellen Verzeichnis abzurufen. Lass uns das machen. Das werde ich jetzt hier aufstellen. Es gibt eine nützliche Sache, die wir tun können, um Verzeichnisse abzurufen, und das ist die Verwendung der statischen Verzeichnisklasse. Es gibt eine Methode namens Get Directories und sie benötigt einen Pfad. Welcher Pfad tut das? Es nimmt unseren Wurzelpfad. Und genau wie zuvor gibt es ein String-Array zurück und jedes Element in diesem Array ist der vollständige Pfad der Verzeichnisse in diesem Pfad hier. Also werde ich das DRs für Verzeichnisse nennen. Und weil wir wissen, dass wir in jedes Verzeichnis gehen wollen, müssen wir auch das durchgehen , ohne an irgendetwas zu denken. Wir wissen, dass wir Verzeichnisse brauchen und wir wissen, dass wir jedes einzelne überprüfen müssen, ohne Gedanken über das Problem der Rekursion oder des Eingangs oder was auch immer Sie sagen wollen, machen zu Wir wissen, dass wir diese Funktionalität jetzt brauchen. Sobald wir diese Funktionalität eingerichtet haben, müssen wir herausfinden, wie dieses Problem tatsächlich lösen können. Was geben wir hier rein? Brauchen wir hier irgendwas? Brauchen wir hier irgendwas? Und so weiter. Aber jetzt haben wir eine kleine Vorlage. Schauen wir uns an, wie wir dieses Problem angehen können. Ich gebe der Methode das Stammverzeichnis. Was ich in dieser Situation tun könnte ist alle Verzeichnisse abzurufen. Und mit dem ersten Verzeichnis gehe ich hinein, dann rufe ich die Methode erneut auf. Was sie tun wird, ist genau dasselbe. Es wird alle Verzeichnisse abrufen und in das erste gehen. Es wird alle Verzeichnisse in das erste verschieben. Und jetzt sind wir im letzten Ordner. Es gibt keine Verzeichnisse mehr, also können wir nicht in das erste gehen. Das Letzte, was wir tun müssen, ist die Dateien zu besorgen. Also, was wir hier machen, wir sorgen dafür, dass die Verzeichnisse immer im ersten laufen, immer im ersten. Bis wir ganz am Ende angelangt sind, holen wir uns die Dateien, wir gehen eines raus, gehen in das nächste, bringen alle Verzeichnisse in das erste, holen uns alle Verzeichnisse, gehen in das erste, und so weiter. Das ist es also, was wir hier tun. Wir tauchen bis ganz nach unten, und das ist das Erste, was wir tun. Wir gehen rein, rein, rein, bis zur größten Sackgasse, die es hier gibt. Und dann suchen wir nach Dateien. Das werden wir also mit unserer Methode replizieren. Nun, die erste Ausführung dieser Suchmethode, wir übergeben ihr den Pfad, der das Stammverzeichnis für unsere Musik genau hier ist für unsere Musik genau hier Ich möchte alle Verzeichnisse, wie ich sie gerade erwähnt habe, im Stammordner abrufen . Das sind all diese hier. Das ist es, was diese Vierschleife tun. Die erste Iteration der vier Schleifen wird dieses Verzeichnis hier sein Jetzt wollen wir tatsächlich in dieses Verzeichnis gehen. Was wir tun können, wir können diese Methode an sich selbst weitergeben. Wir können die Methode von selbst aufrufen. Ich möchte sogar die Methode aufrufen. Lassen Sie uns das vereinfachen. Die Ergebnisse werden sich niemals ändern. Wir definieren keine neuen Ergebnisse, wir hängen einfach Ergebnisse an wenn wir ein Ergebnis haben, wenn wir ein Spiel haben Wir initialisieren und definieren Ergebnisse hier oben jedes Mal, wenn wir Ergebnisse weitergeben Wir wollen es einfach weitergeben. Wenn wir diese Methode in sich selbst aufrufen, wollen wir diesen Wert nur intern übergeben. Der einzige Grund, warum wir das tun wollen , ist einfach, etwas hinzuzufügen. Wir müssen hier wirklich nichts Besonderes damit machen. Das Gleiche gilt für den Suchbegriff. Wir ändern hier nicht den Suchbegriff, wir fragen den Benutzer quasi nach einem Suchbegriff. Soweit es uns betrifft, ist es innerhalb dieser Methode so gut wie schreibgeschützt. Auch hier geben wir das nur weiter. Genau wie bei den Ergebnissen ist das einzige, was sich hier wirklich unterscheidet , der Pfad innerhalb unseres ersten Verzeichnisses. Wir wollen eigentlich das Verzeichnis , in das wir gehen. Es wird ungefähr so aussehen. Wenn ich das nur ein wenig entferne, wird es so aussehen. Ich weiß nicht, ob Sie das verstehen können, aber wenn das zum ersten Mal ausgeführt wird, bekommen wir die Verzeichnisse. Wir durchforsten diese Verzeichnisse in einer Schleife. Also das erste Verzeichnis, wir rufen diese Methode erneut Jetzt wird diese Methode mit dem ersten Verzeichnis im ursprünglichen Pfad aufgerufen . Sobald es wieder in diesem Verzeichnis ist, rufen wir die Verzeichnisse wieder ab bis wir das Ende erreichen, das hier ist. Stellen Sie sich vor, das ist der Pfad, der jetzt übergeben wird, jetzt gibt es keine Verzeichnisse. Das wird eine Zählung von Null haben. Dies für jede Schleife wird nicht einmal ausgeführt, denn wenn dieses Ergebnis keine Verzeichnisse enthält, wird dies vollständig übersprungen Wenn dies nun übersprungen wird, ruft sich diese Methode nicht von selbst auf, da dies das einzige Mal ist, dass sich die Methode selbst aufruft Was sie dann tun wird, ist, alle Dateien abzurufen. Dann werden diese Dateien hierher gebracht und geprüft , ob wir eine Übereinstimmung haben, und dann endet die Methode. Wenn die Methode beendet ist, kehren wir zum vorherigen Aufruf zurück, der sich in dieser Schleife befindet. Dann wird sie sich im nächsten Verzeichnis, bei der nächsten Iteration der Schleife, erneut aufrufen sich im nächsten Verzeichnis, bei der nächsten Iteration der Schleife, erneut nächsten Iteration der Schleife Dann ist es fertig und geht in das nächste Verzeichnis. Hier sucht es nach Verzeichnissen und Dateien. Funktioniert das? Lassen Sie uns einen Blick darauf werfen, warum nicht einen Suchbegriff eingeben? Also was ich tun werde, ich werde einen Suchbegriff für eine Datei wie diese eingeben. Zum Beispiel hallo, hallo. Nun, hallo, hello befindet sich in diesem Ordner, in diesem Ordner, und hello, hello ist nicht im Basisverzeichnis. nach Hallo suche, weiß ich mit Sicherheit, dass es ziemlich viele Ordner durchsucht, um diese Datei zu finden. Das ist ein geeigneter Test, den ich verwenden könnte. Lass uns das Programm ausführen. Bitte geben Sie Ihren Suchbegriff ein. Geben wir hier Hallo ein. Es sieht so aus, als ob es ihn gefunden hat. Sie sehen dieses Ergebnis, bei der Suche nach Unterverzeichnissen es in zwei Verzeichnissen gefunden und die Datei wurde schließlich gefunden Hier sieht es so aus, als ob es tatsächlich funktioniert. Dies ist hier ein Beispiel für eine rekursive Methode, das ist nur eine Methode, die sich selbst aufruft Wir stopfen nur Ergebnisse in einen Parameter, der ein Referenztyp ist, es ist eine Liste Lass uns noch einen Test machen, nur um sicherzugehen, dass es funktioniert. Ich nehme die Hello-Datei, die hier drin ist, und füge sie an ein paar weiteren Stellen ein. Ich werde sie hier ablegen. Ich werde es hier hinstellen. Ich werde es hier reinstellen. Jetzt sollten wir viel mehr Ergebnisse erzielen. Lassen Sie uns das Programm ausführen und Hallo eingeben. Und jetzt können Sie sehen, dass ich all diese Instanzen von Hello P Three gefunden habe , es sieht also so aus, als ob es funktioniert. Das sind also ziemlich gute Neuigkeiten. Nun die Sache beim Schreiben rekursiver Methoden, Sie brauchen eine Möglichkeit, der Rekursion zu entkommen Die Rekursion wird nicht aufhören es sei denn, Sie führen so etwas wie eine Bedingung ein, vielleicht eine Oder vielleicht haben wir in unserem Fall eine Schleife, die Verzeichnisse und Dateien durchläuft Wir haben nicht unendlich viele Verzeichnisse, wir haben nicht unendlich viele Dateien. Irgendwann wird diese rekursive Methode also aufhören. Es ist jedoch ziemlich einfach, dass sich eine Methode endlos selbst aufruft, wie in diesem Wenn ich diesen Methodenaufruf selbst mit den gleichen Parametern habe, kann er nicht beendet werden Das ist die Gefahr der Rekursion. beim Schreiben rekursiver Methoden immer sicher, Sie beim Schreiben rekursiver Methoden immer sicher, dass Sie eine Bedingung oder eine Escape-Klausel haben eine Bedingung oder eine Escape-Klausel Andernfalls stürzt Ihre Anwendung ab und Sie werden eine Menge unerwartetes Verhalten zeigen. Sie sehen, wenn ich das Programm starte , jetzt gebe , ich einen beliebigen Suchbegriff ein, Sie können sehen, dass wir einen Stapelüberlauf haben Es hat 24.000 Mal versucht, sich selbst aufzurufen, bevor es schließlich abgestürzt ist, weil der Stack den gesamten Speicherbereich voll Seien Sie immer vorsichtig wenn Sie rekursive Methoden schreiben Zu Beginn des Tutorials sagte ich, oh, wir könnten diese Sammlung problemlos als Gegenleistung hier haben Wir brauchen es nicht als Parameter. Jetzt habe ich die Rekursion erklärt, das kann diesen Code modifizieren und das als Rückgabewert haben Stattdessen habe ich hier den Rückgabewert eingerichtet. Ich definiere das hier oben. Lassen Sie uns diesen Teil entfernen. Lassen Sie uns die Ergebnisse hier in einer Ergebnisliste speichern, denn das wird unsere Rückkehr hierher sein. Ich muss diesen Parameter nicht mehr übergeben, und ich benötige ihn nicht mehr als Parameter, aber ich muss hier ein Ergebnis definieren. Lass uns das jetzt machen. Okay, was ich hier gemacht habe, ich habe hier ein Return to search hinzugefügt, das ist eine Liste mit einer Zeichenfolge. Ich habe hier die Ergebnisliste der Zeichenfolge innerhalb der Methode definiert . Jetzt gibt es ein paar Dinge zu beachten. Das erste, was ich tun muss, ist das tatsächlich aus der Methode zurückzugeben. Das werde ich tun. Als Nächstes muss ich jedes Mal dieselbe Methode hier rekursiv aufrufen Ich muss die Rückgabe auch jedes Mal speichern , wenn ich sie rekursiv aufrufe Andernfalls werden wir diese Informationen verlieren. Wenn wir uns in der Tiefe unserer Ordnerstruktur befinden, haben wir einige Dateien gefunden, zum Beispiel hier. Nun, wir müssen diese aus dem inneren Aufruf der Methode herausgeben , weil ich hier zum Beispiel keine Rückgabe speichere. Was ich jedes Mal tun muss, wenn ich das rekursiv aufrufe, ich muss die Ergebnisse hier speichern Jetzt denkst du, okay, es sieht so aus, als ob es funktioniert. Ich habe die Liste definiert. Jedes Mal, wenn ich mich selbst rekursiv aufrufe, erinnere ich mich an diese Werte und setze sie hier. Jedes Mal, wenn wir eine Übereinstimmung haben, füge ich sie der Liste hinzu, gebe sie irgendwann zurück und drucke die Ergebnisse aus Lassen Sie uns einen Blick darauf werfen und sehen, was passiert. Lasst uns Hallo sagen. Sieht so aus, als hätten wir ein kleines Problem. Hier ist das Debuggen sehr nützlich, aber ich kann Ihnen sagen, was hier vor sich geht Das Problem ist, dass wir einige Dateien in den inneren Tiefen unserer rekursiven Aufrufe gefunden haben , zum Beispiel diese Dateien Das ist jetzt zwei Ordner tief, das können Sie hier sehen. Was jetzt passiert, ist, dass sie nicht gespeichert werden, denn wenn das irgendwann herauskommt, setzen wir diesen Wert jedes Mal zurück, wenn wir diese rekursive Methode aufrufen Und das ist ein kleines Problem. Wir fügen das Zeug hier hinzu, aber wir setzen es auch zurück Es wird im Wesentlichen an nichts erinnert, aber wir fügen hier tatsächlich Informationen hinzu Wenn ich einen Breakpoint einfüge, geben Sie Hallo ein, es gibt hier tatsächlich Dateien, aber das Problem ist, dass sie tatsächlich zurückgesetzt werden. Wenn ich mir meinen Locals-Tab hier unten ansehe, kann ich die Ergebnisse direkt hier verfolgen. Ich habe bei der Rückkehr einen Breakpoint gesetzt und eine Fünf erreicht. Jetzt kannst du sehen, dass ich ein Ergebnis habe, wenn ich hier rauskomme. Jetzt können Sie sehen, dass die Ergebnisse auf Null zurückgesetzt wurden. Sobald ich hier rauskomme, wird an nichts mehr erinnert. Was ist hier los. Das Problem ist, naja, es ist ein ziemlich einfaches Problem, aber es ist vielleicht sehr schwer zu verstehen, wenn wir rekursiv sprechen Was wir eigentlich tun müssen, ist die Ergebnisse dieser Suche zu dieser Liste hinzuzufügen die Ergebnisse dieser Suche zu dieser Liste Wir können die Liste nicht einfach durch die Ergebnisse der Suche ersetzen , sonst vergessen wir alles, was wir bisher gelernt haben Was wir tun müssen, ist alles aus den Ergebnissen der rekursiven Suche hinzuzufügen alles aus den Ergebnissen der rekursiven Und es gibt eine Methode namens Add Range. Und was das macht, es fügt unserer Liste einen oder mehrere Artikel hinzu. Und das ist der Vorteil der Verwendung einer Liste gegenüber so etwas wie einem einfachen Array. Diese Methoden stehen uns zur Verfügung. Schauen wir uns das jetzt an und sehen, ob das besser funktioniert. Also starte ich die Anwendung, ich tippe Hallo und jetzt haben wir alle unsere Ergebnisse. Sie werden nicht mehr durch unsere rekursive Methode generiert Dies zu nennen, ist der Grund, warum es eine Rückkehr hat, es macht die Dinge etwas komplexer Und deshalb habe ich das Beispiel zuerst mit einem Parameter eingeführt . Da dies nicht jedes Mal zurückgesetzt wird , wenn wir eine Rückgabe haben, ja, wir definieren die Rückgabe hier und initialisieren sie in einem neuen Speicherbereich Aber wir müssen daran denken, unsere Ergebnisse jedes rekursiven Aufrufs hinzuzufügen , jedes Mal, wenn wir unsere Methode rekursiv aufrufen Nun, ich weiß, dass das so viel zu verarbeiten ist , dass es sehr kompliziert ist Aber ich, ich habe es für dich in einfachen Worten aufgeschlüsselt. Wenn du dir dieses Tutorial vielleicht zwei- oder dreimal ansiehst. Und geben Sie vielleicht auch Ihre eigenen Beispiele an. Irgendwann wirst du es herausfinden und eines Tages wird es einfach Klick machen. Ich verspreche dir, das ist Rekursion in C Sharp. Nicht nur C Sharp Rekursion gibt es in vielen Programmiersprachen und sogar in Mathematik und ähnlichen Dingen Ich hoffe, Ihnen hat dieses Tutorial gefallen und danke Ihnen fürs Zuschauen 79. 20-1. Abschließendes Projekt (Top Trumps Simulator): Also das endgültige Projekt. Was ist das endgültige Projekt? Nun, lassen Sie uns einen Blick darauf werfen. Das Abschlussprojekt ist optional, aber ich empfehle Ihnen dringend, das gesamte Wissen, das Sie bisher gelernt haben, anzuwenden das gesamte Wissen, das Sie bisher gelernt haben und es gründlich zu versuchen. Dann erhalten Sie offiziell den Titel, den inoffiziellen Titel C Sharp Computer Programmer oder C Sharp Software Klingt ziemlich gut, nicht wahr? Für das endgültige Projekt werden wir also ein Top-Trumps-Spiel simulieren Falls Sie mit Top-Trumps-Spielen nicht vertraut sind, handelt es sich im Grunde genommen um ein Kartenspiel Und das Kartenspiel ist thematisch nach allem, was Sie wollen, wirklich nach dem, was Sie kaufen möchten Du kannst zum Beispiel Drachen mit mystischen Kreaturen haben , wo es Zauberer und Könige und Drachen und solche Dinge gibt Zauberer und Könige und Drachen und solche Dinge Jede Karte hat einen Charakter, dieser heißt zum Beispiel Drache Und er hat verschiedene Statistiken wie Stärke, Fertigkeit, Zauberkraft und Angstfaktor. Wenn du jedoch ein Deck mit Superhelden kaufst, haben sie möglicherweise etwas völlig anderes mit unterschiedlichen Charakternamen Aber im Allgemeinen ist jedes Kartenspiel thematisch gestaltet. Wenn Sie Ihre Version davon in C Sharp erstellen, können Sie ein beliebiges Thema wählen. Der Himmel ist die Grenze. Nutze einfach deine Fantasie, wie das Spiel funktioniert. Nun, ich habe eine vollständige Spezifikation beigefügt , die erklärt, wie das Spiel funktioniert, aber auch einige Annahmen, die Sie bei der Entwicklung dieser Lösung treffen können. Ich werde dir jetzt eine Demo zeigen, in der ungefähr erklärt wird, wie es funktioniert. Also hier ist die Spezifikation genau hier, keine Sorge, ich habe sie im Textformat aufgenommen , also beziehen Sie sich ein paar Mal darauf, wenn Sie Ihr Projekt planen und wie Sie das Szenario angehen werden. Ich gebe eine kurze Beschreibung dessen, was es ist. Ich habe einige Links bereitgestellt, damit Sie weitere Nachforschungen anstellen können. Nun, das ist ein Spiel für zwei Spieler. Wir gehen davon aus dass nur zwei Spieler spielen. Und ich habe eine Liste von Annahmen zusammengestellt, die Sie bei der Erstellung dieses Projekts treffen können , nur um es viel einfacher zu machen. Ich möchte nicht wirklich, dass du Wochen und Wochen damit verbringst. Du kannst, wenn du willst, es ist überhaupt kein Problem. Aber ich denke, wenn Sie diese Spezifikation verwenden , wissen Sie, ein paar Stunden am Tag für eine Woche oder so, ist das eine gute Zeit , um Ihr aktuelles Wissen zu trainieren und eine nette Software zu entwickeln , mit der Sie Ihren Freunden, Ihrer Familie oder wem auch immer Sie möchten , zeigen , Ihrer Familie oder wem auch immer Sie möchten können, wie Sie damit umgehen können. Ich zeige Ihnen jetzt meine Lösung, wie ich das Problem angegangen bin, damit Sie sich ein Bild davon machen können, wie es funktioniert. Wenn die Software zum ersten Mal ausgeführt wird, wir einfach davon aus, dass Spieler eins zuerst spielt Spieler eins kann die Eingabetaste drücken , um seinen Zug zu beginnen. Jetzt ist Spieler eins an der Reihe. Spieler eins hat fünf Karten und Spieler zwei hat fünf Karten. Sie haben also jeweils fünf Karten. Damit die Karten zum Beispiel einen Charakter wie einen Drachen oder einen König darstellen einen Charakter wie einen Drachen oder einen König , so etwas Ähnliches. Hier habe ich völlig zufällige Charaktere. So gut ist meine Vorstellungskraft, weißt du. Eine zufällig ausgewählte Karte oder ein Charakter aus meiner Hand wird gespielt, und das ist der Teddybär Jetzt hat der Teddybär eine Größe, ein Gewicht, eine magische Kraft und einen Angstfaktor Weil es ein Teddy ist, ist er ziemlich klein, nicht sehr schwer, er hat keine magischen Fähigkeiten und keinen Angstfaktor Also ist es eigentlich eine sehr schlechte Karte. Die Idee ist, dass ich hier den höchsten Wert wählen möchte, und ich hoffe, dass mein Gegner einen Wert hat, der niedriger ist als meiner. Wenn ich also Höhe wähle, sagen wir 1 Meter 45. Also wähle ich hier einfach die Nummer eins. Ich drücke Enter. Dann verteidigt der Spieler, der andere Spieler , mit Harry Houdini, der ein Zauberer ist Aber er hat eine Größe von 5,7, der Teddybär ist also nicht Der Teddybär verliert also, weil der Teddybär Aber Harry Houdini ist 57. Spieler zwei gewinnt Aber weil Spieler zu eins, Spieler zwei die Teddybär-Karte nimmt, behält Spieler zwei seine Harry-Houdini-Karte Und jetzt ist Spieler zwei an der Reihe. Wenn ich also Anton treffe, kannst du jetzt sehen, dass Spieler zwei jetzt sechs Karten hat , weil er den Teddybären gewonnen Jetzt ist Spieler zwei an der Reihe. Der zufällig ausgewählte Charakter ist Picchu. Jetzt hat Picchu eine ziemlich gute Zauberkraft, ist aber ziemlich kurz. Und es ist auch sehr leicht. Und es gibt nicht viel Angst. Deshalb möchte ich Magic Power spielen weil sie ziemlich hoch ist und ich hoffe, dass ich die Verteidigungskarte des jetzigen Spielers schlagen kann. Schauen wir uns das mal an. Der andere Spieler verteidigt mit Darth Veda. Aber ich entschied mich für magische Kräfte, die 75 waren. Darth Veda hat jedoch nur eine magische Fähigkeit von zwei. Also habe ich gewonnen Ich habe wieder gewonnen. Jetzt , da ich wieder gewonnen habe, ich immer noch dran. Also ist immer noch Spieler zwei dran. Jetzt kannst du sehen, dass ich sieben Karten habe. Der Gewinner des Spiels ist die Person, die in diesem Beispiel alle zehn Karten hat, weil es nur zehn Karten gibt. Wenn du 20 Karten erstellst, dann hat der Gewinner natürlich alle 20 Karten. Nun, hier gibt es eine Menge Annahmen. Sie können sehen, dass ich zufällig Charaktere aus dem Deck auswähle, das der Spieler hat. Wenn du dieses Spiel jedoch persönlich spielst, nimmst du den, der sich oben auf dem Deck befindet. Also, ich verwende viele Annahmen, nur um die Lebensdauer dieses Projekts zu verkürzen Also, ich will nicht, ich will nicht wirklich, dass du 34 Monate daran arbeitest und dir die Haare raufst Ich glaube nicht, dass das ein lustiges erstes und letztes Projekt für dich sein wird . Es gibt also eine Menge Annahmen, weißt du, es ist nicht wirklich verpflichtend. Füge deinen eigenen Twist hinzu. Fügen Sie Ihren eigenen Geschmack hinzu. Es liegt wirklich an dir, natürlich, ich habe gerade Picature gespielt und Piccature wurde Sie wissen also, es ist keine perfekte Anwendung, also machen Sie sich keine Sorgen, dass sie Es geht nur darum, dein Wissen und solche Dinge zu trainieren. Es macht also einfach ein bisschen Spaß und ich denke, du wirst hier eine gute Zeit damit haben. Wir haben den Mini-Teufel, wir sind Angstfaktor vier. Wir haben es ziemlich gut. Wir haben neun Karten jetzt haben wir die magische Kraft von Harry Houdini Und es sieht so aus, als hätten wir das Spiel gewonnen. Spieler zwei hat alle zehn Karten komplett zerstört, Spieler eins. Wollen wir wieder spielen? Ja oder nein? Wenn ich Nein drücke, danke fürs Spielen. Drücken Sie die Eingabetaste, um den Vorgang zu beenden. Das ist das endgültige Projekt. Auch hier ist es nicht die Lösung, es ist nur eine Lösung. Sie können mit den Charakteren machen , was Sie wollen, aber versuchen Sie, viele der Dinge anzuwenden , die wir im Kurs behandelt haben. Also hier habe ich, auf der rechten Seite hier, vier benutzerdefinierte Klassen erstellt. Hier habe ich sie in ein separates Projekt aufgenommen. Und wenn ich die Hauptmethode hier in der Programmklasse öffne , können Sie sehen, dass hier nicht wirklich viel Code enthalten ist. Das liegt daran, dass wir es in, Sie wissen schon, logische Container aufgeteilt haben . Ich habe eine Gamecontroller-Klasse, die um alles kümmert, was mit dem Spiel zu tun , mit den Runden und so. Ich habe jetzt eine Spielerklasse, die Spieler, sie modelliert die Spieler. Und ein Spieler hat eine Reihe von Charakteren oder Karten in der Hand. Und die Charakter - oder Kartenklasse ist für alle Charaktere im Spiel verantwortlich. So kannst du sehen, wie wir das Wissen nutzen, das wir angewendet haben. Wo wir einen Kurs besuchen und dieser Kurs ist für alles verantwortlich, was mit dem zu tun hat, was er heißt. Die Charakterklasse befasst sich also mit Charakteren, der Gamecontroller damit, wie das Spiel funktioniert usw. So funktioniert es also wirklich. Wir nehmen all das Wissen, das wir gesammelt haben und wenden es jetzt an. Das ist also im Grunde meine Lösung für das endgültige Projekt. Du weißt schon, Planet Planet. Benutze ein paar Notizblöcke. Benutze etwas Papier Benutze einen Stift. Denken Sie gut darüber nach, wie Sie das Problem angehen werden, wie Sie das Problem organisieren und welche Techniken Sie verwenden werden, welche Schleifen, Bedingungen und ähnliches. Ich wünsche dir viel Spaß damit. Das Abschlussprojekt testet Ihr Wissen über viele Konzepte der Dinge, die wir bisher behandelt haben. Also Klassen, Objekte, Instanziierung, If-Anweisungen, Switch-Anweisungen, Bedingungen, boolesche Vier Schleifen, Drahtschleifen, viele verschiedene Schleifen, Methoden und Methoden Es ist also eine großartige Möglichkeit, all dieses Wissen auf eine einzige Software anzuwenden. Wie lange wird das endgültige Projekt dauern? Nun, wenn dir das Programmieren Spaß macht und du Programmierer werden willst, dann sollte das überhaupt kein Problem sein, denn Übung ist immer eine gute Sache Wenn Sie zu Beginn dieses Kurses noch ein absoluter Anfänger waren, dann verbringen Sie vielleicht eine Woche lang jeden Tag ein paar Stunden oder so Wie jede andere Sprache, Französisch, Deutsch, Spanisch. Sie werden nicht alle Informationen in einem Durchgang aufnehmen . Es ist einfach nicht realistisch. Verwenden Sie die Kursmaterialien jedoch als Referenz für das endgültige Projekt. Wenn Sie Ihr Abschlussprojekt entwickeln und sich nicht erinnern können, wie man zum Beispiel eine Drahtschleife macht, dann schauen Sie sich das Wire-Loop-Tutorial einfach noch einmal an, um eine Auffrischung zu erhalten Sogar professionelle Computerprogrammierer verwenden Google und verschiedene andere Websites als Bezugspunkt, und manchmal tun sie Beim täglichen Programmieren geht es darum, um die Ecke zu denken und laterales und logisches Denken anzuwenden Es geht nicht darum, sich die Syntax zu merken und die Syntax zu wiederholen, also lassen Sie sich davon überhaupt nicht abschrecken Ich habe also meine Lösung für das endgültige Projekt beigefügt, aber ich empfehle Ihnen dringend, diese einfach nicht Schau es dir nicht an, bis du deins fertig hast. Dann kannst du es als Bezugspunkt verwenden um vielleicht, vielleicht, deinen zu verbessern. Oder schauen Sie sich die Unterschiede zwischen meiner und Ihrer Lösung an. Denken Sie daran, dass es nicht die eine Lösung für ein Problem gibt. Es kann mehrere Lösungen und alle sind richtig. Verwenden Sie es jedoch nur als Bezugspunkt , wenn Sie Ihr letztes Projekt abgeschlossen haben. Schicken Sie es an Ihre Freunde. Schick es an deine Familie. Laden Sie es zum Beispiel auf Youtube hoch. Und schick mir den Link. Ich würde mich freuen, Ihre Abschlussprojekte zu sehen und zu sehen, wie Sie diese Spezifikation interpretiert und ihr Ihre eigene Note gegeben haben. Das Letzte, was ich sagen möchte, ist, viel Glück mit dem endgültigen Projekt und viel Glück für Ihre zukünftigen Programmierbemühungen Abschließend danke ich Ihnen. Vielen Dank, dass Sie sich Take Care angesehen haben. 80. 20-2. Kurszusammenfassung (Wo gehe ich von hier aus?): Jetzt müssen alle guten Dinge ein Ende haben. Aber wenn du es bis hierher geschafft hast, dann danke fürs Zuschauen. Wenn Sie Fragen, Probleme, Kritikpunkte oder Fragen zu den Inhalten des gesamten Kurses haben, hinterlassen Sie bitte eine Nachricht zum Inhalt selbst oder senden Sie mir eine Nachricht Gerne helfe ich Ihnen auch bei der Überprüfung der zugehörigen Projektdateien, falls Sie dies noch nicht getan haben den meisten Lektionen in diesem Kurs gehören Projektdateien. Sie können diese gerne erweitern, aus ihnen lernen, aber auch Ihren eigenen Twist hinzufügen. Die Grenze liegt in Ihrer Vorstellungskraft. Die große Frage, die sich viele Menschen nach Abschluss eines Kurses normalerweise stellen, ist Wie gehe ich von hier aus weiter? Nun, ich werde dich nicht hängen lassen. Viele Leute tun das, aber ich werde dir ein paar Ideen geben. Es hängt davon ab, was Ihre Ziele sind. Was sind deine Ziele? Diese sind einzigartig für dich, sie sind persönlich für dich. Vielleicht suchen Sie zum Beispiel eine Anstellung. Sie möchten bei jemandem angestellt werden . Oder vielleicht ist es ein Hobby. Vielleicht möchten Sie eine Telefonanwendung erstellen , um Geld zu verdienen. Oder vielleicht möchtest du Videospiele in Unity machen oder einfach nur eine neue Herausforderung ausprobieren. Etwas völlig Neues. Es kommt also darauf an. Aber das Geheimnis und die Gemeinsamkeit all dieser Dinge ist Übung, Praxis, Praxis. Sharp C ist einer echten gesprochenen Sprache wie beispielsweise Französisch, Deutsch oder Portugiesisch nicht allzu unähnlich einer echten gesprochenen Sprache wie beispielsweise Französisch, Deutsch oder Portugiesisch Je öfter du es benutzt, desto besser wirst du werden Es ist nur natürlich. Und ebenso gilt Je weniger Sie es benutzen, desto mehr werden Sie vergessen. In Ihrer Freizeit empfehle ich daher, kleine Softwareanwendungen zu erstellen , um Ihre alltäglichen Probleme zu lösen und Ihnen das Leben zu erleichtern. Nicht nur das, es macht auch Spaß. Ich habe viele verschiedene Softwarekomponenten entwickelt, nur um mir das Leben zu erleichtern. Ich habe zum Beispiel einen Musik-Renamer gemacht , wenn ich iTunes habe Manchmal wird der Dateiname nicht akzeptiert, sondern es wird zum Beispiel ein verstecktes Tag in MP Three verwendet Also habe ich eine Software entwickelt, um dieses Tag in den MP Three einzufügen , sodass mein iTunes wirklich gut aussieht und alles automatisiert ist Ich muss nicht, weißt du, jeden einzelnen Song umbenennen, um ihm den richtigen Künstler oder Titel zu geben Dies ist zum Beispiel mit vielen der Tools und Techniken, die wir in diesem Kurs behandelt haben, sehr einfach vielen der Tools und Techniken, die zu bewerkstelligen. Wenn zum Beispiel kostenlose Artikel auf Craigslist auftauchen oder ähnliches, kann ich einen Musiksound abspielen Jedes Mal, wenn jemand etwas umsonst verschenkt, fängt mein Laptop an, Musik Und dann weiß ich, dass etwas Neues im kostenlosen Bereich ist und ich kann sofort den Käufer kontaktieren und, Sie wissen schon, die Abholung arrangieren. Weißt du, die Grenze ist deine Vorstellungskraft. Und zu guter Letzt habe ich einen YouTube-Bulk-Uploader erstellt. Was passiert, ist, wenn du vielleicht zehn oder 50 Videos hast, die du auf Youtube hochladen willst, aber du willst nicht alle Titel und Beschreibungen und solche Dinge eintippen alle Titel und Beschreibungen und solche Dinge Also habe ich eine Anwendung erstellt, mit der ich zum Beispiel 50 Videos aufnehmen und sie per Drag & Drop in die Software ziehen kann . Und es füllt den Videotitel und die Beschreibung und sogar die Tags aus dem Namen der Videodatei Und das spart so viele Stunden. Und das ist jetzt tatsächlich eine kommerzielle Software. Es übt also nicht nur meine Programmierkenntnisse, sondern verdient auch nebenbei Geld Es gibt also eine Menge Ideen , die Sie, wissen Sie, übernehmen und für Ihre eigenen spezifischen Szenarien anwenden Eine weitere Sache, die Sie tun können und die wirklich, wirklich gut ist, ist, Online-Codierungstests zu machen, wie kleine Programmierherausforderungen. Es gibt also zum Beispiel zwei Websites, die Sie verwenden können. Eine heißt Hacker Rank und eine andere heißt Lite Code. Die zeige ich dir jetzt. Jetzt hat jeder von ihnen viele verschiedene Programmierherausforderungen, genau wie ich das endgültige Projekt mit dem Top-Trump-Simulator vorgestellt habe . Aber normalerweise sind sie viel einfacher. Zeichnen Sie zum Beispiel eine Pyramide, was wir in diesem Kurs behandelt haben, oder zeichnen Sie ein Quadrat oder finden Sie die Königin, solche Dinge. Also schnelle Herausforderungen, die dein Querdenken , also unkonventionelles Denken , auf die Probe stellen. Sie testen also nicht nur Ihr Wissen über C Sharp und vielleicht Ihr Gedächtnis der Syntax, sondern, was noch wichtiger ist, Ihre Anwendung eines Sharp Wenn Sie mit einem Problem konfrontiert werden, wird getestet, wie Ihr Gehirn funktioniert, wie Sie das Problem verstehen und eine Lösung finden. In der Regel sind diese Herausforderungen sehr einzigartig und sehr spezifisch. Sie können sie zum Beispiel nicht wirklich googeln und eine Lösung finden. Wenn Sie diese Programmieraufgaben also viel üben und Ihre Fähigkeit, sie zu lösen, unter Ihr Querdenken verbessern, dann wird Sie das für potenzielle Arbeitgeber sehr attraktiv machen . Arbeitgeber suchen nicht nach Leuten, die und sich die Syntax merken können Sie suchen nach Menschen und fördern Querdenken. Und dafür sind diese Online-Codierungstests perfekt. Nicht nur das, diese beiden Websites, die ich vorgeschlagen habe, sie verfolgen auch, welche Übungen Sie bereits gelöst haben. Und sie erstellen ein Profil wie eine kleine Bestenliste. Sie wissen, welche Sie gelöst haben. Und ich sehe kein Problem darin, das auszudrucken oder an einen potenziellen Arbeitgeber zu schicken. Dann können sie tatsächlich sehen, welche Herausforderungen Sie gemeistert haben. Und sie können sehen, dass es nicht nur eine Karriere ist, die Sie vielleicht anstreben, oder ein Job, der Ihnen Spaß macht. Und das ist es, wonach sie suchen und das ist es, was dich von anderen Menschen unterscheidet. Und wieder geht es nicht nur darum, einen Job zu bekommen. Selbst Bastler lieben diese Programmierherausforderungen. Weißt du, es funktioniert wirklich mit deinem Gehirn. Es ist eine wirklich gute Trainingsübung für Ihren Geist, daher kann ich Online-Codierungstests nur empfehlen. Eine weitere Sache, die Sie tun können, ist Beispielfragen für Vorstellungsgespräche zu üben, auch wenn Sie nicht vorhaben, eine Anstellung zu finden. Weil sie Ihr Wissen wirklich auf die Probe stellen und Sie in Verlegenheit bringen, wenn Sie diesen Kurs zum Beispiel von Ihrem Laptop nehmen , sagen wir, Sie decken ihn mit Ihrer Hand oder einem Buch ab und fragen sich dann, was Polymorphismus ist? Kannst du diese Frage beantworten, ohne dir diesen Kurs anzusehen oder ihn zum Beispiel zu googeln? Ist das möglich? Was wäre, wenn ich dich fragen würde, was Methodenüberladung ist oder was ich meine, wenn ich abstrakt oder abstrakte Klasse sage Und was ist Kapselung und wie unterscheidet sie sich von, Sie wissen schon, Kannst du diese Fragen ehrlich beantworten? So testest du dich also wirklich selbst, ob du die Prinzipien verstehst. Es ist leicht, jemand anderem zuzusehen , wie er über etwas spricht und dann sagt, oh, okay, ja, ich verstehe es. Aber wenn du das Material mit deiner Hand verdeckst und es vor deinem Blick verbirgst, kannst du dann ehrlich sagen, okay, Polymorphismus ist das Es ist also eine Sache, etwas zu lesen und es zu verstehen, aber es ist eine andere Sache, es mit eigenen Worten zu rezitieren es mit eigenen Worten Und das ist nicht nur wichtig, um einen Job zu bekommen, sondern auch, um wirklich alles zu verstehen , was in diesem Kurs behandelt Ich kann es daher nur empfehlen , dies ebenfalls zu tun. Also das Letzte, was ich in Bezug auf das, was ich als Nächstes tun soll, erwähnen , warum Sie diesen Kurs besucht haben. Einige Leute haben diesen Kurs vielleicht besucht, um zu etwas anderem überzugehen. Vielleicht wolltest du Spieleentwicklung in Unity machen. Vielleicht wolltest du Websites entwickeln, also musstest du das Scharfe kennen. Dann können Sie zum Beispiel das Spot-Net lernen. Oder vielleicht möchten Sie Formulare für eine Desktop-Anwendung oder eine mobile Anwendung erstellen . Sie können Sharp auf all diese Szenarien anwenden, aber sie erfordern mehr Wissen, um die Rolle oder das, was Sie tun möchten, erfolgreich zu erfüllen. Aber was das Wissen, das Verständnis und die Praxis von Sharp angeht , wird dieser Kurs für diese Anwendungen sehr nützlich sein. Ich kann Ihnen zu 100% sagen, dass Sie, wenn Sie anfangen wollen, Spiele in Unity zu entwickeln, feststellen werden, dass Sie so ziemlich alles C-Sharp kennen werden . Sie müssen wissen oder zumindest wissen, wie Sie nach neuen Methoden und Klassen suchen und recherchieren können, die Sie verwenden möchten. Jegliches Wissen, das für die Entwicklung von Videospielen in Unity erforderlich ist, hängt zum Beispiel davon ab, die Unity-Engine zu verstehen und zu erlernen , was ganz anders ist. Aber was C Sharp angeht, sind Sie bei der Erstellung mobiler Anwendungen wieder abgesichert. C Sharp wurde bereits behandelt Vielleicht müssen Sie nur ein paar grafische oder spezielle Dinge lernen , mit mobilen Anwendungen zu tun haben. Also noch einmal, dieser Se-Shop-Kurs ist ein perfekter Ausgangspunkt für alles, was Sie erreichen möchten Was auch immer Ihr Endziel sein mag. Das Letzte, was ich sagen werde, ist noch einmal, vielen Dank fürs Zuschauen. Vergessen Sie nicht, mir Ihre Abschlussprojekte mitzuteilen mir Ihre Abschlussprojekte mitzuteilen wenn Sie diese durchführen möchten. Wenn Sie Fragen haben, senden Sie mir eine Nachricht und hinterlassen Sie einen Kommentar. Und lass mich einfach wissen, wie der Kurs für dich war. Und vielleicht können Sie mir in fünf bis zehn Jahren wenn Sie ein professioneller Softwareentwickler sind, , wenn Sie ein professioneller Softwareentwickler sind, eine Nachricht schicken und mir einfach mitteilen, wie es Ihnen geht, und mir sagen, ob Ihnen dieser Kurs auf lange Sicht geholfen hat. Ich werde weitere Kurse erstellen, also schauen Sie sich diese gerne zum letzten Mal an. Vielen Dank, dass Sie sich Take Care angesehen haben.