C # pour les débutants avec le game design | Tutorial Genius | Skillshare

Vitesse de lecture


1.0x


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

C # pour les débutants avec le game design

teacher avatar Tutorial Genius, Knowledge is power

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      0-1. Est-ce le cours pour vous et sur l'instructeur

      9:47

    • 2.

      0-2. Qu'est-ce que C # dans le game design ? Pourquoi apprendre C # ?

      2:33

    • 3.

      0-3. Télécharger et installer Visual Studio (C # IDE)

      5:01

    • 4.

      1-1. Hello World (logo de Mr. Beast)

      12:23

    • 5.

      1-2. Variables

      6:42

    • 6.

      1-3. Types de données

      9:39

    • 7.

      1-4. C # - Une langue fortement typée de manière statique

      2:21

    • 8.

      1-5. Travailler avec des chaînes et des substrats

      10:50

    • 9.

      1-6. Travailler avec des chiffres

      12:04

    • 10.

      1-7. Obtenir une entrée d'utilisateur

      3:02

    • 11.

      1-8. EXERCICE - Le jeu du multiplicateur de nombres

      5:22

    • 12.

      2-1. Méthodes

      4:45

    • 13.

      2-2. Paramètres de méthode

      7:26

    • 14.

      2-3. Retours de méthode

      5:01

    • 15.

      2-4. Surcharge de méthode

      3:56

    • 16.

      3. Commentaires et balises de résumé XML

      9:11

    • 17.

      4-1. Déclarations if et Else

      8:08

    • 18.

      4-2. Déclarations Else If

      3:19

    • 19.

      4-3. Opérateurs d'égalité et d'inégalité

      1:37

    • 20.

      4-4. Opérateurs de comparaison

      3:56

    • 21.

      4-5. Opérateurs booléens

      5:48

    • 22.

      4-6. EXERCICE - Créer un jeu de simulation

      7:16

    • 23.

      4-7. Déclarations Switch

      7:14

    • 24.

      4-8. Opérateurs

      4:10

    • 25.

      5. Tableaux

      8:33

    • 26.

      6-1. Boucles While

      9:23

    • 27.

      6-2. Boucles Do While

      2:51

    • 28.

      6-3. Boucles pour

      4:30

    • 29.

      6-4. Boucles pour les boucles vs While

      2:06

    • 30.

      6-5. Boucles de Foreach

      4:20

    • 31.

      6-6. EXERCICE - Dessiner un cube

      7:22

    • 32.

      7-1. La déclaration de pause

      5:39

    • 33.

      7-2. La déclaration de suite

      4:20

    • 34.

      8-1. Gestion des exceptions (essayer, attraper, enfin)

      14:07

    • 35.

      8-2. Baies 2D, 3D et multidimensionnelles

      5:33

    • 36.

      8-3. EXERCICE - Échecs - Trouver la reine jeu

      6:09

    • 37.

      8-4. Listes

      6:35

    • 38.

      9-1. O-O, classes et objets

      16:12

    • 39.

      9-2. Builders

      9:01

    • 40.

      9-3. Méthodes d'objet

      7:43

    • 41.

      9-4. Modificateurs d'accès (publics, privés, etc)

      13:40

    • 42.

      9-5. Propriétés

      17:03

    • 43.

      9-6. Héritage

      9:04

    • 44.

      9-7. Suppression de méthode (polymorphisme)

      6:29

    • 45.

      9-8. Héritage à plusieurs niveaux

      5:39

    • 46.

      9-9. Le mot-clé scellé

      4:06

    • 47.

      9-10. Cours abstraites et méthodes abstraites

      9:29

    • 48.

      9-11. Ce mot-clé

      4:56

    • 49.

      9-12. Les concepteurs de mots-clés et de cours de base

      7:00

    • 50.

      9-13. Interfaces

      16:04

    • 51.

      9-14. Résumé O-O

      6:31

    • 52.

      10-1. EXERCICE - Dessiner des pyramides

      21:31

    • 53.

      10-2. Solutions, projets multiples et espaces de noms

      17:34

    • 54.

      11-1. Points d'arrêt et pas de code

      29:30

    • 55.

      11-2. Fenêtre immédiate

      12:56

    • 56.

      11-3. Windows et automatiques

      8:55

    • 57.

      11-4. Watch Windows et Quick Watch

      6:40

    • 58.

      12-1. Le modificateur d'accès protégé

      8:17

    • 59.

      12-2. Le mot-clé statique

      12:25

    • 60.

      13-1. Le mot-clé en lecture seule

      7:43

    • 61.

      13-2. Le mot-clé const

      9:07

    • 62.

      14-1. Mémoire de pile et de tas

      15:56

    • 63.

      14-2. Paramètres de méthode - Recouvrement par valeur

      12:57

    • 64.

      14-3. Paramètres de méthode - Recouvrement par référence (Le mot-clé de ref)

      6:34

    • 65.

      15. Le mot-clé struct

      11:53

    • 66.

      16-1. Type de données de l'objet - Boxe et unboxing

      11:09

    • 67.

      16-2. Mot-clef dynamique et vérification de type dynamique

      23:12

    • 68.

      16-3. Le mot-clé var et l'inférence de type

      17:38

    • 69.

      16-4. Types anonymes

      9:06

    • 70.

      17-1. Le mot-clé null

      9:00

    • 71.

      17-2. Types de valeur annulables

      6:48

    • 72.

      17-3. Les opérateurs de coalescence nulle

      12:12

    • 73.

      18-1. Paramètres nommés et optionnels

      9:28

    • 74.

      18-2. Le mot-clé out

      6:13

    • 75.

      18-3. Mot-clé in

      2:35

    • 76.

      18-4. Le mot-clé params

      4:07

    • 77.

      19-1. Énumérations - Le type d'enum

      13:39

    • 78.

      19-2. Recursion et gestion de dossiers (IO / System.IO)

      37:01

    • 79.

      20-1. Projet final (jeu de simulation de Top Trumps)

      10:40

    • 80.

      20-2. Résumé du cours (Où dois-je aller ? )

      9:18

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

446

apprenants

2

projets

À propos de ce cours

C # pour les débutants absolus avec Game Design est pensé pour les débutants absolus !

Il absorbe ZÉRO dans n'importe quel type de programmation. Si vous voulez vous lancer dans la programmation en C #, vous avez trouvé le bon endroit !

C'est l'étape 1 où nous apprenons les bases du C # et nous développons une base de programmation solide avant de nous plonger dans le game design. Nous couvrirons quelques exemples de travail de base et quelques mini-jeux au cours de cette série. Les moteurs de jeux comme Unity utilisent un back-end en C #, donc quand on commence à utiliser Unity dans l'étape 2, on peut commencer à courir ! À la fin de ce cours, un petit défi de jeu amusant sera présenté comme un projet final.

Ce cours utilise les dernières versions de C # (version 11) et également Visual Studio 2022 (dernière version même en 2023).

Que vous souhaitiez apprendre le C # Game Design : une opportunité d'emploi, un passe-temps, un supplément pour l'université ou le collège, etc., alors ce cours est parfait pour cela !

Vous voulez développer des jeux vidéo dans Unity ? Saviez-vous que Unity utilise C # dans les coulisses ? Ce cours vous donnera une base C # solide pour le développement de jeux dans Unity.

Vous apprendrez le même savoir (et plus) en programmation C # qu'un étudiant diplômé d'université. Je le sais parce que je suis moi-même allée à l'université ! J'enseigne le développement de logiciels depuis 2003, donc un peu plus de 20 ans maintenant !

Vous commencerez par apprendre les fonctionnalités de base de la programmation : variables, méthodes, boucles, états et types de données. Vous apprendrez ensuite la programmation orientée objet (O-O) : classes et objets, héritage, polymorphisme, abstraction, encapsulation, etc., puis sur des fonctionnalités plus avancées de C # et de l'. Framework NET, comme : la gestion de dossiers, la récursion, le traitement des exceptions (erreurs), la surcharge de méthodes, le débogage et beaucoup plus ! !


À la fin de ce cours, vous aurez développé une base vraiment solide de C #, mais aussi de notions de programmation, de conceptions de programmation et de pratiques typiques de l'industrie lorsque vous l'appliquerez au game design.

Tout le code source des exemples de projets sont inclus et prêts à être téléchargés.

Ce cours est destiné à vous garder engagés tout au long. Il comprend de nombreux exemples et exercices de codage afin que vous puissiez tester votre maîtrise de tout ce que vous avez appris.

Le projet final est un excellent moyen de tester vos compétences et votre savoir en suivant ce cours ! Nous allons créer un petit jeu cool : un simulateur de top atouts !

Rencontrez votre enseignant·e

Teacher Profile Image

Tutorial Genius

Knowledge is power

Enseignant·e
Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. 0-1. Est-ce le cours pour vous et sur l'instructeur: Alors, bienvenue à tous. Bienvenue dans mon cours de didacticiel vidéo sur C Sharp. Ici, j'ai environ 11 heures de séquences vous enseignent tout, des bases absolues. Cela suppose que vous n'avez aucune connaissance en programmation. Au bout du compte, vous aurez les mêmes connaissances, sinon plus, programmation et en C Sharp qu' un étudiant universitaire ordinaire. Donc, si vous voulez apprendre le do sharp comme passe-temps, ce n'est pas un problème. C'est ce que tu vas apprendre dans ce cours. Cependant, si vous voulez obtenir un emploi ou éventuellement une carrière à la fin de ce cours, vous n'aurez aucun problème à le faire non plus. Et pour ceux d'entre vous qui souhaitent peut-être une mise à niveau sur C Sharp ou une mise à niveau de programmation générique, ce cours est également bon pour cela Ce didacticiel vidéo sur la boutique vous convient-il donc ? Eh bien, tu veux apprendre à faire du shopping ? Alors la réponse est oui. Mais peut-être qu'il vaut mieux se demander pourquoi devrais-je choisir ce cours plutôt que d'autres ? Eh bien, le secret de l'apprentissage réside tout d'abord dans le professeur, et c'est la façon dont il enseigne les informations. Et deuxièmement, le processus d'apprentissage. Le cours est-il intéressant ? Oui, ça l'est. Est-ce ennuyeux ? Non, certainement pas. Est-ce que c'est confus ? Non, parce que j'explique les principes non pas d'une seule manière, mais peut-être de deux ou trois manières différentes. À la fin de ce cours, vous aurez une compréhension complète de toutes les techniques que je vous enseignerai dans ce cours. Et le rythme est-il rapide ? Non, ce n'est pas du tout rapide. Ce cours est conçu pour les débutants absolus. Le rythme est donc lent, au mieux. À qui s'adresse ce cours ? Ce cours s'adresse aux débutants absolus. Cela suppose que vous n'avez aucune connaissance en programmation, aucune connaissance en développement logiciel et que vous souhaitez vous lancer dans la programmation C sharp. Peut-être que vous voulez faire des jeux dans Unity. Peut-être souhaitez-vous développer des applications logicielles, des applications mobiles, des sites Web dans C Shop. Tout cela est réalisable en visionnant ce didacticiel vidéo Ce cours suppose que vous savez utiliser un ordinateur. Vous savez que de manière générique, vous pouvez déplacer une souris, peut-être consulter vos e-mails et télécharger un fichier Mais le fait est que cela ne suppose aucune connaissance en programmation. Donc, l' expérience d'apprentissage, eh bien, j'aime la psychologie pendant mon temps libre, donc je comprends le fonctionnement de l'esprit humain, en particulier lors de l'apprentissage et de la rétention d'informations. Mais peut-être un sujet nouveau et intimidant. Cela m'amène au point suivant, le rythme. Quel est le rythme du cours ? Eh bien, la programmation comporte de nombreux termes techniques complexes et complexes. Mais ne vous inquiétez pas, j'introduis mots techniques très lentement tout au long du cours. De nombreux enseignants utilisent immédiatement des mots compliqués, ce qui crée beaucoup de confusion et nuit à la capacité de retenir le sujet traité. Je trouve qu'il s'agit d'une étape très importante pour prévenir votre plus grand ennemi , à savoir la surcharge d'informations. Alors ne vous inquiétez pas, vous allez apprendre les mots compliqués et techniques, mais pas avant le sujet traité. Je vais le présenter lentement afin que l'expérience d'apprentissage soit très agréable. Au fur et à mesure que le cours avance, je commencerai lentement à introduire les termes et le jargon technique appropriés dans le secteur lorsque regarderai les vidéos de ce cours J'apprécie que vous ne soyez pas là pour poser des questions immédiatement et obtenir des commentaires directs. Donc, ce que je fais, c'est d'expliquer les sujets de différentes manières, et pas seulement d'une seule façon, afin que vous puissiez bien comprendre le sujet en question. Je pense que cette méthode d' apprentissage est bien meilleure que de créer des vidéos dans lesquelles vous ne fournissez pas suffisamment d'informations. Si les informations fournies ne sont pas suffisantes, vous vous sentez perdu et frustré et aucun enseignant n'est là pour poser des questions. Vous n'en ferez pas l'expérience avec mon cours. Et je vous le garantis, car même après avoir expliqué un sujet compliqué, par exemple, nombreuses manières différentes, n'hésitez pas à me laisser un message ou un commentaire si vous avez des questions . Et je me ferai un plaisir de répondre à toutes vos questions ou préoccupations à tout moment pendant ce cours. Enfin, si je vous enseigne un principe de programmation, je ne vous apprends pas seulement les informations. En fait, j'explique pourquoi ils sont utiles, pourquoi vous les appliquez dans la vie de tous les jours et pourquoi il est important de suivre ce principe particulier dans le développement de C sharp. C'est donc là que mon cours diffère de la plupart des cours proposés. Vous apprenez le comment et le quoi, mais aussi le pourquoi, ce qui est très important. engagement, l'un des principaux obstacles à l' apprentissage de nouvelles informations, est l'engagement et la motivation. Les deux types vont de pair. Donc, pour ce que je fais, j' utilise des exemples amusants. De plus, j'utilise également des exemples de tendances pour que les choses restent intéressantes Je comprends ce que l'on ressent lorsque l'on perd sa motivation et son engagement et que l'on s'ennuie un peu lorsqu'on apprend un nouveau sujet. J'essaie donc de garder les choses fraîches et actuelles afin que vous ne perdiez jamais votre motivation. Et vous resterez toujours intéressé par les sujets abordés. Alors, qu'est-ce que je retirerai de l'apprentissage de ce cours ? Pourquoi devrais-je apprendre de toi ? Quel est le résultat final ? Qu'est-ce que je peux réaliser ? Eh bien, très bonnes questions. Je vais vous apprendre tout ce que vous devez savoir sur la boutique, mais pas seulement sur la programmation de boutique en C en général. Les outils, les techniques et les principes qui feront de vous un bon développeur, un bon programmeur, surtout en boutique. Et ce sera similaire, sinon meilleur, à celui d'un étudiant diplômé universitaire. Comment puis-je garantir ces affirmations audacieuses ? Eh bien, je suis allée à l'université, j'y suis allée pendant quatre ans entiers. Et je peux garantir que le contenu de ce cours correspond exactement à ce que j'ai appris à l'université. Mais pas seulement cela, mais bien plus encore. Je vous enseigne également les outils, les techniques et les meilleures pratiques que j' ai appris en travaillant également dans l'industrie, donc à titre professionnel. Donc, que vous fréquentiez un collège universitaire ou non, vous avez un avantage, car vous n'êtes pas assis dans une salle de classe pleine de personnes très distraites. Il s'agit d'une expérience individuelle unique. Enfin, je vais résumer en disant que peu importe le type d'apprenant que vous êtes, que vous soyez un apprenant visuel ou non, pouvez regarder ce cours en vous asseyant sur une chaise et en mangeant une pizza, par une chaise et en mangeant une pizza, Toutefois, si vous souhaitez être plus interactif, je fournis les fichiers complets du projet avec ce cours, tout le code source que j'utilise. Donc, si vous voulez suivre votre ordinateur, vous pouvez le faire. Aucun problème. Ce cours propose plusieurs méthodes d' apprentissage pour différents types d'apprenants. Alors à propos de moi, qui suis-je, quel est mon nom ? Eh bien, je suis Sean et c'est un plaisir de tous vous rencontrer. Je suis un ingénieur logiciel professionnel indépendant. Mais non seulement cela, mais j'enseigne développement et la programmation de logiciels. Je travaille avec de nombreux langages de programmation différents ainsi qu'avec de nombreuses architectures différentes. Mais comme j' enseigne régulièrement aux étudiants, je n'ai pas perdu la capacité de communiquer avec les nouveaux apprenants, en particulier au niveau débutant. J'ai obtenu mon diplôme universitaire en 2007. J'ai plus de 20 ans d' expérience professionnelle dans le développement de logiciels. J'ai même travaillé parallèlement mes études universitaires dans le même domaine. J'enseigne la programmation depuis 2003. Il y a longtemps, je l'ai utilisé comme moyen de financer mes études universitaires avant même que Youtube n'existe. Je vais maintenant vous montrer mon très ancien site Web où j'ai créé des didacticiels vidéo en Visual Basic, six C plus Java, Direct X et autres. Vous pouvez donc voir que j'ai maintenant enseigné la programmation à de nombreuses personnes. Et ils me recontactent toujours plus tard, vous savez, dix ans plus tard, 15 ans plus tard. Et parlez-moi de leurs réussites, des entreprises dans lesquelles ils travaillent actuellement et des projets auxquels ils ont participé. C'est donc très sain et intéressant d' entendre les histoires de réussite de mes anciens étudiants Et j'adore quand les étudiants viennent me voir pour me parler leurs réussites et de la façon dont leur vie a changé. Apprendre, programmer, c'est vraiment intéressant et c'est ce qu'il y a de mieux dans l'enseignement. Je suis donc indépendant maintenant, mais j'ai travaillé pour de nombreuses entreprises par le passé. Petites et grandes entreprises aussi, vous en avez peut-être entendu parler. J'ai travaillé pour The Guardian , une société de presse basée dans le centre de Londres. J'ai travaillé pour le ministère britannique de la Défense, où nous avons travaillé sur le logiciel Cad pour modéliser leurs navires de surface et leurs sous-marins J'ai travaillé pour Pfizer, une société pharmaceutique dont vous avez sûrement tous entendu parler ces derniers temps Mais lorsque j'y travaillais, peu de gens avaient entendu parler de cette entreprise. Et j'ai travaillé pour diverses petites agences dont vous n'avez peut-être jamais entendu parler, j'en suis sûr. Je peux donc partager mes expériences de travail au sein petites équipes et de très grandes équipes. Et des exemples de ces deux types d' expériences que je partagerai également tout au long de ce cours. Donc, si vous vous demandez d'où vient mon accent, je suis né au Royaume-Uni et mes projets de programmation m'ont amené partout dans le monde. J'ai déménagé en Amérique à 25 ans et j' y ai obtenu la citoyenneté. Et maintenant je vis en Amérique du Sud. Mais une chose est restée constante, plutôt que ma maison et mon accent, par exemple, c'est que j'ai toujours enseigné programmation et que j'ai toujours fait du développement de logiciels. Donc, ça suffit pour moi. Parlons maintenant de C sharp. 2. 0-3. Qu'est-ce que le C # dans le game design ? Pourquoi apprendre C # ?: Alors, qu'est-ce que C Sharp ? Eh bien, C sharp est ce qu'on appelle un langage de programmation orienté objet. Et ne vous inquiétez pas, nous en reparlerons plus tard. Il est créé par Microsoft et fonctionne sur ce que l'on appelle le .net Framework C Sharp trouve ses racines dans la famille C. Je ne sais donc pas si vous avez entendu parler de C ou C Plus Plus, mais c'est assez similaire à ces langages, et c'est de là qu'il a été développé. Il est très similaire aux langages populaires tels que C plus Plus et Java. Et la première version de C Sharp est sortie en 2002. Maintenant, il a donc plus de 20 ans. Et la dernière version au moment du tournage est la version 11 de C Sharp. Le langage C Sharp évolue donc lentement , à peu près comme tout le reste de la vie. Alors pourquoi devrais-je apprendre C Sharp ? À quoi sert-il ? Eh bien, vous pouvez créer des applications mobiles, des applications de bureau, des applications Web telles que des sites Web, des jeux vidéo, jeux de réalité virtuelle, par exemple, de l'apprentissage automatique, logiciels, des applications de base de données et bien plus encore. C'est l'un des langages de programmation les plus populaires au monde. C'est pourquoi il est vraiment bon d'apprendre une langue comme le C Sharp, car il y aura plus d' opportunités d'emploi et plus d'opportunités pour vous d'appliquer vos connaissances. Il est facile à apprendre et à utiliser. Il bénéficie d'un énorme soutien communautaire. Si vous connaissez déjà C , C plus ou Java, ou si vous voulez les apprendre à l'avenir, ils sont très similaires. Les principes que je vous enseigne dans ce cours peuvent être appliqués à C plus et Java si vous souhaitez apprendre un nouveau langage à l'avenir. L'une des tendances actuelles est de créer jeux vidéo dans un progiciel de développement appelé Unity Unity prend en charge C Sharp en arrière-plan. Si vous voulez que votre jeu vidéo fasse des choses, que vos personnages bougent, vous pouvez utiliser le do dièse pour y parvenir. heure actuelle, les utilisateurs apprennent plus que jamais le C sharp, juste pour pouvoir créer des jeux vidéo dans Unity. Voici donc de nombreuses raisons d'apprendre le C Sharp et pourquoi vous devriez apprendre C Sharp plutôt que d' autres langages. J'espère donc que, grâce aux explications que j'ai données jusqu'à présent, je vous ai convaincu de commencer votre parcours en apprenant C Sharp et en devenant peut-être un programmeur professionnel, voire amateur Commençons maintenant nos aventures dans C Sharp et téléchargeons les outils dont nous avons besoin pour commencer. 3. 0-4. Télécharger et installer Visual Studio (IDE): Comment commencer à coder en C Sharp ? Eh bien, le moyen le plus simple de commencer est d'utiliser ce que l'on appelle un IDE. Cela signifie Environnement de développement intégré. Et l'environnement que nous allons utiliser s' appelle Visual Studio. Nous n'allons donc pas coder dans le Bloc-notes ou quelque chose d' effrayant comme ça Nous allons utiliser des outils conviviaux pour débutants fournis par Microsoft. Et en plus de cela, ils sont gratuits. Laissez-moi vous montrer comment télécharger et démarrer avec Visual Studio. Commençons à télécharger Visual Studio dès maintenant. Si nous arrivons sur Google et que nous tapons simplement Visual Studio Community, nous pouvons cliquer sur le premier résultat ici. Maintenant, la dernière version au moment du tournage est Visual Studio 2022. Mais même si vous avez une version antérieure ou ultérieure, de nombreuses techniques que nous allons aborder dans ce cours fonctionneront. Aucun problème Nous allons donc cliquer sur ce premier lien ici. Ici, nous pouvons télécharger l'IDE ici si vous utilisez un Apple Mac, par exemple. Ensuite, vous pouvez cliquer sur ce bouton ici. Et puis Visual Studio est disponible en trois versions différentes. Nous avons celui pour Windows ici, celui pour Macos, et aussi un modèle léger pour Mac, Windows et Linux. Donc, en fonction de votre système d'exploitation, vous devriez être à peu près couvert. Mais j'utilise une machine Windows et cela ne correspond pas vraiment. Si vous utilisez un Mac, vous pouvez toujours suivre les tutoriels, pas de problème. Je vais donc cliquer sur ce lien de téléchargement ici, puis Visual Studio va commencer le téléchargement. Ce n'est qu'un fichier de 34 mégaoctets, il est donc très petit, mais tout sera téléchargé dans le fichier de configuration lui-même Juste avant d'installer Visual Studio, je tiens à mentionner une chose. Visual Studio n'est pas uniquement lié au développement de C Sharp. Vous pouvez faire tellement de choses dans Visual Studio. Visual Studio fonctionne avec HTML, CSS, Javascript. Vous pouvez même créer des applications mobiles, Php, Python, Spot, Net. Tous ces outils, technologies et langages de programmation que vous pouvez utiliser dans Visual Studio. Donc, si vous connaissez déjà une autre langue, ou si vous souhaitez essayer d'autres langues à l' avenir après avoir examiné C Sharp, Visual Studio vous aidera également dans ces efforts C'est donc un logiciel très puissant , et encore une fois, il est gratuit. Ouvrons le fichier d'installation de Visual Studio, que nous venons de télécharger et obtenons lors de l'installation de Visual Studio. Alors, cliquons sur « Continuer » ici. Maintenant, il ne fait que préparer le programme d'installation, il télécharge un fichier légèrement plus gros. C'est maintenant la fenêtre que vous allez voir une fois la configuration initialisée Vous pouvez donc faire beaucoup de choses différentes ici dans le cadre de ce cours. La seule chose avec laquelle nous allons travailler est C Sharp. La seule chose dont nous avons besoin, c'est l' environnement de bureau .net ici Il vous suffit donc de cliquer sur cette case ici, puis nous pourrons procéder à l'installation ces composants. Rien d'autre ? C'est totalement facultatif, et à vous de choisir, nous avons diverses choses pour développer des sites Web à Aspet Nous avons également Azure Node, Python. Encore une fois, les ordinateurs de bureau et les appareils mobiles, les éléments de C Plus Plus. Et vous pouvez même installer Unity à partir du installation de Visual Studio et de divers composants de données. Il y a donc beaucoup à faire, beaucoup à installer et beaucoup à apprendre en termes de programmation et d'utilisation de Visual Studio. Mais nous n'avons besoin que de cette simple boîte ici. Si vous parlez une autre langue ou vous connaissez mieux une autre langue, vous pouvez la sélectionner ici. Ce n'est pas du tout un problème. Donc, si nous venons ici maintenant, c'est tout ce qui va être installé ici. Pour être honnête, je ne pense pas que nous ayons besoin créateurs de modèles de partage en direct ou de mélanges. Cela va juste faire exploser notre installation. Mais je pense que c'est une bonne configuration pour commencer et elle vous donnera tout ce dont vous avez besoin pour suivre ce cours et même un peu plus. Maintenant, ce que nous allons faire, c'est simplement cliquer sur ce bouton d'installation. Ici, vous avez plusieurs options. Vous pouvez tout télécharger, puis l'installer, ou vous pouvez l' installer pendant le téléchargement. Cela n'a pas vraiment d'importance, cela dépend simplement vos préférences et peut-être de votre connexion Internet. Alors, cliquons sur le bouton d'installation et commençons. L'installation peut prendre quelques minutes, mais une fois que vous voyez cet écran ici, cela signifie que Visual Studio a été correctement installé. Vous pouvez également avoir des icônes sur votre bureau ou dans le menu de vos programmes, selon le système d'exploitation que vous utilisez. Mais essentiellement, une fois qu'il apparaît dans cette liste, Visual Studio est installé. Ce que nous pouvons faire, c'est simplement cliquer sur ce bouton maintenant et lancer Visual Studio, puis commencer à développer notre logiciel dans C. Sharp. 4. 1-1. Hello World (logo de Mr. Beast): Dans cette leçon, nous allons créer un logiciel très simple appelé application console, affichera le logo de Mr . Beast à quiconque ouvre notre logiciel. Allons-y maintenant. Visual Studio vient d' être installé. Nous allons créer notre toute première application logicielle. Ce sera notre tout premier. Ce sera adapté aux débutants, et nous allons commencer par le début. Allons-y. Une fois Visual Studio ouvert, nous allons cliquer sur Fichier, Nouveau projet. Ensuite, nous aurons une fenêtre semblable à celle-ci. Maintenant, si vous n'avez pas Visual Studio 2022, c'est la version que j'utilise actuellement. Cela peut sembler légèrement différent. Vous pouvez voir les paramètres à différents endroits. Les choses peuvent être appelées quelque chose de légèrement différent. Mais le principe général s'applique toujours. Maintenant, notre toute première application logicielle, ce sera une application console. Et cela est représenté par ce modèle de projet ici. Ce qu'est une application console, c'est un peu comme une fenêtre noire. Il y a juste du texte dessus. Et si je l'utilise, c'est parce qu'il est très convivial pour les débutants. n'y a pas de boutons, de listes, images ou quoi que ce soit de compliqué. C'est très convivial pour les débutants et c'est pourquoi j'utilise une application console. Si vous ne le voyez pas réellement dans cette liste, vous pouvez le rechercher ici en tapant application console ou application console. Et vous pouvez voir que tous ces modèles se chargeront ici. Nous voulons celui-ci parce que nous écrivons en C Sharp. Il fonctionnera en fait sur Linux, Mac, Windows. Nous allons utiliser celui-ci, nous allons cliquer sur Suivant. On peut appeler ça comme on veut. Cela dépend de vous. Vous pouvez le laisser comme ça, ou vous pouvez choisir quelque chose de plus descriptif. Nous allons donc l'appeler le premier programme, le lieu. Vous pouvez choisir un répertoire dans lequel vous souhaitez conserver tous les fichiers de votre projet. Cela dépend de vous. Alors, cliquons sur Suivant. Maintenant, je vais parler de tout ce qui concerne les frameworks dans un prochain tutoriel. Je veux que cela reste très simple, cette liste peut contenir 4567, tous des numéros différents. Nous allons juste le laisser à sept heures. Si vos quatre vont bien, cela fonctionnera toujours. Si vous voyez cette case à cocher qui indique ne pas utiliser d'instructions de haut niveau Assurez-vous que c'est coché. C'est très important. Cliquez sur Créer. Et c' est ce que nous voyons ici. Maintenant, Visual Studio reçoit tout ce code pour nous, et la raison pour laquelle ils le font est de le rendre plus convivial afin que nous puissions commencer. En tant que premier utilisateur, vous n'avez probablement aucune idée de ce que cela signifie. Cela n'a pas vraiment d'importance. aborderai toutes ces lignes dans un prochain tutoriel et vous apprendrez ce qu'elles signifient à temps pour que cela reste convivial pour les débutants. De toute façon, la seule ligne à laquelle vous devez vous préoccuper pour le moment est celle-ci ici même dans ce didacticiel. Nous allons mettre tout notre code entre cette orthèse bouclée ici et celle-ci ici, le tout au milieu Et nous pouvons mettre plus de lignes ici si nous le voulons. Dans ce tutoriel, nous ne parlons ici que de cette section. Ne vous inquiétez pas pour tout cela. Supprimons toute cette complexité. Parlons-en. À quoi ça sert ? C'est écrit sur la ligne droite de la console, Bonjour tout le monde. Pour vraiment essayer d'exécuter ce programme, je dois parler de ce qu'on appelle un compilateur. Maintenant, Visual Studio possède un compilateur intégré car nous écrivons C Sharp Il contient un compilateur Sharp. Ce que fait le compilateur C Sharp, c'est prendre tout notre code ici, c' est-à-dire tout ce qui se trouve dans cette fenêtre blanche, pour le compiler Si nous utilisons Windows, par exemple, il va créer un fichier EX pour nous, ce qu'est un fichier E. C'est ce qu'on appelle un fichier binaire, vous n'avez peut-être pas vraiment besoin de le savoir pour le moment, mais c'est ce qu'on appelle un fichier binaire. Si nous voulons exécuter ce programme sur un Mac, par exemple, il créera un fichier binaire compréhensible par un Mac. Si nous voulons qu'il exécute un Android, comme un téléphone Android, il créera un fichier binaire que le téléphone Android pourra comprendre. C'est vraiment ce que fait un compilateur en un mot très petit et simple Il prend tout notre code et le compile dans un seul fichier binaire ce faire, afin de lancer le compilateur, vous voyez ce petit bouton vert de lecture ici où il est écrit le nom de notre projet appelé First Program. Lorsque nous cliquons sur ce bouton, c'est ici que nous disons « oh, hey, Visual Studio ». Pouvez-vous dire à notre compilateur de prendre tout notre code et de le transformer en fichier afin que nous puissions exécuter le logiciel ? C'est exactement ce qu'il fait, nous allons donc cliquer ici. Ce qui se passe, c'est que notre petite fenêtre noire apparaît et disparaît immédiatement. Deux choses ici, toutes ces choses ici, vous avez vu tous ces textos devenir fous. C'est le compilateur. Le compilateur dit, d'accord, j'ai fait ceci, ceci, cela, puis-je cracher ce fichier EXE au bas de celui-ci C'est parce que j' utilise Windows. Il a créé un fichier EXE pour moi. Le fichier EXC est maintenant créé. Le logiciel est lancé. Il essaie d'ouvrir le fichier EC pour nous. C'est cette fenêtre noire qui vient d'apparaître. Mais ensuite, il a disparu instantanément. Il a disparu instantanément parce que nous ne lui disons pas de rester ouvert. Visual Studio a bien à nous fournir cet exemple de code, mais il a également maintenu le logiciel ouvert afin que nous puissions réellement voir ce qui se passe. Je vais taper encore une ligne pour que la fenêtre noire reste ouverte pour nous. Je vais donc taper console car la console est la fenêtre noire. Nous voulons donc dire, oh, hé, ligne de lecture sur console, n'est-ce pas ? C'est donc ce que je mets là et cela permettra de garder la fenêtre de la console ouverte. Parlons de cette ligne très rapidement. Ce que cela fait, il attend l'entrée de l'utilisateur. Ainsi, par exemple, avez-vous vu un logiciel, logiciel qui dit «   hé, quel est votre nom » ? Et puis tu tapes ton nom ? Donc, lorsque nous exécutons cette ligne de code, la fenêtre noire attend notre entrée. Et cela ne fait que garder la fenêtre ouverte. Lancez simplement ce logiciel maintenant. Maintenant, vous pouvez voir que la fenêtre est ouverte. En fait, il est resté ouvert, il ne va pas disparaître. C'est simplement parce qu'il attend les commentaires de nos utilisateurs. Mais c'est une façon un peu sale et un peu maladroite de conserver Nous pouvons donc voir ce qui se passe. Cette fenêtre noire est notre application console. C'est notre tout premier logiciel. Enrichissez-vous dans le sac. Cela ne fait pas grand-chose. Il ne fait que dire bonjour à tout le monde. Cela vous dit qu'il est vivant. C'est dire bonjour au monde entier. C'est tout ce qu'il fait pour le moment. est très simple, mais ne vous vendez pas à découvert, il s'agit de votre tout premier logiciel. Nous pouvons soit le fermer en appuyant sur Enter, soit le rayer ici. Et c'est tout en résumé, notre toute première application logicielle Maintenant, comment pouvons-nous développer cela ? Eh bien, parlons d'abord d' une autre chose, à savoir la distinction majuscules/majuscules en do dièse. Et quelques petites mises en garde également. Vous remarquez ici qu'il est écrit ligne rouge et ligne droite, en fait la distinction majuscules et minuscules. Cela signifie que si je remplace ce L majuscule par un L minuscule, vous pouvez voir que j'ai cette ligne rouge en dessous qui dit, oh, je ne le trouve pas vraiment dans le système. Il n'existe pas. C'est parce qu'un L minuscule et un L majuscule en do dièse sont deux choses très différentes. Gardez cela à l'esprit. La distinction majuscules/minuscules doit être faite. Enfin, toutes les lignes doivent se terminer par un point-virgule. Si vous oubliez le point-virgule, alors la même chose va se produire. Vous voyez ce petit gribouilli rouge ici. Si nous le survolons avec la souris, cela indique que le point-virgule est Il vous indique donc en fait quel est le problème. Si jamais vous avez une époque où vous avez ligne rouge ondulée et que vous essayez de lancer le programme, vous allez obtenir quelque chose comme ça Et vous vous familiariserez très bien avec ce dialogue dans le cadre de vos projets de programmation, croyez-moi. Ensuite, il vous indiquera quel est le problème ici en bas. Vous pouvez double-cliquer dessus et cela vous en avertira. Et cela signifie simplement qu'il manque le point-virgule. Maintenant, j'ai parlé très brièvement de ce qu'ils font. Parlons juste de cette partie ici. Ce que nous voulons faire, c'est dire « oh, hé, fenêtre noire ». Écrivez la ligne dans la fenêtre et nous voulons écrire bonjour à tout le monde. C'est tout ce qu'il fait. Tu l'as complètement résolu toi-même. Mais maintenant, je vous ai dit que nous pouvons réellement développer ce point. Nous pouvons vraiment dire, oh, hé, c'est vrai, Three Hello Worlds. Nous l'enregistrons, cliquons sur le bouton, et maintenant nous en avons trois. Vous voyez maintenant où cela va dans notre exemple. Dès le début, j'ai dit que nous allions afficher le logo de Mr. Beast. J'ai maintenant un fichier de demande pour le logo de Mr . Beast. Le ski n'est qu'une représentation textuelle d'une image. Je vais vous montrer ce que cela signifie maintenant. Tout va avoir du sens. Vous pouvez donc voir ici que j'ai un logo de Mr . Beast dans le bloc-notes Et j'ai ajouté la console juste avant, donc nous pouvons le voir ici. Je vais juste copier tout ça. Et je vais le coller entre ces bretelles bouclées, comme je l'ai dit tout à l'heure. Je vais garder ça. Je vais appuyer sur le bouton vert. Je vais ouvrir cette fenêtre pour que nous puissions le voir. Et je vais faire défiler la page vers le haut. C'est notre tout premier logiciel. Dès que quelqu'un ouvre votre logiciel, il voit le logo de Mr. Beast. C'est aussi simple que cela de modifier ce message et de créer une toute nouvelle image. Lorsque nous examinons le code ici, ce ne sont que plusieurs instructions sur la ligne droite qui créent tous ces M ici et un très beau design de caractère sur le logo ici. Avant de terminer cette leçon, je vais juste vous montrer comment tout cela est lié. Cela a du sens dans ta tête. Vous vous souvenez quand nous avons créé un tout nouveau projet et que nous avons créé ce champ de localisation ? Eh bien, je vais juste aller dans ce dossier tout de suite. Maintenant, je suis dans ce répertoire sur notre ordinateur. Nous pouvons voir que Visual Studios a créé une série de dossiers et de fichiers pour nous. À l'intérieur, nous avons ce qu' on appelle un fichier de solution, et un autre dossier a été créé. Nous allons donc y aller. Cela a créé encore plus de fichiers. Celui-ci a notre propre code. Mais si nous regardons dans ce dossier bin ici, puis dans ce dossier de débogage juste ici, dans celui-ci, vous pouvez voir qu'il y a quelques fichiers juste au milieu C'est notre fichier binaire, et comme j'utilise Windows, il a créé un fichier EXE, Fas Si nous double-cliquons dessus, nous pouvons même l'envoyer à un ami, par exemple. Ils peuvent double-cliquer dessus. Lorsque vous le maximisez, vous pouvez voir le logo de Mr . Beast. Vous pouvez voir que c' est ainsi que tout est lié. Visual Studio dit au compilateur, oh hé, prendre tout le code, de créer un fichier EXE, Fas, et de le mettre dans ce dossier ici Tous les autres fichiers dont je parlerai plus tard. Mais dans un souci de simplicité, il crée rapidement notre fichier EXE, et c'est notre tout premier logiciel 5. 1-2. Variables: Maintenant, nous allons parler de introduction d' une variable très simple. Je vais vous montrer comment cela fonctionne, ce que sont les variables et comment elles peuvent bénéficier et des choses comme ça, les variables. Parlons de ce qu'ils sont. Pour commencer, nous avons un exemple d'application ici. Ça dit simplement « Bonjour tout le monde » devant une fenêtre noire. Et c'est tout ce qu'il fait, comme vous pouvez le voir ici. Je vais maintenant présenter ce que l'on appelle une variable et expliquer comment elle peut nous aider. Introduisons simplement une variable. Je peux en parler dans une seconde. Je vais appeler ça un test. Nous allons lui attribuer la valeur Hello world. Je vais juste mettre le nom de la variable ici. Parlons-en donc et de ce que cela fait. Donc, ce que je fais ici, j'initialise ce qu' on appelle une variable C'est maintenant la variable. Cela s'appelle test, c'est donc le nom de notre variable. Maintenant, cette variable peut être appelée comme bon vous semble. On pourrait l'appeler sandwich au jambon. Cela n'a pas vraiment d'importance. Mais le fait est que vous devez lui donner un nom où cela vous semble logique, vous pouvez vous y référer. Parce que lorsque vous avez une application logicielle contenant des milliers de variables, vous allez être très confus si vous les appelez tous différents types de sandwichs ou des noms aléatoires comme test ou quelque chose comme ça. Cela doit donc avoir du sens pour vous. Donc je vais juste l' appeler Hello World. C'est donc le nom de notre variable, c'est la valeur de notre variable. C'est donc ce que nous mettons dans notre variable ici. Maintenant, cette partie est ce qu'on appelle un type. Il s'agit maintenant d'une variable de chaîne. Ce qu'est une variable de chaîne, c'est un conteneur pour des mots, des phrases. Tu peux mettre un livre entier ici si tu le souhaites. Ce ne sont que des lettres et des chiffres alphanumériques , mais en tant que chaîne, ce ne sont pas des chiffres en eux-mêmes, ce n'est pas une valeur décimale, n'est pas une date ou une heure ou quoi que ce soit de compliqué comme ça C'est ce qu'est une chaîne. C'est ce qu'on appelle un type de variable. C'est le type de variable qui dit : « Hé, ordinateur, nous voulons créer une nouvelle variable et la mettre en mémoire ». Voici le nom de notre variable. Le signe égal est la façon dont nous l'initialisons, exemple en lui donnant une valeur Lorsque vous travaillez avec des chaînes, nous mettons toujours la valeur entre guillemets. Comme à l'intérieur des guillemets se trouve la valeur de notre variable. Nous terminons toujours chaque ligne par un point-virgule. Notre variable s'appelle maintenant Hello World. Exécutons le programme. Vous pouvez voir qu'il affiche Hello World dans la fenêtre. Il fait exactement la même chose qu'avant. Il fallait s'y attendre car nous n'avons rien changé. Nous venons de déclarer et d'initialiser une variable et nous l' affichons dans la fenêtre noire comme avant Exactement la même chose que nous faisons ici. Une chose est très rapide, avec les noms de variables, ce que je fais toujours est d'utiliser majuscules de titre avec un caractère inférieur au début. Maintenant, cela dépend de vous, mais en général, c'est ainsi que les gens ont tendance à utiliser les variables. Peut-être que lorsque vous travaillerez dans une entreprise à l'avenir, si c'est ce que vous voulez faire, d'autres personnes feront la même chose. Il est bon d'introduire de bonnes pratiques. Maintenant, c'est la seule raison pour laquelle je le fais. Ensuite, chaque mot suivant, bonjour tout le monde. Cela sera en majuscules. Si nous avons un autre mot ici, celui-ci commencera par une majuscule. C'est ce que l'on appelle des standards, c'est facultatif. Parlons de ce qu'est la déclaration et ce qu'est l'initialisation pour couvrir ces deux termes Je vais développer notre petit exemple ici. Je vais maintenant savoir comment tu es comme ça ? Ensuite, je vais réafficher la variable à l'écran. Ensuite, je vais lancer l'application. Vous pouvez donc voir ce qui se passe. Vous pouvez voir ici dans la fenêtre qu'il est écrit « Bonjour tout le monde ». Comment allez-vous ? Regardez comment cela fonctionne ? Vous pouvez le voir ici, nous avons défini notre variable, nous lui avons donné un type. Maintenant, nous ne donnons un type à la variable qu'une seule fois. Nous disons, oh, hé, ordinateur, c'est notre variable que je veux utiliser. C'est notre nouvelle variable, d'ailleurs, c'est une variable de chaîne. Maintenant, nous l'avons fait une fois. Nous n'avons plus besoin de dire à l'ordinateur que c'est une chaîne, l'ordinateur le sait déjà et s'en souvient. Maintenant, chaque fois que nous modifierons notre variable, lui donnerons une nouvelle valeur, nous allons simplement remplacer ce qui s'y trouve déjà Lorsque cette ligne arrivera, cette pièce sera remplacée par How are you ? Ensuite, nous le remettrons ici. Nous n'avons pas besoin de déclarer et initialiser notre variable sur une seule ligne Jetons un coup d'œil à cet exemple ici. Je pourrais également le faire. La même chose se produira. Ce que je fais ici, c'est déclarer notre variable, signifie « hé, ordinateur, je veux créer une nouvelle variable ». Je sais que ce sera une chaîne, mais je ne sais pas encore quelle sera la valeur. Je déciderai peut-être plus tard. Plus tard. OK, j'ai décidé quelle en serait la valeur. Ça va être Hello World. Ensuite, je veux l'afficher à l'écran. Ensuite, je le réinitialise ici et je l'affiche à l'écran Il s'agit d'une déclaration ou d'une déclaration de variable. Il s'agit d'une initialisation ou d'une affectation. Il y a des mots que vous allez entendre dans le futur si vous continuez à programmer avec C Sharp. Vous pouvez voir que nous le faisons sur deux lignes et que le résultat est exactement le même qu'avant, ce qui était normal. Une dernière chose, si nous déclarons une variable ici et que nous essayons générer sans l'initialiser ni l'assigner, cela va générer une erreur Nous pouvons voir cette ligne ondulée rouge. Lorsque nous passons notre souris sur la ligne rouge, nous avons une petite idée de l'origine du problème Et ça dit juste qu'il faut utiliser une variable non assignée, bonjour tout le monde. Cela nous indique quel est le problème. Chaque fois que nous avons une erreur, nous ne pouvons pas exécuter le programme car nous devons toujours corriger ces erreurs. C'est un point de vue très basique sur le fonctionnement des variables en do sharp. 6. 1-3. Types de données: Bien, parlons des types de données, de ce qu'ils sont, façon dont ils peuvent nous aider, des raisons pour lesquelles nous pouvons les utiliser, et de tout ce qui se trouve entre les deux. J'ai donc un exemple d' application ici. Cela ne fait pas grand-chose. Nous déclarons et initialisons deux variables de chaîne ici, et nous les affichons dans notre fenêtre noire Lorsque je lance l'application ici, il est simplement écrit « Sponge Bob square pants ». J'ai pensé à un exemple expliquant comment expliquer les types de données beaucoup plus facilement. J'ai trouvé un exemple. Avez-vous déjà joué à Top Trumps cartes Pokemon ou à de l'équipement ou quelque chose comme ça, où vous avez le nom du personnage, peut-être certains attributs tels que l' âge, le poids, la taille, la rareté, ou des choses Je pense que cela représenterait assez bien les types de données. Et aidez-moi à les expliquer pour que vous les compreniez beaucoup plus facilement. Imaginez une carte qui a un nom et qui pourrait avoir un âge. Par exemple, il s'agit de l' âge du personnage. Bob l'éponge fait maintenant partie de ces personnages qui transcendent tous les âges Je vais en mettre 21. Il s'agit d'une variable de type chaîne Il s'agit d'un type de données. Un autre type de données que nous pouvons utiliser est ce que l'on appelle un entier. Maintenant, ce qu' est un entier, c'est un nombre. Nous pouvons le survoler et Visual Studio nous donne plus d' informations à ce sujet Il représente un entier signé de 32 bits 32 bits signifient simplement la taille. La quantité d'informations que vous pouvez mettre ici. Je pense que c'est entre 2 milliards négatifs et 2 milliards positifs. Je pense que l'utilisation de l'âge correspond assez bien à cela, il ne comportera que 23 chiffres. Lorsque nous utilisons des variables de type entier, nous n'avons pas besoin de ces guillemets doubles comme sur les chaînes de caractères. Nous avons juste besoin d'un numéro ici. Un autre, peut-être le poids, et ce sera en livres. Peut-être que cette éponge pèse environ 120 livres, quelque chose comme ça. Encore une hauteur. Maintenant, la hauteur, nous allons la mettre en pieds et en pouces. Je vais le mettre en pieds et en pouces afin pouvoir vous montrer un nouveau type de données. C'est ce qu'on appelle un double. Maintenant, ce qu'est un double, c'est qu' il représente des nombres décimaux. Mettons de la hauteur ici. Disons que notre éponge mesure trois pieds, 4 pouces, par exemple. Quelque chose comme ça. C'est donc la hauteur de notre éponge. Si nous avons un surdouble ici, cela représente une virgule flottante à double précision. C'est très compliqué, n'est-ce pas ? Et c'est pourquoi les gens apprennent grâce à des tutoriels, un double représente une décimale C'est tout ce qui a un point décimal. Maintenant, les décimales Parlons très rapidement des décimales. En do dièse, nous pouvons représenter un nombre décimal de trois manières Un autre s'appelle un flotteur. Mettons les chiffres après cela. Lorsque vous utilisez une variable, elles doivent toutes avoir un nom unique. Faisons le décimal. C'est une autre façon de prendre des nombres décimaux. Voici les trois manières dont nous pouvons représenter les décimales en do dièse La principale différence réside dans la précision. Maintenant, float est, je crois, 32 bits. Il ne comporte que sept chiffres. Vous pouvez lui donner plus de sept chiffres, mais cela le coupera. Tronquez-le à sept heures. Vous perdez tout au bout de sept chiffres, ce qui représente toute cette précision ici. Maintenant un 64 bits. Un peu plus, je crois. 15 chiffres, 15 à 16 chiffres. C'est donc plus précis. Nous pouvons donc en mettre jusqu'à 15 ici. Par défaut, un double est utilisé lorsque vous utilisez des nombres décimaux en do dièse Quand je dis par défaut, je vais l' expliquer dans une seconde. Le dernier est décimal. Celui-ci est, je crois, 128 bits, plein de chiffres. Je crois que 28 chiffres, c'est assez long. Nous utilisons des décimales lorsque nous parlons de choses liées à l'argent Peut-être que si vous rédigez une demande pour gérer les impôts en tant qu'agence gouvernementale, par exemple, nous voulons nous assurer que tout le monde paie ses impôts bien au-delà de la virgule décimale Lorsque vous traitez avec de l'argent, il doit être vraiment très précis et c'est là que nous utiliserions une décimale Vous pouvez voir ici que lorsque j'initialise ce type de données flottant à hauteur variable, je mets un petit F à la fin ici Cela dit à C sharp. Hé, je veux initialiser une valeur flottante. Cela est dû au fait qu'il utilise le double par défaut. Vous pouvez voir que lorsque j' initialise un double, je n'ai pas besoin de mettre une lettre à la fin Chaque fois que je mets une valeur décimale ici, C sharp supposera que c'est un double Si je veux initialiser un flottant ici, je dois dire, oh, au fait, il s'agit d'un type de données flottant Parce que si je ne le fais pas, vous pouvez voir qu' il y a une ligne rouge. Je le survole. Il dit que le double de type littéral ne peut pas être implicitement compliqué, n'est-ce pas ? Il dit essentiellement d'utiliser un suffixe pour créer un littéral de ce type Il s'agit essentiellement de dire, hé, vous avez un type de données flottant, mettez un F à la fin et nous serons satisfaits. Pareil pour la décimale, je ne sais pas si vous n'utilisez pas un D ou quelque chose de plus descriptif, il est probablement utilisé par autre chose Celui-ci veut un M. Et de même, si nous ne mettons pas de M, cela vous indique de mettre un M. C'est pourquoi iDES est appelé IDE, comme Visual Studio, c'est vraiment bien. Il vous indique en fait ce qui vous manque et ce que vous devez faire. Si vous utilisez quelque chose comme le bloc-notes, il ne vous le dira pas Cela vous permet de programmer beaucoup plus rapidement. Voici donc les trois manières dont nous pouvons représenter nombres décimaux et nous allons simplement utiliser un double pour la hauteur La hauteur de notre éponge est de trois pointes, je ne sais pas, trois pieds, 4 pouces, quelque chose comme ça. Je pense que ce serait bien. Maintenant, le prochain que je veux présenter est un Bolen représenté par un bool C'est ce que pourrait être la réservation ? Notre carte à collectionner est-elle le premier ajout ? Je vais donc mettre son premier ajout. Je vais dire vrai. Bob l'éponge est une carte à collectionner très rare et c'est son premier ajout, donc ça va être vrai Désormais, les types de données booléens peuvent avoir la valeur true ou la valeur false Seule l'une de ces deux valeurs est vraie. Si c'est oui ou faux. Non C'est ainsi que nous utilisons les boolings en do dièse C'est vrai ou faux. Seulement deux objets de valeur. Si vous voulez une variable pouvant avoir trois ou quatre valeurs, n' utilisez pas de booling Les valeurs booléennes ne concernent que deux valeurs. Le dernier point dont je vais parler maintenant, c'est qu'il y a plein de types de données dans C Sharp Nous pouvons faire des dates, des heures, diverses choses compliquées comme des listes, etc. Mais pour être honnête, avec les chaînes, les entiers, les valeurs décimales comme les doubles booléens et les caractères, nous pouvons écrire ici à peu près n'importe quoi, nombreux logiciels avec uniquement ces types de Peut-être en parlerons-nous davantage à l'avenir. Le dernier dont je vais parler concerne les personnages représentés par Shah, ici. Pour cela, je vais l'appeler grade. La note de notre carte est-elle excellente ? Donc c'est peut-être un ou c'est mauvais ? Cela pourrait être un. Dans ce cas, une carte ordinaire peut être comme lorsque vous passez un examen. Notre note pourrait donc être quelque chose comme ça. Et c'est une très bonne carte. Sa qualité de première édition lui donne la note A. Lorsque vous initialisez des variables de caractère, nous utilisons des guillemets simples, et non des guillemets doubles ici Visual Studio fait du bon travail ici. Si vous oubliez les guillemets, cela vous indiquera probablement que vous en avez besoin ou vous donnera une erreur cryptique comme celle-ci Oui, maintenant nous avons déclaré et initialisé toutes nos variables avec leurs différents types Maintenant, je veux juste les afficher à l'écran. Vous pouvez voir qu'ils ont la ligne verte sous chacun d'eux en ce moment quand j'utilise l'âge ici. Regardez cette ligne verte disparaître avant l'âge, et c'est parce que nous l'utilisons maintenant. Je vais en mettre une pour chaque variable différente ici grâce à la puissance de l'édition. Nous pouvons voir ici que nous les affichons tous à l'écran si nous exécutons cette application Nous pouvons maintenant voir toutes nos différentes valeurs pour toutes nos différentes variables. Nous voyons le prénom, le nom de famille, l'âge, le poids, la taille. vrai parce que c'est une première édition et que c'est aussi une très bonne carte à collectionner. 7. 1-4. C # - Une langue fortement typée de manière statique: Je voudrais maintenant parler de deux choses concernant C Sharp, maintenant que nous comprenons ce que sont les types de données. Maintenant, C Sharp est ce qu'on appelle un langage fortement typé et aussi un langage typé statiquement Parlons de ce que sont ces deux termes. Un langage fortement typé, ce qui signifie qu'une fois que nous avons défini une variable appelée prénom et que nous lui avons donné la chaîne de type de données, elle doit être une chaîne pendant toute la durée de vie de l'application Nous ne pouvons pas, par exemple, prendre le prénom puis lui donner une valeur entière car cela ne lui plaira pas. C'est parce que c'est une langue fortement dactylographiée. Cependant, si vous utilisez un langage comme Python, par exemple, vous pouvez le faire, cela ne pose aucun problème. C'est parce que ce n'est pas une langue fortement dactylographiée. Dans ce cas, c'est ce qu'est un langage fortement typé. Une fois que vous avez défini une chaîne, vous lui avez donné un nom unique. Vous ne pouvez pas alors y introduire un autre type de données. Vous ne pouvez pas dire, oh, maintenant je veux dire que c'est vrai, par exemple, ça ne marchera pas. Cela va vous dire que c'est langage fortement typé tel que C Sharp, le dernier est ce que l'on appelle un langage à typage statique Si nous commettons une erreur avec l'un de ces types de données, par exemple, nous avons le prénom. Par conséquent, il attend une chaîne entre guillemets, comme ici, si nous lui donnons un entier, il va se plaindre. Il y aura une ligne rouge en dessous de quand. Chaque fois que nous avons une ligne rouge en dessous, quelque chose comme cette erreur ici, nous ne pouvons pas compiler l'application. Ce ne sont pas des lettres, ce n'est pas des lettres. Par exemple, si vous utilisez Windows, compilez votre code dans un fichier EXC et donnez-le à un ami pour qu'il l'exécute. Ça ne marchera pas. C'est parce que ces erreurs sont détectées au moment de la compilation. Et c'est ce qu'est un langage typé statiquement. Si nous commettons une telle erreur, nous ne la découvrirons pas ultérieurement lorsqu'un utilisateur utilisera le logiciel. C'est un avantage de C Sharp et de langages comme C plus plus, très similaires. Une fois que nous avons une chaîne de type de données, elle a besoin d'une valeur de chaîne. Ces erreurs seront détectées au moment de la compilation. C'est alors que nous appuyons sur ce petit bouton vert Play ici. C'est ce qu'est un langage fortement dactylographié. Et c'est aussi un langage à typage statique, C Sharp est à la fois un langage C Sharp est à la fois 8. 1-5. Travailler avec des chaînes et des substrats: Bien, voyons comment nous pouvons travailler avec certaines variables de type chaîne en C sharp. Nous avons ici un exemple d'application. Nous avons juste le prénom et le nom de famille, et nous les affichons tous les deux dans la fenêtre de notre console Maintenant, comment pouvons-nous réellement joindre deux chaînes ensemble ? J'ai un prénom variable, un nom de famille variable. À l'heure actuelle, il les place séparément sur deux lignes différentes. Mais comment puis-je les réunir ? Ce que nous pouvons faire ici, c'est ce que l' on appelle la concaténation de deux chaînes, et c'est juste une façon élégante de dire « joignez-les Concaténation, cela pourrait être comme concat en abrégé. Ce sont des mots que vous entendrez peut-être à l'avenir si vous poursuivez votre parcours en do sharp. Voyons comment joindre ces deux chaînes ensemble. Ce que je vais faire, c'est utiliser ce que l'on appelle un opérateur. Vous pouvez donc voir cet avantage ici. Et pour ce que cela fait, il prend juste ceci, cette ficelle et les unit . C'est très simple, n'est-ce pas ? Maintenant, nous lançons l'application. Nous pouvons voir que nous avons Bob l'éponge, pantalon carré sur une seule ligne. Mais vous pouvez voir qu'il n'y a pas d'espace blanc entre les deux. Voyons donc l'ajout de cela. Ce que nous pouvons faire ici, c'est ajouter une autre chaîne et utiliser le symbole plus. Encore une fois, ce que nous faisons ici, nous prenons la première variable, le prénom. Nous le concaténons, en le joignant à cet espace y vide, qui est également une chaîne Et puis en le joignant au nom de famille, qui est une variable ici. Maintenant, ce n'est pas une variable, nous n'avons pas besoin de variables ici. Nous pourrions facilement le faire, et c'est exactement pareil. De cette façon, nous n' utiliserons même pas cette variable, mais le résultat sera exactement le même. C'est ainsi que nous pouvons joindre deux chaînes ensemble. Pour que vous compreniez bien, nous pouvons même créer une variable ici et nous pouvons faire le prénom et le nom de famille. Ensuite, nous pouvons mettre le nom complet ici et nous aurons exactement le même résultat. N'oublions pas notre espace blanc ici. Cela semble présentable et nous allons lancer l'application Vous pouvez voir ici que nous avons exactement le même résultat. Nous utilisons simplement une variable appelée nom complet. Et il s' agit simplement de les additionner, les concatiner, d'un espace C'est ainsi que nous pouvons joindre deux chaînes ensemble, très simplement, des sous-chaînes. Qu'est-ce qu'une sous-chaîne ? Maintenant, une sous-chaîne n'est qu'une des nombreuses choses que vous pouvez faire avec des chaînes en do dièse Voici un exemple. Nous avons ici une variable appelée name. Il a une éponge Bob Square Pound qui définit la valeur. Et nous sommes en train de le mettre à l'écran maintenant, par exemple, disons que je veux extraire une certaine partie de cette chaîne. Je voudrais en extraire le mot éponge. Je ne veux pas le reste, je veux juste cette partie ici. Maintenant, ce que nous pouvons faire, c'est utiliser ce qu'on appelle une méthode de sous-chaîne pour extraire une partie de notre chaîne Et c'est ce qu'est une sous-chaîne. C'est une partie d'une chaîne. Je pourrais prendre ça, je pourrais prendre ça. Je pourrais prendre tout ce que je veux. Je pourrais même prendre une lettre si je le voulais. Voyons comment nous pouvons réellement utiliser une sous-chaîne. Ce que je vais faire, c'est extraire Sponge, la variable. Nous pouvons l'appeler comme nous voulons, appelons-le éponge. Pourquoi pas ? Nous voulons initialiser sponge afin d'utiliser notre signe égal. Lorsque nous travaillons avec une variable, nous pouvons mettre le nom de la variable ici, qui est le nom, dans ce cas, lorsque nous utilisons un point ou une fléchette, quel que soit le nom que vous voulez lui donner Ensuite, nous avons toutes ces différentes choses que nous pouvons en faire. Certains des plus courants sont toujours en haut avec cette étoile noire à côté d'eux. L'un d'eux est la sous-chaîne. Nous pouvons faire beaucoup de choses que nous pouvons remplacer. Nous pouvons réduire le nombre de caractères. Nous pouvons le partager, faire plein de choses différentes. C'est une sous-chaîne que nous voulons utiliser. Nous pouvons double-cliquer dessus lorsque nous ouvrons les parenthèses ici, nous avons quelques options que nous pouvons utiliser Maintenant, je parlerai de ce sujet beaucoup plus tard quand je parlerai de méthodes. Mais dans l'ensemble, je vais juste mettre deux choses ici. Et c'est ce que je veux faire ici. Maintenant, en do dièse, tout commence à zéro. L'indice est à zéro. Cette chaîne ici, ce caractère ici, c'est la position zéro. Le P est la position 123. Tout commence à zéro. N'oubliez pas qu'aller de l'avant, c'est position zéro du personnage de notre pantalon carré Bob en éponge à cordes. La première valeur ici est donc zéro car nous voulons commencer à la position zéro. Ensuite, la valeur suivante est nombre de lettres que vous souhaitez extraire de la chaîne sponge 12345. En fait, il y en a six. Nous voulons maintenant extraire les six premiers caractères éponge ici. Telles sont les valeurs que nous avons mises en avant ici. Maintenant, si cela vous prête à confusion, revenons à l'endroit où nous avons parlé de la ligne droite de la console. Nous avions la ligne droite de la console et nous avons ouvert les parenthèses ici Nous voulons placer notre variable dans la fenêtre noire. Maintenant, sous-chaîne, dans cet exemple, nous voulons lui donner deux valeurs Et lorsque nous lui donnons deux valeurs, nous les séparons par une virgule comme si nous voulions le premier caractère et nous voulions compter six caractères avant d' en extraire une éponge Maintenant, nous voulons mettre une éponge sur la fenêtre de notre console afin de pouvoir réellement voir le résultat. Compilons notre application. Nous pouvons le voir avec Output Sponge ici. C'est de cette façon très simpliste que fonctionne la sous-chaîne. Si nous voulons extraire, disons, Bob, par exemple, nous commençons par une position six et comptons trois caractères vers l'avant. Ensuite, nous pouvons voir que nous avons extrait Bob C'est ainsi que fonctionne une sous-chaîne Une autre chose que nous pouvons faire est ce que l'on appelle un remplacement. Nous avons un pantalon carré Bob en éponge ici. Supposons que nous voulions remplacer Bob l'éponge par autre chose, disons Patrick ou quelque chose comme ça. Créons une nouvelle variable. Nous l'appellerons Pat pour Patrick. Peu importe le nom que nous lui donnons. Nous travaillons ici avec notre chaîne de noms. Nous allons laisser ça. Lorsque nous appuyons à nouveau sur le point, nous obtenons toutes ces choses que nous pouvons faire et nous allons double-cliquer, remplacer par, remplacer. Nous pouvons remplacer n'importe quoi par n'importe quoi d'autre. Ce que je veux faire, c'est remplacer Sponge Bob. Je veux lui donner une nouvelle valeur, Patrick. Terminez toujours par un point-virgule. Cela va faire, c'est prendre le nom, tout ce qu'il contient, cela prend tout cela, nous voulons remplacer chaque occurrence par type Spongebob et le remplacer par Patrick Le résultat de cette opération est ensuite stocké dans Pat. Alors on pourra mettre Pat ici. Si nous lançons l'application, nous pouvons voir maintenant qu'il est écrit Patrick square pants. C'est parce que nous remplaçons chaque occurrence de Bob l' éponge par Patrick. Et quand je dis chaque occurrence, essayons ceci, lançons l'application. Il a remplacé chaque occurrence de Bob l'éponge par Patrick. C'est ainsi que fonctionne le remplacement dans C Sharp. Et encore une fois, il n'est pas nécessaire de stocker le résultat de ce calcul dans une toute nouvelle variable. Nous pouvons raccourcir cela, simplement le mettre là, et cela fonctionnera également très bien. Vous pouvez voir Patrick battre Patrick au carré. Patrick Patrick. Vous pouvez voir que c'est ainsi que fonctionne le remplacement lorsqu'il s'agit de chaînes. Une autre chose que nous pouvons faire avec les chaînes est de calculer la longueur de la chaîne. Celui-ci est très simple. Ici, j'ai une variable appelée example. C'est tout ce qu'il faut utiliser dans cette variable. Par exemple, je mets une petite fléchette par la suite et je tape la longueur pour accélérer le processus Vous pouvez double-cliquer dessus ou appuyer sur la touche Tab du clavier. Cela pourrait être beaucoup plus rapide pour vous de saisir ces valeurs à l'avenir lorsque je compilerai l'application. Maintenant, nous pouvons voir que cette phrase comporte 44 caractères. C'est très utile lorsque vous utilisez des sous-chaînes pour extraire certains éléments d'une sous-chaîne. Parlons d'une autre méthode appelée index of. Maintenant, si vous spécifiez un mot comme Sponge Bob, il vous indiquera l'index de sa position dans la chaîne. Plutôt que de compter 1-234-567-8910, position du caractère 22, par exemple, nous n'avons pas à compter, nous pouvons utiliser une méthode appelée index of Si je mets un index, je veux y mettre, par exemple, Sponge Bob. Ce sera entre guillemets, parce que Bob l'éponge est une chaîne, nous voulons en stocker le résultat. Maintenant, si nous survolons l'index de, vous pouvez voir ici à côté de ce cube rose, il est écrit t. Cela signifie que le résultat sera un entier. Définissez un nouvel entier Je l'appellerai simplement index. Ensuite, je vais afficher l'index dans la fenêtre. Faisons ça très vite. Vous pouvez voir que Bob l' éponge est apparemment un personnage en 22e position ici. Cela fait 22 caractères dans l'index de c'est une autre méthode très utile pour obtenir l'index du mot que vous souhaitez. Vous pourriez, par exemple, mettre quelque chose comme ça. Si nous l'exécutons, il obtient la première occurrence, dont celle-ci est ici, 012, c'est la première occurrence Encore une fois, il y a beaucoup de choses différentes que vous pouvez faire avec index of, mais c'est un exemple. 9. 1-6. Travailler avec des chiffres: Bien, regardons quelques exemples de travail avec des nombres en do dièse. Nous allons examiner la multiplication, l'addition, la soustraction, la division, toutes ces bonnes choses. Alors allons-y. Regardons un exemple d'addition. Alors, comment additionnons-nous des chiffres en termes nets. Nous avons un exemple d' application ici. Nous définissons simplement une variable, mettons à zéro et l'affichons à l'écran Il ne se passe donc pas grand-chose ici. Nous allons utiliser notre variable. Je vais juste faire cinq plus quatre, ce qui, nous le savons, est égal à neuf. Je vais juste lancer le programme et nous obtiendrons neuf en sortie. L'ajout est très simple, vous pouvez continuer avec cela, etc. Très facile Pareil pour la soustraction, nous pouvons à peu près faire la même chose Cinq moins six est égal à moins un. Vous pouvez également constater que la soustraction est très facile. Encore une fois, vous pouvez le faire, mélangez les deux. Cela n'a pas vraiment d'importance. Cela s'arrangera pour vous. Multiplication. Faisons trois multiplié par quatre pour multiplier les nombres en do dièse. Utilisez cet astérisque ici, la petite étoile, et nous devrions en obtenir 12. Là encore, on peut combiner la multiplication avec l' addition et la soustraction, comme on le fait en mathématiques par exemple Maintenant, c'est là qu'il y a quelques pièges. Avec la division, le signe de division est un avant, faisons-le facilement 13/3 Exécutons l'application en est un Parce qu'il y en a un, il y en a 13,3. Le résultat est un. Cependant, c'est ainsi que nous divisons les nombres. D'accord ? J'ai compris. Le numéro un est divisé par zéro. On ne peut pas vraiment diviser par zéro. Vous pouvez vraiment le voir maintenant. Quoi qu'il en soit, il y a quelques années, si vous en faisiez trois par zéro, vous pouviez lancer l'application et vous obteniez une erreur. Comme il ne s'agit pas d'un calcul réaliste, il ne peut pas fonctionner. Maintenant, nous avons une ligne rouge en dessous, et lorsque nous la survolons, elle indique division par zéro constant Cela ne nous permettra pas d'exécuter notre programme, mais comme le résultat de la variable est nul, introduisons-le et exécutons le programme. Et encore une fois, il se trompe comme il se doit. La première erreur que nous avons détectée au moment de la compilation lorsque nous essayons d'exécuter l'application, parce que nous utilisons zéro ici, nous indique que nous n'avons pas pu exécuter l'application. Mais lorsque je lui ai donné une variable qui est le résultat, qui est également égale à zéro, nous pouvons la tromper pour exécuter le programme, mais nous obtenons toujours cette erreur de tentative de division par zéro, ce que nous ne pouvons pas faire. C'est donc quelque chose que vous devez toujours garder à l'esprit lorsque vous travaillez avec une division. Il ne faut jamais diviser par zéro. Lorsque nous parlerons des instructions if à l'avenir, je vais vous montrer comment protéger votre programme pour éviter de diviser par zéro L'autre problème en matière de division est l'utilisation de nombres décimaux Regardons un exemple de nombre décimal. Nous allons utiliser un type de données double ici, et nous allons simplement l' initialiser à zéro Maintenant, prenons juste un exemple. Faisons 3.45 0.6, ce qui devrait fonctionner correctement. Vous pouvez le voir ici, voici le résultat au format décimal Cependant, si nous disons 200/3, il ne s'agit pas d'un nombre entier, il comportera une décimale Cependant, lorsque nous exécutons l'application, vous pouvez voir qu'elle est en train de faire quelques arrondis ici Je crois que c'est le nombre entier le plus proche , 66. Cependant, si nous ajoutons 0,0 à la fin de celles-ci et que nous exécutons l'application, vous pouvez voir que c'est la vraie réponse ici, 66 666 récurrents Ensuite, on arrondit à sept. C'est une chose à laquelle vous devez faire attention lorsque vous travaillez avec des nombres décimaux. C sharp fera une hypothèse car si vous avez deux nombres ici, 200 est un entier, trois est un entier. Aucune de ces décimales, seul le résultat est Ce que fait C sharp, c'est dire, oh, hé, il y a un entier ici. Oh, salut, il y a un entier ici. Je vais vous donner le résultat sous forme d'entier. C'est un peu embêtant. Ce que vous devez faire, c'est remplacer au moins l'un d'entre eux par un nombre décimal Lorsque vous faites cela, vous pouvez voir que nous obtenons le vrai résultat ici. C'est juste quelque chose que vous devez vraiment garder à l'esprit lorsque vous travaillez avec la division de nombres décimaux. Le prochain opérateur que je vais vous montrer est l'opérateur du module Remettons-le simplement sous forme de nombre entier. Maintenant, ce que fait l'opérateur de module, il vous donne le reste du calcul Permettez-moi de vous donner un exemple très rapidement. Le module est représenté par un point de pourcentage. Ici, qu'est-ce que ça fait, ça dit, combien de fois trois font six ? Eh bien, trois passent deux fois en six , puis il n'y a plus de reste. Le résultat sera nul car c'est le reste. Encore une fois, si je fais 22 fois 63 fois, parfaitement encore une fois, il n'y a pas de reste. Cependant, si j'en mets quatre ici, quatre se transforment en six une fois. Cependant, il en reste deux, donc ce sera le résultat deux. Ce que fait le module, il vous donne le reste du calcul Après avoir divisé celui-ci en celui-ci, 14 passe en six une fois avec le reste de deux. Si je lance l' application, nous en obtenons deux, comme dans le tout premier exemple, trois se transforment en six deux fois et il n'y a pas de reste, le résultat devrait être zéro. module est très utile lorsque nous voulons savoir si un nombre correspond exactement à un autre nombre Si le résultat est zéro, nous savons qu'il est parfaitement divisible par ce nombre C'est ce qu'est le modulus, ou modulo comme vous voulez l'appeler Et c'est représenté par un pourcentage unique, juste comme ça. Je voudrais maintenant parler de l'ordre des opérations lorsque l' on travaille avec la multiplication, addition, la soustraction, toutes ces bonnes choses. Permettez-moi de vous montrer un exemple. J'ai le résultat, qui est notre variable cinq multipliée par quatre -2/7. Je veux ajouter le résultat de cinq plus Jetons un coup d' œil à cet exemple. Si vous avez fait beaucoup de mathématiques par le passé, vous pouvez peut-être sauter cette section. C'est peut-être évident pour vous, mais le C sharp fonctionne à peu près de la même manière que les mathématiques dans le monde réel. Si vous avez déjà vu ces choses sur Facebook ou Instagram et qu'ils vous demandent, oh, quelle est la réponse à cela ? Et les gens donnent toutes les mauvaises réponses parce qu'ils ne comprennent pas l'ordre des opérations. Nous avons ici cette chose en mathématiques appelée masse des enchères ou Bodmass Laissez-moi vous le montrer maintenant. Enchérissez la masse, certains l'appellent Bodmass. Cela n'a pas vraiment d'importance. La seule différence est le I ici et le o ici. Mais ils veulent dire la même chose. Donc, la première chose, ce sont les crochets. Si nous avons un calcul comme celui-ci, tout ce qui se trouve entre crochets se produit en premier. Cinq plus un. Cela se produit en premier, soit six. Ensuite, nous pouvons le supprimer et il sera remplacé par six. La prochaine chose qui se produit est le I ou le o correspondant à la puissance de, ou à la racine carrée de. Nous n'avons rien de tout cela ici, donc nous pouvons ignorer cela. La prochaine étape est la division. La division se fait ensuite, et c'est 2/7. Maintenant, je ne sais pas ce qu'est 2/7, c'est un nombre décimal, mais c' est ce qui se produira Ce calcul est ici. La prochaine chose qui se produit, c'est la multiplication. Ici, cela sera calculé par cinq multiplié par quatre, soit 20. Ensuite, toute addition ultérieure sera additionnée à six, suivie d' une soustraction. La toute dernière chose qui se passe est celle-ci ici C'est l'ordre dans lequel cela est calculé. Cela ne se fait pas de gauche à droite. Cinq fois quatre, deux à emporter. Cela se passe toujours dans l'ordre des symboles, tout comme les mathématiques. Par exemple, si nous exécutons le programme, eh bien, tout peut être réglé. Pour nous, le résultat est 26. C'est l'ordre des opérations. Quelque chose à garder à l'esprit lorsque vous travaillez avec cela en do dièse. La dernière chose dont je vais parler à propos du travail avec les nombres, c'est deux puissance deux, soit quatre. Si vous n'êtes pas très familier avec les mathématiques, la puissance de simplement signifie le nombre de fois où elle est multipliée par elle-même. Deux fois la puissance deux revient à dire que deux multiplié par 22 à la puissance trois signifie essentiellement deux fois 22 multiplié par deux multiplié par deux. Encore une fois, c'est le pouvoir de. Si je vous montre le pouvoir de, c'est parce que le pouvoir de n'a pas symbole comme la multiplication ou la soustraction, nous devons utiliser ce que l' on appelle l'espace de noms mathématiques Maintenant, regardons ça. Maintenant, si je dis résultat, qui est la variable que nous avons définie ici, alors je dis mathématiques MAT H avec un M majuscule. Lorsque j'appuie sur le symbole point ici, nous pouvons faire plein de choses différentes. Tous ces éléments sont intégrés dans notre bibliothèque C sharp ici, et nous pouvons utiliser n'importe lequel d'entre eux. Regardez, le panneau, les voitures, le bronzage, le tronqué, le logarithme, tous ces trucs fantaisistes. Mais ce que je vais juste utiliser, c'est le pouvoir , représenté par POW. Si nous ouvrons les crochets ici, cela signifie que nous demandons notre premier chiffre ici, il indique qu'un nombre à virgule flottante à double précision doit être élevé à une puissance. Imaginons que nous voulions voir deux à la puissance de deux. Il demande un double, qui est un nombre décimal Je vais mettre 2.0 parce qu'il le veut au format décimal Je veux le porter à nouveau à la puissance de deux, terminer par un point-virgule. Deux à la puissance de deux, c'est dire deux, multipliez par deux. La réponse devrait être quatre. Vous pouvez voir ici que la réponse est quatre. Si nous voulons faire deux à la puissance de trois, cela devrait être huit. Vous pouvez voir où cela va, 163264128. Voilà. C'est ainsi que l'on utilise le pouvoir de, mais pas seulement le pouvoir de. Vous pouvez réellement utiliser beaucoup de choses dans ce cours de mathématiques ici, toutes différentes choses ici. Mais c'est un exemple de la façon d'utiliser le pouvoir des chiffres et de travailler avec eux dans un magasin. 10. 1-7. Obtenir une entrée utilisateur: Jetons un coup d'œil à l' interaction avec notre logiciel. la plupart des cas, lorsque nous exécutons notre application, jusqu'à présent, nous ne pouvons voir que les résultats à l'écran. Mais maintenant, je veux que tu interagisses avec ton logiciel. Vous pouvez lui donner quelques informations. Voyons , par exemple, comment procéder avec une application console. heure actuelle, nous avons un exemple d'application Il s'agit simplement d'imprimer votre nom à l'écran. Quand je lance ça, ça dit juste comment tu t'appelles ? Je veux pouvoir taper mon nom ici, par exemple, Robert. Et puis quand j'appuie sur Entrée, je veux qu'il dise bonjour Robert, par exemple. Quelque chose comme ça. Nous pouvons utiliser la ligne de lecture ici. Jusqu'à présent, nous n'avons utilisé cette ligne que pour arrêter l'application, afin que notre fenêtre ne se ferme pas sur nous. Parce que n'oubliez pas que sans cela, la fenêtre disparaît instantanément. Cependant, il a une fonction, celle de la ligne de lecture. Il capte en fait certaines contributions de notre part. Que se passera-t-il si nous le survolons ? Il vous indique en fait qu'il lit la ligne de caractères suivante dans le flux d'entrée standard. assez compliqué, n' est-ce pas ? Cela capture essentiellement notre saisie lorsque nous appuyons sur la touche Entrée du clavier. Le résultat peut être stocké dans une chaîne. Si nous en discutons, vous pouvez voir la chaîne ici. C'est ce qui nous revient. Nous pouvons définir une nouvelle variable. Nous l'appellerons résultat. Nous pourrions appeler cela une entrée utilisateur. Nous pouvons l'appeler comme bon nous semble. Ce que nous faisons maintenant, nous obtenons le résultat de cette opération qui est une ligne de lecture qui saisit tout ce que nous y saisissons après avoir appuyé sur Entrée et le stocke dans cette variable ici Alors ce que je veux faire, c'est dire bonjour, quel que soit le nom que tu auras mis ici. N'oubliez pas comment concaténer des chaînes. Nous avons notre première chaîne ici, bonjour. Les chaînes sont placées entre guillemets. Ensuite, nous voulons joindre une chaîne avec le résultat de cette opération, qui est également une chaîne. C'est ce que nous allons faire là-bas. Nous voulons avoir l'air vraiment enthousiastes. Nous allons également faire un point d'exclamation. Nous joignons trois cordes. Bonjour, le point d' exclamation et le résultat, qui est une variable de chaîne à partir du résultat de la saisie utilisateur Exécutons cette application. Maintenant, il est demandé quel est ton nom ? Je vais mettre Robert. Lorsque j'appuie sur Entrée, nous n'avons rien parce que nous ne lui avons pas dit de garder la fenêtre de la console ouverte. Remettons-le là encore une fois. Appuyez sur le bouton Play, tapez notre nom, Hit, et maintenant il dit bonjour Robert. C'est assez facile, n'est-ce pas ? Voilà comment capturer les entrées des utilisateurs dans une application console. 11. 1-8. EXERCICE - Le jeu du multiplicateur de nombres: Bien, regardons un exemple rapide maintenant. Une petite application pratique pour tester vos connaissances sur le travail avec les nombres en C Sharp. Je vais également tester certaines des connaissances que vous avez apprises jusqu'à présent. Et je vais présenter le concept de conversion de types de données, de conversion d'une chaîne en un entier. Jetons un coup d'œil à cela maintenant. Donc, ce que nous allons faire, c'est créer un exemple de calculateur, mais notre calculatrice ne fera que multiplier deux nombres ensemble. Ce n'est pas une calculatrice très sophistiquée. Commençons par là. Nous allons vous souhaiter la bienvenue sur notre numéro de téléphone. Nous voulons dire à l' utilisateur de quoi il s'agit. Nous allons dire, oh, hé, bienvenue sur notre multiplicateur numérique. Ensuite, nous allons leur demander leur premier numéro. C'est le premier chiffre, ils vont être multipliés par un autre. Quel est ton premier chiffre ? Nous demandons à l'utilisateur quel est son premier numéro. Pour recueillir les informations des utilisateurs, nous utilisons la ligne de lecture de la console. Ensuite, nous devons stocker le résultat dans une variable, nous appellerons ce premier numéro. Désormais, le premier numéro contiendra le premier numéro de l'utilisateur. Maintenant, vous voyez immédiatement cette ligne rouge sous la ligne de lecture de la console. Si nous passons notre souris dessus, nous pouvons voir qu'il n'est pas possible de convertir implicitement une chaîne de caractères en Cela signifie que, d'accord, regardez, la ligne de lecture vous donne une chaîne parce que nous demandons l'entrée de l'utilisateur. Et ils pouvaient écrire une phrase, ils pouvaient mettre beaucoup de lettres. En gros, nous ne savons pas ce que l'utilisateur va mettre ici, mais nous voulons en fait un entier à partir de cela. L'utilisateur peut taper hello et nous essayons de mettre hello dans un entier, il va donc y avoir un problème. Ce que nous voulons faire, c'est utiliser la bibliothèque de conversion. d'autres termes, si vous tapez convertir en C majuscule, appuyez sur point, avons-nous beaucoup d'options que nous pouvons faire ici ? Que fait un converti ? Cela nous donne de nombreuses méthodes différentes pour convertir les types de données. Ce que nous voulons faire, c'est convertir une chaîne parce que c'est l'entrée de l'utilisateur. Nous voulons le résultat sous la forme d'un entier, qui sera notre premier nombre. Quand j'appuie ici, ce que je veux, c'est deux int int 32. Je ne l'ai peut-être pas encore expliqué, mais un INT standard est également considéré comme un int 32. Il s'agit d'un entier de 32 bits. Vous pouvez avoir un entier plus long qui prend en charge plus grand nombre de chiffres ou même un entier plus petit. Int 32 est un entier standard en C Sharp. Lorsque j'ouvre des parenthèses à ce sujet, cela demande une valeur de chaîne s'agit de la chaîne qu'il va convertir en entier et de notre valeur de chaîne, eh bien c'est le résultat de la saisie par l'utilisateur. C'est la ligne rouge de la console. Nous allons le mettre là. Nous allons fermer nos crochets et mettre un deux-points sami Maintenant, vous pouvez voir que la ligne rouge a disparu. De même, vous pouvez simplement en stocker le résultat dans une nouvelle variable, une variable de chaîne, et le mettre ici. Cela n'a pas vraiment d'importance, mais nous faisons tout sur une seule ligne. Maintenant, ce que nous voulons faire ensuite, c'est saisir le deuxième numéro de l' utilisateur, le deuxième numéro. Il s'agira d'une nouvelle variable appelée second nombre. Nous voulons demander à l'utilisateur quel est son deuxième numéro. Nous avons maintenant le premier numéro de l'utilisateur dans cette variable entière ici, et le deuxième numéro de l'utilisateur ici. Maintenant, nous voulons le résultat, qui sera le résultat du calcul du premier chiffre, souvenez-vous que la multiplication est le deuxième point-virgule en astérisque Ensuite, nous voulons dire à l'utilisateur quel est le résultat. C'est ce que nous allons faire. Nous allons dire que le résultat est, puis nous allons concaténer chaînes ensemble, ce qui est le Ensuite, nous voulons que la fenêtre ne se ferme pas. Lancez l'application ici. Regardez, bienvenue sur notre multiplicateur de nombres. Quel est ton premier chiffre ? Pourquoi pas le numéro quatre ? Quel est ton deuxième chiffre ? Que diriez-vous du numéro cinq ? Et cela devrait être égal à 20. Il dit que le résultat est 20. Plutôt cool, n'est-ce pas ? Encore une fois, nous pouvons utiliser différents nombres, mais c'est une vision très simpliste de la façon dont nous pouvons obtenir les entrées des utilisateurs à l' aide de la ligne de lecture de la console, façon dont nous pouvons convertir les types de données Nous convertissons donc une chaîne qui est l'entrée de l'utilisateur, un entier qui est notre variable ici. Ensuite, lorsque nous multiplions nos nombres entiers ensemble, nous obtenons le résultat et nous le communiquons simplement à l'utilisateur C'est une façon très simpliste de travailler avec les nombres dans C. Sharp. 12. 2-1. Méthodes: Maintenant, je veux parler des méthodes dans Sharp. Nous avons en fait utilisé de nombreuses méthodes jusqu'à présent. Par exemple, la ligne droite est une méthode, la ligne de lecture est une méthode aussi puissante que l' assistant mathématique était une méthode Nous allons maintenant créer notre propre méthode. Lorsque vous créez des méthodes dans C Sharp, elles ont toutes un but. Si vous avez un travail qui est généralement effectué plus d'une fois ou un travail compliqué, vous pouvez le définir selon une méthode distincte. Quand je parle de méthode, voici un exemple de méthode. Il s'agit de la méthode principale. Tout ce qui se trouve dans cette méthode se trouve dans ces bretelles bouclées Ici, la méthode principale est une méthode spéciale lorsque notre logiciel est exécuté par défaut. Le .NET Framework, sur lequel repose C Sharp, recherche une méthode spéciale appelée main, et elle doit porter ce nom Et tous les noms de méthodes sont uniques, ils ne peuvent donc pas avoir le même nom, tout comme les variables. Une fois la méthode principale trouvée, elle exécute tout le code contenu dans ces deux bretelles Ici, le seul code que nous avons est constitué de deux lignes. Lorsque nous exécutons l'application, nous pouvons voir Hello World. Et la ligne suivante nous permet de garder cette fenêtre ouverte. Voyons maintenant créer une toute nouvelle méthode où il est écrit static void. J'aborderai cela dans un prochain tutoriel. Pour l'instant, restons très simples. Après avoir écrit static void. Dans ce cas, nous voulons donner un nom à la méthode. Maintenant, souvenez-vous que j'ai dit que les méthodes devaient avoir pour but de garder les choses organisées. En général, ils doivent avoir un but. Notre nouvelle méthode, ce que je veux qu'elle fasse, son but, son travail, c'est de dire bonjour à l'utilisateur. C'est la seule chose qu'il va faire. Maintenant, je sais que c'est sa fonction, ce qu'il vise à faire. Je peux appeler ma méthode avec un nom qui donne du sens aux mots. Je vais l'appeler, dire bonjour à tout le monde. Ce sera le nom de notre méthode. Maintenant, la section suivante est consacrée à ce que l'on appelle les paramètres. J'en parlerai plus tard. Je vais rester simple pour le moment. Faites une parenthèse ouverte et une parenthèse fermée. Ensuite, ouvrez la courroie et fermez la courroie. Juste comme ça, vous pouvez voir qu'il peut imiter cela. Tout le code de notre méthode se trouvera ici dans cette section surlignée entre celle-ci et celle-ci. Toutes les fonctionnalités de cette méthode se trouvent ici. Nous voulons dire bonjour à l'utilisateur. Eh bien, nous savons comment faire, nous en avons déjà parlé. C'est cette ligne de code ici. Notre méthode dit bonjour à tout le monde. Son travail consiste à dire bonjour à tout le monde. Cela va donc facilement l'imprimer sur la fenêtre noire. heure actuelle, lorsque nous exécutons notre logiciel , il ne va vraiment rien faire. Pourquoi ça ? C'est parce que la méthode principale est exécutée par défaut. Donc, cette section est là, et c'est la seule chose qui sera exécutée à partir de notre méthode principale. Nous n'en savons rien. Ce que nous devons faire ici, c'est dire, oh, hé, pouvez-vous exécuter notre méthode pour exécuter notre méthode ? C'est ce que nous faisons. Lorsque nous lançons l'application, la méthode principale est exécutée. Elle descend, cette ligne est exécutée. Lorsque cette ligne est exécutée, le code entre ici. Cette ligne est exécutée. La méthode a terminé son travail. Il revient ici, puis se termine par cette section ici. Lorsque vous avez une méthode, elle disparaît, puis réapparaît et continue. Si nous exécutons l'application, nous pouvons maintenant voir Hello world. C'est parce que nous appelons maintenant notre méthode. Juste pour récapituler, si je suis allé trop vite ou c'est compliqué sans cette ligne, notre méthode ne sera jamais exécutée Lorsque nous exécutons notre logiciel, nous pouvons en créer un grand nombre. 3 000 5 000 1 000 Encore une fois, ils doivent tous avoir un nom unique. Mais lorsque nous exécutons le logiciel, rien de tout cela ne sera exécuté. Et c'est parce que nous ne disons pas réellement à l'ordinateur de les exécuter pour exécuter une méthode. Encore une fois, nous recommençons si nous voulons exécuter cette méthode, très similaire, etc. Voici comment exécuter la méthode, voici comment définir la méthode. Et c'est une vision très simpliste de la façon dont nous pouvons configurer une méthode très simple en do dièse 13. 2-2. Paramètres de méthode: Maintenant, je veux parler des paramètres de méthode. Un paramètre n'est qu' une façon sophistiquée de donner des informations à une méthode. Voilà. Voici quelques informations. Travaille avec. Nous allons utiliser un exemple. Voici un exemple. Nous disons simplement bonjour à l'utilisateur. C'est très simple. Mais que se passerait-il si nous voulions que cette méthode dise bonjour John, bonjour Harry ou bonjour Roberto ? Ces noms sont des informations que l'utilisateur peut nous fournir. Voici un exemple. Nous allons poser une question à l'utilisateur. Nous allons vous demander quel est votre nom ? Quel est ton nom ? Ensuite, nous voulons obtenir l'entrée de l'utilisateur, qui est la ligne de lecture par points de console. C'est ainsi que nous obtenons les informations de l'utilisateur. Et nous l'enregistrons dans une chaîne. Je vais juste l'appeler par son nom, demandant le nom de l'utilisateur. L'utilisateur saisit des informations et nous les insérons dans une variable appelée nom Maintenant, notre méthode ici, je veux dire bonjour, puis je veux qu'elle indique le résultat de cette variable, qui sera le nom de l'utilisateur. Nous ne savons pas ce que c'est. L'utilisateur peut taper ce qu'il veut. Maintenant, le rôle de cette méthode est modifié. Je ne veux pas qu'il dise bonjour à tout le monde. Je veux qu'il dise bonjour à l'utilisateur. Maintenant, je vais dire bonjour utilisateur. Son travail a changé lorsque j'ai appelé la méthode. Encore une fois, nous devons nous assurer que cela correspond ici. Il ne s'agit plus de dire bonjour à tout le monde. Je veux qu'il dise bonjour au nom de l'utilisateur. C'est notre variable appelée name. Cependant, regardez, vous pouvez voir qu'il y a une ligne rouge en dessous. Et c'est parce que notre méthode ici est isolée de cette méthode. Il ne connaît pas cette variable parce qu'elle a été définie dans cette méthode, cette méthode, il ne le sait pas vraiment. C'est ainsi que nous pouvons utiliser les paramètres pour résoudre ce problème. Ce qu'est un paramètre, nous pouvons les définir entre ces crochets. Ici, nous allons taper le nom de la chaîne. Maintenant, vous pouvez voir que cette ligne rouge a disparu. Chaque paramètre que vous mettez dans une méthode ici se trouve entre ces crochets ouverts, vous pouvez voir cette méthode principale. Maintenant, cette section, ici, n'a qu'un seul paramètre, elle en a toujours eu un. Encore une fois, lorsque nous définissons une méthode ici, nous pouvons ajouter nos propres paramètres. J'ai ajouté ce qu'on appelle un paramètre et ça s'appelle name, c'est une chaîne de caractères. Maintenant, dans cette méthode, nous utilisons cette variable, ce paramètre, lorsque nous appelons notre méthode depuis la méthode principale. Vous pouvez maintenant voir qu'il y a une ligne rouge ici. Lorsque nous le survolons avec notre souris, vous pouvez voir qu' il n' y a aucun argument Maintenant, argument est synonyme de paramètre. C' est pareil. Aucun paramètre ne correspond au nom du paramètre requis. Cela signifie essentiellement que cette méthode a maintenant besoin d'une chaîne. On ne peut plus l'appeler comme ça. Ce que nous faisons, nous prenons notre variable de nom, qui est le résultat de l'entrée de l'utilisateur, et nous l'y mettons. Et maintenant, vous pouvez voir que nous collectons les informations de l' utilisateur. Nous communiquons les informations de cet utilisateur à notre nouvelle méthode appelée say, hello user. Nous lui donnons donc le nom de l'utilisateur. Ensuite, le code entre ici. Le nom est désormais égal à la valeur qui lui est transmise. Et c'est notre paramètre. Nous utilisons maintenant notre paramètre en le sortant dans la fenêtre noire Ensuite, l'exécution du code revient. Ensuite, nous laissons à nouveau la fenêtre ouverte, juste pour éviter toute confusion. On pourrait appeler ça comme on veut. Nous pourrions dire le nom de l'utilisateur. On pourrait appeler ça un sandwich au jambon. Ça n'a pas d'importance. Vous pouvez voir la ligne rouge ici, car elle doit être identique. Mais vous pouvez voir ici qu'il n'y a pas de ligne rouge. Et c'est parce que nous le définissons ici même. Même si la valeur entre dans la méthode ici, lorsque nous arrivons ici, nous pouvons l'appeler comme nous voulons. Il aura toujours cette valeur, mais il n'est pas nécessaire que ce soit le même nom, comme celui-ci. Il n'est pas nécessaire que ce soit comme ça avec exactement le même nom. C'est possible, mais ce n'est pas obligatoire. C'est quelque chose que vous devez garder à l'esprit. Lorsque le paramètre est transmis, la valeur est transmise, cela redéfinit une toute nouvelle variable ici Mais avec cette valeur, j'espère que cela aura du sens lorsque nous exécuterons l'application. Maintenant, nous demandons : quel est votre nom ? Roberto. Maintenant, vous pouvez voir qu'il est écrit « Bonjour Roberto ». Nous pouvons l'exécuter à nouveau. Nous pouvons dire bonjour Henry. C'est ainsi que les paramètres fonctionnent dans une vue très simple. Une dernière chose, nous n'avons pas besoin d' un seul paramètre. Nous pouvons en avoir beaucoup. Nous pourrions en avoir un autre d' un type différent, comme l'âge, qui est un entier. Maintenant, je veux demander l'âge de l'utilisateur. Quel âge avez-vous ? N'oubliez pas que l'âge est un entier parce que c'est un nombre. J'appellerai juste ça l'âge. Nous avons maintenant la ligne rouge parce que cela donne une chaîne et que nous voulons la mettre dans un entier, ce qui ne fonctionnera pas, mais nous en avons déjà parlé. Nous allons utiliser, nous voulons le convertir en un entier 32 bits , puis mettre le tout entre parenthèses Nous avons maintenant converti la chaîne de caractères de l'utilisateur en un entier. Nous le mettons dans une variable entière appelée age. Maintenant, nous avons à nouveau notre ligne rouge, car nous avons deux paramètres sur notre méthode. Maintenant, nommez un âge. Lorsque nous survolons cette ligne rouge, vous pouvez voir qu'elle nécessite désormais une chaîne et un entier Lorsque nous appelons cette méthode, nous devons ajouter ces informations ici, et nous pouvons utiliser une virgule Maintenant, il nous demande même, il nous dit même ce dont nous avons besoin. L'âge, on prend notre âge, on le met ici. Nous avons maintenant une méthode à deux paramètres. Et nous lui transmettons deux paramètres. Nous n'en faisons rien pour le moment. Faisons-en quelque chose. Nous allons dire que l'âge c'est l'âge maintenant lorsque nous exécutons le logiciel. C'est ce que nous allons faire. Quel est ton nom ? Harry. Quel âge avez-vous ? J'ai 67 ans. Bonjour Harry. Ton âge est de 67 ans. Encore une fois, nous pouvons avoir dix paramètres si nous le voulons. Nous pourrions avoir différents types de données dans B, toutes sortes de choses différentes. Encore une fois, si vous voulez en ajouter d'autres, il ne s'agit que d'une autre question et de la façon dont vous les transmettez. Encore une fois, vous utilisez A ici. C'est ainsi que les paramètres fonctionnent généralement avec les méthodes de C. Sharp. 14. 2-3. Retours de méthode: Parlons de la récupération d'informations à partir d'une méthode. Pour ce faire, nous utilisons le mot clé return. Voyons comment renvoyer des informations à partir d'une méthode. Nous avons un exemple d' application ici. Il demande le nom de l'utilisateur. Il stocke le nom de l'utilisateur dans une variable, puis il dit bonjour à l'utilisateur. Ce que je veux faire maintenant, c'est créer une méthode dont le travail consiste à demander le nom de l'utilisateur, à obtenir le nom de l'utilisateur et à nous le rendre. C'est ce que nous voulons faire. Maintenant, pour ce faire, nous allons créer une nouvelle méthode. Le moyen le plus simple est de copier celui-ci, de tout supprimer et de lui donner un nom unique. Son travail consiste à demander le nom d'un utilisateur. Nous savons comment faire. Nous l'avons ici. Nous demandons le nom de l'utilisateur et nous le stockons dans une variable ici. Lorsque nous avons déjà parlé de paramètres, c'est ainsi que l'on peut intégrer des informations dans une méthode. Nous les définissons ici et nous transmettons les informations depuis le principal. Cependant, c' est ce que nous étudions actuellement, et c'est ce que l'on appelle le mot clé return. Nous renvoyons des informations par le biais d'une méthode, afin de pouvoir les utiliser ici. Lorsque nous lançons notre application, nous allons demander le nom d'un utilisateur. Nous obtenons le nom de l'utilisateur, nous le mettons dans la variable. Maintenant, nous devons renvoyer le nom de l' utilisateur et lui dire bonjour. le moment, nous ne pouvons pas le faire parce qu'il ne comprend pas ce que signifie cette variable, car elle est définie dans notre méthode. Nous devons donc sortir cela d'ici et le définir ici. Pour ce faire, nous avons configuré ce que l' on appelle un type de données de retour par défaut. Ici, vous pouvez voir qu'il y en a un sur l'événement principal et un ici. C'est ce qu'on appelle le vide. Le vide est comme un trou noir. C'est comme le néant. Ce n'est rien. Mais ce que nous voulons faire, c'est renvoyer notre variable de chaîne ici, en dehors de la méthode. Nous remplaçons notre vide du néant par de la ficelle. Nous avons maintenant configuré un type de données de retour pour cette méthode, une chaîne, et nous voulons renvoyer cette variable ici. Ce que nous faisons, nous prenons notre variable, nous utilisons le mot-clé return. Nous saisissons un espace blanc, mettons notre variable, puis toutes les lignes avec un point-virgule. Que se passe-t-il ici ? Nous demandons le nom de l'utilisateur, nous le saisissons dans une variable, puis nous renvoyons la variable à l'aide de cette méthode Vous pouvez voir que lorsque nous renvoyons la variable ici, cette variable est de type chaîne de données qui doit correspondre à l'en-tête de notre méthode, qui est toute cette ligne ici. Vous pouvez donc voir que nous renvoyons une chaîne de type de données, qui est notre variable ici. Maintenant, revenons à notre méthode principale. ce que nous appelons, mais nous n' en tirons aucune information. En fait, nous l'avons déjà fait. Vous pouvez voir la ligne de lecture par points de la console. Il s'agit d'une méthode et nous en tirons des informations. Et c'est exactement comme ça que nous procédons. Nous pouvons simplement le faire et tout fonctionnera à nouveau. Souvenez-vous que lorsque j'ai dit que cela n'avait pas besoin d' être pareil, nous pouvions simplement dire le nom par exemple. Vous pouvez voir que cela fonctionne toujours parce que main ne connaît que tout ce qui est défini dans le Maine. Demandez le nom d'un utilisateur, il ne connaît que les éléments définis ici, sauf si vous transmettez un paramètre ou renvoyez quelque chose. Revoyons ça une fois de plus. En fait, lançons l'application. Nous pouvons donc voir que nous exécutons l'application. Quel est ton nom ? Bob. Et bonjour Bob. C'est assez facile ? Eh bien, cela semble facile jusqu'à ce que oui. Regardons ce qui se passe une fois de plus pour que cela soit parfaitement logique. Nous exécutons l'application, nous demandons le nom de l'utilisateur. Donc, l'exécution du code se fait ici, il n'y a aucun paramètre, donc nous continuons. Quel est ton nom ? L'utilisateur saisit son nom, ici, nous le stockons dans une variable appelée nom de l'utilisateur. Nous renvoyons ces informations à la méthode, qui sont ensuite stockées dans leur nom. C'est le résultat de cette méthode. Nom de l'utilisateur, nous le renvoyons C'est le résultat de cette méthode qui est maintenant stocké dans cette variable appelée nom. nous suffit ensuite de saisir le nom dans la fenêtre noire, puis de la laisser ouverte C'est ainsi que les retours fonctionnent avec les méthodes de C Sharp souvenez-vous que les paramètres font entrer des informations et que les retours permettent de récupérer des informations. 15. 2-4. Surcharge de méthode: Nous allons maintenant examiner ce qu'on appelle la surcharge des méthodes Qu'est-ce que cela signifie ? Jetons un coup d'œil à cet exemple. Nous définissons ici deux variables, toutes deux de type entier appelé numéro un et numéro deux. Ce que nous faisons, nous appelons une méthode appelée ad, que nous avons créée ici. Il prend deux paramètres entiers, et il s'agit simplement d' additionner les nombres. Il renvoie le résultat, qui est un entier ici. Ensuite, nous affichons le résultat à l'écran. C'est très simple. La réponse devrait être 20 2022. Nous avons la bonne réponse. Ce que je veux dire maintenant, c'est que se passerait-il si je voulais additionner deux doubles ? Transformons ces nombres entiers en doubles. Maintenant, j'ai deux doubles ici. Cela peut être 6,4 et 16,2 par exemple. Vous pouvez voir maintenant qu'il y a une ligne rouge en dessous. Parce que nos paramètres sont des entiers. Il s'attend à des nombres entiers ici. Mais nous voulons toujours cette méthode, nous voulons toujours pouvoir additionner des entiers Je suppose que nous pourrions faire appel à une méthode, puis peut-être à une autre méthode appelée double, par exemple. Et puis il faudrait deux doubles. Ensuite, l'autre prendrait deux nombres entiers, par exemple. C'est ainsi que nous pourrions contourner ce problème. Alors évidemment, cela aurait un type de retour sous forme de double. Vous pouvez voir où cela va, mais que se passerait-il si nous voulions ajouter, par exemple, deux décimales ou deux nombres flottants ensemble Alors vous pouvez voir que nous allons devoir avoir une méthode pour chacune d'entre elles. C'est assez fastidieux et cela peut vraiment surcharger notre programme Mais ce que nous pouvons faire, c'est utiliser ce qu'on appelle la surcharge des méthodes Cela nous permet d'avoir une méthode mais de lui donner paramètres différents mais avec le même nom. Désormais, une méthode ne peut porter le même nom que si les types de données des paramètres ou le nombre de paramètres, par exemple, sont différents. Revenons à notre exemple précédent où nous additionnions deux entiers ici Ce que nous pouvons faire alors, c'est copier cette méthode. Nous conservons le même nom, par exemple, mais ici nous ajoutons en fait deux doubles plutôt que deux entiers Vous pouvez voir que ce que j' ai ici maintenant, ce sont deux méthodes portant exactement le même nom, sauf que celle-ci prend deux entiers et renvoie un int Et celui-ci prend deux doubles et renvoie un double. Maintenant, lorsque nous appelons notre méthode ici, si j'ouvre simplement ces parenthèses ici, nous avons maintenant ces petites flèches noires Nous ne l'avions pas auparavant car nous n' avions qu'une seule méthode avec un seul ensemble de paramètres. Et je vais vous le montrer maintenant. Si j'ouvre les parenthèses ici, vous pouvez voir qu'il n'y a pas de flèche noire Nous n'avons qu'une seule définition pour la méthode add. Mais dès que j'ajoute le second ici, nous avons maintenant plus d' options disponibles. Nous pouvons maintenant additionner deux nombres entiers et nous pouvons également ajouter deux doubles ensemble Il s'agit d'un exemple de surcharge de méthode dans C Sharp. Cela vous permet simplement d'avoir différentes options pour une méthode portant le même nom. Vous pouvez voir que C Sharp a intégré des méthodes qui en tirent déjà parti. Par exemple, lorsque nous écrivons quelque chose sur la console, vous pouvez voir que si je fais exactement la même chose, cette méthode est déjà surchargée 18 fois Vous pouvez donc voir que c'est un principe assez populaire dans la programmation de boutique, donc j'espère que cela vous a aidé, et c'est un exemple de surcharge de méthodes dans C shop 16. 3. Commentaires et balises de synthèse XML: Je voudrais maintenant parler de quelque chose de très important. Si vous voulez vous simplifier la vie ou prendre la programmation plus au sérieux, vous devez utiliser des commentaires. Alors, que sont les commentaires ? Si vous avez une application ou une ligne de code très complexe, c'est très long et vous saviez peut-être ce que cela signifiait à l'époque. Mais si vous y revenez un an ou deux plus tard, vous avez peut-être complètement oublié ce que cela signifiait ou la folie que vous étiez en train de taper à ce moment-là C'est pourquoi les commentaires sont très utiles. C'est surtout un rappel pour vous-même, mais si vous travaillez avec une équipe, cela leur indique également ce que fait le code sans ils aient à lire et à comprendre toute la complexité. Nous pouvons faire des commentaires de trois manières dans C Sharp. Le premier est un commentaire d'une ligne. Nous pourrions le faire. Par exemple, vous pouvez voir que lorsque je laisse un commentaire, il est vert. Maintenant, ce commentaire ici, il n'est pas exécuté par le logiciel lorsque vous produisez votre logiciel, comme un EXC pour Windows Il n'y est pas compilé, vous ne gaspillez donc pas d'espace ou de mégaoctets avec les commentaires Elles sont vraiment utiles. Encore une fois, si vous avez quelque chose de vraiment complexe, cela vous indique simplement ce que fait la ligne suivante. Nous pouvons donc mettre des commentaires sur à peu près toutes les lignes que nous voulons. On peut les mettre après une ligne. Encore une fois, ils ne courent pas, y a donc pas de ligne rouge en dessous. Et cela vous indique vraiment ce que fait la ligne suivante. Généralement, les gens placent le commentaire au-dessus du code et non à côté de celui-ci, mais vous pouvez le mettre à côté si vous le souhaitez. Mettons simplement quelques commentaires ici. Vous pouvez voir à peu près comment cela fonctionne ici. Je dois dire que nous savons que cette ligne permet de garder cette fenêtre noire ouverte. Je peux donc mettre un commentaire disant que cela permet de garder la fenêtre ouverte. Celui-ci dit bonjour à l'utilisateur. Je pourrais mettre un commentaire disant « bonjour ». Quand j'y reviens un an plus tard, j'ai tout oublié de la boutique, parce que cela arrive toujours avec les langues. Vous pouvez l'ouvrir et savoir instantanément ce que fait chacune de ces lignes. Il ne faut pas devenir fou avec les commentaires. Vous ne voulez pas que chaque ligne comporte un commentaire. Mais si vous ne comprenez pas quelque chose, mettez-y un commentaire, car cela vous le rappellera encore une fois et vous pourrez y vous le rappellera encore une fois et vous revenir beaucoup plus rapidement. Il s'agit d'un commentaire d'une seule ligne. La prochaine chose que vous pouvez faire est un commentaire sur plusieurs lignes composé d'une barre oblique suivie d'un Astérix Ensuite, si j'appuie sur Entrée, vous pouvez voir que cela crée Astérix sur chaque ligne jusqu'à ce que je le termine par une autre barre oblique Maintenant, tout ce que je tape ici est dans le commentaire. C'est utile lorsque vous souhaitez introduire une méthode ou ce que l'on appelle une classe. C'est tout ce avec quoi nous travaillons en ce moment. Supposons que vous travailliez au sein d'une équipe de dix personnes en haut du fichier. Vous devez dire qui l'a créé, parce que s'il y a un problème, ils peuvent dire, d'accord, Bob a écrit toute cette section du logiciel. Nous le savons, parce que l' auteur est Bob, alors Bob C'est moi qui l'ai créé, ne me détestez pas » lorsqu' il ajoutera cette partie du programme pourra dire : « C'est moi qui l'ai créé, ne me détestez pas » lorsqu' il ajoutera cette partie du programme. Il pourra ensuite résumer ce que c'est. C'est un lecteur de musique, c'est génial, il y a tout ce qu'il veut dedans. Donc ça dépend vraiment de toi. Mais voici comment faire un commentaire sur plusieurs lignes. Ils sont utiles pour trier, identifier peut-être qui a écrit le fichier et peut-être à peu près ce qu'il fait. De cette façon, les utilisateurs n'ont pas à lire toutes les méthodes et à essayer de comprendre ce que fait ce fichier. En général, les commentaires sur plusieurs lignes se trouvent en haut des fichiers, peuvent se trouver ici, donc la première chose que les gens peuvent voir ou cela peut aller au-delà de quelque chose de très compliqué, comme une méthode ou quelque chose comme ça, c'est généralement là que les gens utilisent un commentaire sur plusieurs lignes. Lorsque vous souhaitez écrire de nombreuses lignes simples, par exemple, le dernier commentaire dont je veux parler est ce que l'on appelle une balise de résumé XML Maintenant, ce n'est pas vraiment un commentaire comme celui-ci en soi, mais cela vous donne des commentaires importants. Il vous donne des informations en langage clair sur ce que fera peut-être la prochaine ligne de code. Mais nous pouvons les utiliser pour des méthodes ou des choses comme ça. Si vous avez une méthode compliquée, elle fait peut-être 100 lignes, elle fait toutes ces choses sophistiquées. Peut-être que le nom de la méthode ne lui rend pas vraiment justice. Il peut dire «   demander le nom de l'utilisateur », mais il contient beaucoup d' autres choses. Peut-être qu'il renvoie quelque chose qui peut être un peu compliqué ou qu'il comporte de nombreux paramètres et que vous ne savez peut-être pas nécessairement ce qu'ils signifient. Nous pouvons utiliser ce que l'on appelle une balise de résumé XML pour développer cela, où j'appelle ma méthode. Ici, je le survole avec ma souris, vous pouvez voir que cela ne dit pas grand-chose. C'est écrit « string ». Programme, demande le nom de l'utilisateur. Cependant, si j'ai dépassé cette ligne de lecture des points sur la console, regardez toutes ces informations. C'est dire qu'il lit la ligne de caractères suivante, il me dit ce qu'elle renvoie. Il y a beaucoup d' informations différentes. Je me demande, oh, eh bien, où est-ce que c'est sur le mien ? Comment puis-je le configurer ? C'est ce que l'on appelle une balise de résumé XML. Au-dessus de notre méthode, faites trois barres obliques 12. Et lorsque vous faites le troisième, il crée ce joli petit modèle pour nous. Il est au format XML. Voici la balise de résumé ouverte, voici la balise de fermeture qui représente les informations présentes et qui indique «  lit la ligne de caractères suivante à partir de l'entrée standard ». Ici, je définis approximativement ce que fait cette méthode. Si quelqu'un passe sa souris ici, peut rapidement voir ce qu'il fait sans avoir à lire 100 lignes de code. Par exemple. Cela donne aux autres développeurs des informations sur le fonctionnement de cette méthode. Par exemple, vous voulez lui donner une description très descriptive. Maintenant, quand je passe la souris dessus, oh, d'accord. Il demande le nom d'un utilisateur. Ah oui, j'ai oublié que j'ai construit un mineur de Bitcoin secret ici. Ainsi, par exemple, vous pouvez y mettre ce que vous voulez, mais c'est dans votre intérêt. Imaginez que vous avez mis votre logiciel de côté pendant dix ans. Tu reviens dix ans plus tard. Tu as tout oublié. Mais maintenant, vous pouvez simplement placer votre souris ici et oh, oui, bien sûr, je l'ai oublié. C'est donc une bonne chose pour vous, mais c'est également une bonne chose pour les autres développeurs, peut-être les membres de votre équipe. Par exemple, à l'intérieur, nous avons deux balises de retour. Et c'est à peu près ce qui est retourné. Nous renvoyons donc le nom de l'utilisateur. N'oubliez pas que vous pouvez mettre un petit indice ici lorsque nous aurons le nom de l'utilisateur, nous disons, oh, souvenez-vous que ce n'est que son prénom. Lorsque nous survolons cette page, nous pouvons voir qu'elle renvoie le nom de l'utilisateur, mais nous nous rappelons il ne s'agit que de son prénom C'est pourquoi ces balises de résumé XML sont utiles, car lorsque vous passez votre souris dessus en un instant, vous savez exactement ce qu'elles font en langage clair. Ils sont donc vraiment utiles. Et vous pouvez voir que cette méthode n'a qu'un seul paramètre ici. Quand je fais la même chose ici, nous avons quelque chose de plus ici. Encore une fois, nous pouvons utiliser notre résumé. Il dit bonjour, dites bonjour à l'utilisateur. Le paramètre définit ce que fait notre paramètre, comme les informations que nous lui donnons Ce sera le prénom de l'utilisateur. C'est dire bonjour à nous. Quand j'en aurai fini, nous pouvons voir ici, dites bonjour à l'utilisateur Quand j'ouvre le crochet, il me dit à quoi s' attend le magasin. Quel est le nom complet ? Est-ce le prénom ? Nom de famille ? Pseudonyme. Mais quand je regarde ici, oh, c'est le prénom, bien sûr, oui. Parce que nous nous le rappelons, nous disons à notre utilisateur, lorsque nous appelons notre méthode, exactement ce que fait notre méthode, ce qu'elle attend en tant que paramètre et également ce qu'elle renvoie Ce sont donc les trois types de commentaires que vous pouvez utiliser en do sharp. 17. 4-1. Déclarations if et Else: Jetons un coup d'œil à quelque chose de nouveau dans les conditions en do sharp. Nous allons examiner l'instruction if et également l'instruction el. E L S E pour L. Quelle condition est quelque chose qui est évalué comme vrai ou faux. Jette un œil à ça. Tu es Bob ? Tu t'appelles Bob ? Eh bien, la réponse est oui ou non. En avez-vous un, soit vous avez un chien, soit vous n'en avez pas. Mesurez-vous six pieds ? Je le suis ou je ne le suis pas. Ils ont donc toujours une réponse par oui ou par non. Dans ce cas, la condition est un Bob, c'est la condition. Vous pouvez étendre cette condition. Êtes-vous Bob, avez-vous un chien ? Dans quel cas ? Tout cela est la condition. Si vous vous appelez Bob mais que vous n'avez pas de chien, la réponse est non. Sinon, c'est oui si vous avez les deux, par exemple, parce qu'il y a une fin ici, c'est une condition. Telle est notre condition. Nous y faisons face tous les jours, à plusieurs reprises. Et nous pouvons les représenter en do dièse en utilisant ce que l' on appelle une instruction if. Jetons un coup d'œil. C'est très simple. Nous allons créer un petit logiciel appelé Are you, Bob ? Ce qu'il fait, il demande le nom de l'utilisateur. Nous prenons en compte le nom de l'utilisateur. Si le nom de l'utilisateur est Bob, nous allons l'accueillir chaleureusement parce que nous aimons vraiment Bob. S'ils ne s'appellent pas Bob, alors nous allons simplement leur donner un Hello, Roberto ou quelque chose comme ça. Examinez le format de l'instruction if. Cela commence par If, c'est le mot clé, les parenthèses ouvertes, comme nous le faisons pour une méthode Par exemple, ouvrez des parenthèses à l'intérieur des parenthèses. Ici, nous avons mis la condition. Notre état est le suivant : et vous, Bob ? Nous savons que la variable name contient ce que l'utilisateur a saisi, nous allons donc mettre le nom. Ensuite, nous voulons l'opérateur d' égalité représenté par deux signes égaux. Lorsque vous assignez quelque chose en do dièse, nous utilisons un signe égal. Mais lorsque nous voulons comparer quelque chose, nous utilisons deux. Nous disons que si le nom de l'utilisateur est égal à Bob, nous devons faire quelque chose en C Sharp. Sharp adore ces bretelles frisées. Lorsque nous avons une orthèse bouclée Method, lorsque nous avons une orthèse bouclée If Statement, lorsque nous ouvrons une orthèse bouclée, nous fermons toujours une orthèse bouclée . Vous pouvez voir que ceux-ci correspondent ici à ceux ici. C'est exactement comme ça que fonctionne le langage. Ceci est notre déclaration if ici. C'est le contenu de notre déclaration if. Tout ce qu'il y a entre les bretelles bouclées. Maintenant, comme je l'ai dit, si le nom de l'utilisateur est Bob, nous voulons le saluer chaleureusement. Essayons de taper en anglais. Nous savons qu'ils s'appellent Bob. On pourrait tout aussi bien mettre Bob. Bonjour, Bob. Ceux-ci, ceux qui s'appellent Bob, leur adressent un accueil incroyable. Regarde. Cependant, s' ils ne s'appellent pas Bob, c'est peut-être Roberto ou Henry, alors nous devons leur transmettre un message différent. Si nous lançons ce programme maintenant, vous pouvez nous dire quel est votre nom ? Tapons Henry. Cela nous donne un Hello Henry standard. En fait, il ignore complètement cela parce que le nom n'est pas Bob. Cependant, si je lance l'application maintenant, quel est votre nom ? Eh bien, je m'appelle Bob. Et n'oubliez pas C sharp case sensitive. Nous avons donc uniquement vérifié la présence d' un ardillon en minuscule dans notre instruction if, alors assurez-vous qu'il correspond à cela. Cliquez donc sur Répondre. Nous avons maintenant notre incroyable look d'accueil, mais nous avons un problème. Il dit également bonjour Bob. Il reçoit donc deux salutations. Et c'est parce que la condition de l'instruction if, qui est cette section, est satisfaite. Il est évalué comme vrai. Par conséquent, cette ligne de code est exécutée. Une fois l'instruction if terminée, nous exécutons toujours ce bit. Mais peut-être voulons-nous réserver cette salutation à Henry, par exemple. C'est pourquoi nous introduisons ce que l'on appelle une instruction L. E LSE, encore une fois, des bretelles bouclées. Cette section est réservée à Bob. Cette section est réservée à quiconque n'est pas à Bob. Cela est considéré comme vrai lorsque le nom de l'utilisateur est Bob. Il est évalué à faux s'il s'agit d'autre chose. Sinon, tout le reste est inclus ici. Nous voulons adresser le message d'accueil standard à tout le monde sauf à Bob. Et c'est ainsi que fonctionne la déclaration else. Donc, s'il est évalué comme vrai tout ici, s'il est évalué comme faux tout ici, par exemple, si je lance le programme, quel est votre nom maintenant Je m'appelle Bob. Maintenant, je reçois le message d'accueil standard, et cette section est complètement ignorée car je m'appelle Bob. Mais quand je lance le programme, maintenant je tape n'importe quoi, nous obtenons le message d'accueil standard car cette partie est ignorée, elle tombe dans la section autre ici. Cela ne peut pas exister sans et si nous ne pouvons pas le faire, cela n'aura aucun sens. Else a toujours besoin d'un if pour l'accompagner. Lorsque nous essaierons de l'exécuter, il y aura une erreur. Vous ne pouvez pas avoir autre chose en soi. Il a toujours besoin d'un accompagnement s'il est au-dessus. C'est une vision très simpliste d'un exemple de condition, qui est la condition if en C. Je voudrais simplement passer en revue un exemple rapide afin que vous compreniez parfaitement comment ces conditions fonctionnent Désormais, lorsque vous avez une instruction if, elle contient une condition et une action. Si cela est vrai, cette section est exécutée ici Si le résultat est faux, cette section s'exécute ici Lorsque nous avons parlé de variables, nous avions une variable boisée Les variables Bolen sont évaluées comme vraies ou fausses. Ce que nous pouvons faire, je vais juste utiliser des parenthèses. Les parenthèses sont facultatives, mais je pense que cela améliore la lisibilité Nous en stockons maintenant le résultat dans une variable appelée Bob. Ensuite, nous pouvons mettre Bob ici le nom donné par l'utilisateur Bob. Et quand je dis « oui », je veux dire, est-ce que c'est égal à l'opérateur d' égalité, oui ou non, vrai ou faux ? Ensuite, le vrai ou le faux seront stockés dans cette variable appelée Bob. Si la déclaration est ensuite exécutée, elle indiquera « vrai faux ». Si ce n'est pas faux. Si je lance le logiciel ici, je tape Bob, hey Bob, tu es génial. C'est exactement la même chose. Cela vous donne plus de clarté sur ce qui se passe, si cela a du sens. Je n'ai pas beaucoup parlé des booléens, mais en gros, cela revient à dire : est-ce que c'est vrai ou faux ? Et cela sera soit vrai, soit faux parce que c'est ainsi que vous le représentez comme un booling Ensuite, lorsque nous exécuterons l'instruction if Bob sera soit vrai, soit faux. Et il exécutera celui qui convient. Si nous ne sommes pas Bob, nous sommes Henry. Ensuite, il dira : «   Hé, personne au hasard ». 18. 4-2. Déclarations Else If: Nous allons maintenant développer notre exemple de condition if dans notre dernier tutoriel et parler de la clause el if. Voici notre message d' accueil standard pour Bob. Mais que se passerait-il si nous voulions un salut spécial pour Henry ? Bob reçoit son propre message personnalisé. Henry en a peut-être un sur mesure, alors tout le monde en aura un standard. Par exemple, nous introduisons ici l'instruction else if. Allons ici. Cela signifie que nous voulons changer Bob, car nous avons déjà cette condition Ces conditions doivent vraiment être uniques. Sinon, cela n'aura aucun sens. Ce sera vraiment superflu. Alors maintenant, nous disons : êtes-vous Bob ou Henry ? N'oubliez pas qu'il faut donner du sens à nos commentaires. Alors, tu t'appelles Bob ? Bonjour, Bob. Tu t'appelles Henry ? Oh, bonjour Henry. Mais il a plus de points d'exclamation parce qu'il appelle. Alors si tu n'es pas Bob, tu n'es pas Henry, alors tu es tout le monde au bas de l'échelle. Tapons donc Henry, par exemple. Maintenant, nous allons avoir celui d' Henry parce que nous nous appelons Henry. C'est très simple. Une fois que vous avez compris comment fonctionnent le « si » et le «   sinon », c'est juste autre chose. Encore une fois, nous pouvons même développer ce point et y ajouter un autre nom, peut-être Scott ou quelque chose comme ça. Vous pouvez le modifier comme bon vous semble. C'est ainsi que fonctionne la déclaration Elif. Encore une fois, tu n'as pas besoin d' el, tu n'as pas besoin d'autre chose. Si je suis content de l'avoir , par exemple si je tape autre chose, ils ne recevront aucun message parce que nous ne leur avons rien dit de faire. C'est la puissance de l'instruction el if lors de l'utilisation de la condition if. Maintenant, je vais vous donner quelques conseils. Maintenant, nous avons abordé la déclaration if el if. C'est-à-dire lorsque vous avez une condition, par exemple, avec une seule ligne de code en dessous. Nous avons donc cette condition, une ligne de code. Ensuite, cette condition, une ligne de code. Lorsque nous avons une ligne de code , ces accolades sont facultatives Ce que cela fait en les supprimant , cela augmente la lisibilité Cela donne moins de ballonnement à votre logiciel. C'est exactement la même chose que ce que nous avions auparavant. Cependant, par exemple, si nous avons deux lignes de code ou plus dans chaque condition, il y a un problème. Et c'est parce qu'il a besoin de ces bretelles bouclées. Ici, vous pouvez voir qu'il y a une petite ligne rouge et que l'erreur n'est pas très descriptive. C'est parce qu'il essaie de lire tout cela sur une seule ligne et qu'il va générer une erreur mystérieuse. Lorsque vous disposez d'une ligne de code pour chaque condition, les accolades sont facultatives Mais vous ne pouvez pas le faire avec des méthodes, par exemple. Seulement des choses comme si, sinon, sinon, et d'autres choses dont nous n'avons pas encore discuté. Mais c'est une petite astuce qui vous permettra d' améliorer la lisibilité de votre code à l'avenir 19. 4-3. Opérateurs d'égalité et d'inégalité: Égalité et inégalité. C'est quoi ça ? Qu'est-ce que cela signifie ? Eh bien, ce sont des choses que vous pourriez entendre maintenant. Encore une fois, nous avons déjà abordé un peu la question de l'égalité lorsque je discutais de la déclaration if. Mais l'égalité, c'est essentiellement dire qu'il y a quelque chose d' égal à autre chose. Et cela est représenté par deux signes égaux ici. Mais comment parler d'inégalité ? OK, et si le nom n'est pas Bob ? Comment représentons-nous cela ? Ce que nous pouvons faire là-bas, c'est utiliser le non égal à, qui est représenté par un point d'exclamation suivi d'un signe égal Maintenant, c'est à peu près inversé, toute cette déclaration. Si le nom n'est pas égal à Bob, eh bien, cela n' aucun sens maintenant parce que leur nom n'est pas Bob. Ce que nous pouvons faire maintenant, c'est dire « Salut Bob ». Si je lance le logiciel maintenant, quel est ton nom, Bob ? Rien ne va se passer parce que nous ne lui avons rien dit de faire. Mais si je lance le logiciel et que je mets autre chose, il dira : «   Hé, tu n'es pas Bob ». Mais si je transforme simplement cet opérateur en un symbole d'égalité, cela inversera tout le sens de l' énoncé. Vous pouvez voir maintenant que cela n'a aucun sens car même si le nom est Barb, c'est toujours elle qui l' exécute Si vous voulez dire que quelque chose est égal à quelque chose, deux signes égaux. Si vous voulez dire que ce n'est pas égal à, alors nous n'avons pas besoin d'égal, c' est-à-dire d'une exclamation et d'un signe égal 20. 4-4. Opérateurs de comparaison: OK, opérateurs de comparaison. J'ai une application très simple ici. Il demande à l'utilisateur un nombre 1 à 10. Il prend l'entrée de l'utilisateur, convertit en un entier et la place dans une variable appelée nombre C'est à peu près la seule chose que cela fait. Ce que je veux faire, c'est que si l'utilisateur saisit un nombre inférieur à cinq, je veux lui envoyer un message pour lui dire que vous avez choisi un chiffre bas. Sinon, vous avez choisi un chiffre élevé. C'est très simple. Pour ce faire, nous avons besoin d'une condition que nous allons utiliser. La condition que nous allons poser est que le nombre soit inférieur à cinq ? façon dont nous représentons moins de est un crochet angulaire gauche, qui ressemble à ça, puis cinq. Ensuite, avec la déclaration, nous utilisons nos crochets. C'est ce qui arrive quand notre nombre est inférieur à cinq. Nous allons dire à l'utilisateur, je ne sais pas, que vous avez choisi un faible chiffre. Quelque chose comme ça. Cependant, si le nombre n'est pas inférieur à cinq, alors nous pouvons utiliser L pour inverser à peu près cela. Vous avez choisi un nombre élevé si nous lançons l'application. Maintenant, choisissez un chiffre de 1 à 10 Souvenez-vous qu'un chiffre inférieur à cinq est faible, donc je vais en faire quatre J'ai choisi un faible chiffre, et c'est tout. C'est un excellent logiciel, n'est-ce pas ? Ensuite, si le nombre est supérieur ou égal à cinq, faisons un cinq. Cela devrait me dire que j'ai choisi un chiffre élevé, j'ai choisi un chiffre élevé. De même, si j'y mets 1 million, cela signifiera que j'ai choisi un chiffre élevé. Mais il s'agit d' un exemple d'opérateur de comparaison appelé opérateur inférieur à. De même, nous pourrions utiliser l'opérateur more than, qui est représenté par un crochet angulaire droit. Maintenant, cela n' aura aucun sens. Il va falloir les inverser. Cela va faire exactement la même chose. Mais vous pouvez voir que c'est inversé. Si le nombre est supérieur à cinq, nous avons choisi un nombre élevé. Sinon, nous avons choisi un faible chiffre, cela fera exactement la même chose. Mais comme je reviens à cela, je dois inverser les deux. Il est logique que les deux autres soient supérieurs ou égaux à, et inférieurs ou égaux à. Une valeur supérieure ou égale à est représentée de cette façon. Supérieur ou égal, inférieur ou égal, comme vous l'avez peut-être deviné, à comme vous l'avez peut-être deviné, un crochet angulaire gauche et à un signe égal lorsque vous utilisez des éléments tels que pas égal à, inférieur, égal à, supérieur à Essayez de vous rappeler que le signe égal se trouve toujours sur le côté droit, toujours en do dièse Maintenant, si l'utilisateur a choisi un nombre inférieur ou égal à cinq, il a apparemment choisi un nombre supérieur, ce qui n'est pas vrai. Nous les inversons à nouveau. OK ? Inférieur ou égal à cinq, ils ont choisi un faible chiffre, nous en avions moins de cinq auparavant. Si c'est un chiffre inférieur à quatre, alors c'est un chiffre bas. Si nous voulons dire un chiffre inférieur ou égal à cela, nous devrions plutôt le faire. Comme le nombre est inférieur ou égal à quatre, il s'agit d'un nombre faible. Moins ou égal à quatre revient dire moins de cinq. Encore une fois, nous pouvons utiliser un nombre supérieur ou égal pour inverser la logique. Encore une fois, si le nombre est supérieur à cinq, encore une fois, nous pouvons inverser ces déclarations, nous obtenons exactement la même chose : ce sont ce que l' on appelle les opérateurs de comparaison en C Sharp. Si nous mettons sept, vous avez choisi un chiffre élevé. 21. 4-5. Opérateurs booléens: Opérateurs de réservation. Cela semble un peu compliqué, mais je vous assure que ce n'est pas le cas. Un opérateur booling est essentiellement une façon de dire et c'est assez difficile à Ce que nous allons faire, c'est créer un exemple, une application de loterie de base. Nous demandons à l' utilisateur un chiffre, 1 à 10. Si l'utilisateur saisit un trois ou sept, il a gagné, il a gagné à la loterie Jetons un coup d'œil, nous pouvons implémenter cela. Si vous prononcez la phrase à haute voix, cela vous indique à peu près ce que vous devez faire si l'utilisateur choisit implicitement un chiffre qui est trois, une qualité pour trois maintenant. Ou est représenté par deux tuyaux verticaux comme celui-ci, 12. Je ne sais pas pourquoi. C'est exactement comme ça. Le nombre est égal à trois, le nombre est égal à sept. C'est très simple. Lorsque vous le dites à haute voix, cela vous indique à peu près ce que vous devez écrire. Ensuite, je veux dire à l'utilisateur qu'il a gagné à la loterie, qu'il a choisi le numéro porte-bonheur, alors jetons un coup d'œil à ça. Choisissez un numéro, 1-103 vous avez gagné, prouvons que ce n'est pas un casier numéro deux, rien ne se passe, c'est parce que nous ne lui avons rien dit de faire C'est un exemple très simple d'utilisation de l'opérateur. Vous pouvez en utiliser plusieurs. Vous pouvez en utiliser quatre si vous le souhaitez. Ainsi, si l'utilisateur en choisit 34 ou 9, par exemple, cela fonctionne parfaitement. Vous avez maintenant quatre numéros porte-bonheur. C'est l'opérateur, ce qu' on appelle un opérateur Bolen. L'autre opérateur de Bolen est le contraire. C'est celle que l'on représente, pour une personne, qui a le plus de sens. Du moins, ça veut dire, mais il en faut deux. Avec l'opérateur final. Ce que nous pouvons faire, c'est dire que si le nombre n'est pas égal à deux et qu'il n'est pas égal à sept, par exemple, alors ils ont gagné. Ce que nous pouvons faire si le nombre n'est pas égal à deux, le nombre n'est pas égal à sept, car 2,7 sont de mauvais nombres. Si vous choisissez la version 2.7, vous avez tout perdu. Par exemple, tant que le nombre n'est pas deux et que le nombre n'est pas sept, vous en avez un. C'est ainsi que vous pouvez utiliser l' opérateur et vous pouvez voir la logique s'inverser par rapport à celle que nous venons d'utiliser avec l'opérateur Or Maintenant, nous utilisons une valeur non égale à, mais la même logique s'applique lorsque nous exécutons l'application. Maintenant, tant que nous n'en choisissons pas deux ou sept avec un, choisissons-en quatre. Vous pouvez le voir avec un. Cependant, si nous en choisissons deux ou sept, cela ne servira à rien parce que nous ne lui avons rien dit de faire. C'est un exemple très simple d' utilisation d' opérateurs booléens tels que le R et la fin. Encore une fois, avec ceux-ci, vous pouvez l'agrandir et faire quatre chiffres si vous le souhaitez. Et ce que nous pouvons faire avec les opérateurs, nous pouvons également les combiner. Regardons un exemple rapide de la façon dont nous pouvons combiner. Et demandons le nom de l'utilisateur. Nous allons demander le nom de l'utilisateur et le saisir. Imaginons maintenant que Bob n' ait accès qu'à l' application de loterie que nous faisons ici. Il est le seul à avoir le droit de jouer au loto. Ce que nous voulons faire, c'est dire le nom de l'utilisateur Bob, a-t-il le chiffre deux ou sept ? Et c'est un exemple de la façon dont nous pouvons utiliser et ensemble. Mais le fait est que tout sera évalué comme vrai ou faux. C'est le point principal de la condition ici. Le nom est-il égal à Bob et porte-t-il le chiffre deux ou sept ? Je vais donc en mettre deux ou sept entre parenthèses. C'est donc en fait beaucoup plus lisible et cela va avoir du sens. Et il va également calculer correctement. Alors, le nom de l'utilisateur est-il Bob ? Oui Est-ce que Bob a le chiffre deux ou sept ? Oui Disons qu'il en a sept, alors il en a un. Disons que le nom de la personne est Henry. OK. Est-ce que le nom est Henry ? Est-ce que le nom est Bob ? Non, c'est Henry. OK. Non, alors ça va juste passer ici, alors testons la théorie. Alors, quel est ton nom ? Henry. Alors mettons maintenant le chiffre porte-bonheur. Je pense que sept est l'un d'entre eux. Alors rien ne se passe parce que ce n'est pas Bob. Seul Bob a la permission de gagner à la loterie ici, inscrivons Bob, donnons-lui un numéro porte-bonheur et il en sera un. Juste comme ça. Faisons Bob avec un chiffre malchanceux, qui est certainement 44 Rien ne se passe Vous pouvez voir que c'est ainsi qu'il évalue l' ensemble de cette condition avec un opérateur et booling et aussi un opérateur Il est également bon d'utiliser des parenthèses , pour s'assurer que a calcule correctement, et deuxièmement, cela améliore également la lisibilité 22. 4-6. EXERCICE - Créer un jeu de simulation: Nous allons donc maintenant faire un petit exercice et tester vos connaissances sur certaines des choses que nous avons apprises jusqu'à présent. Ce que nous allons faire, c'est créer un exemple de calculateur dans C Sharp. En ce moment, il ne se passe pas grand-chose. Nous disons simplement à l'utilisateur bienvenue sur notre calculateur d'appels. Et lorsque nous exécutons le programme, rien ne se passe. Nous devons donc programmer cette capacité, ce que l'utilisateur va faire. Ils vont entrer leur premier nombre, qui peut être un nombre décimal, puis ils vont entrer un opérateur plus moins la multiplication ou la division Ensuite, ils vont entrer leur deuxième numéro. Ensuite, il va effectuer le calcul et afficher à l' écran quelques éléments à prendre en compte. Premièrement, l'utilisateur peut saisir des décimales. Nous devons nous assurer de convertir nos nombres en doubles, par exemple. Ensuite, nous devons prendre en compte l'opérateur saisi par l' utilisateur et déterminer s'il s'agit d'un plus, d'un moins, d'une division ou d'une multiplication. Et ensuite, agissez en conséquence de manière appropriée en utilisant les conditions. Demandons à l'utilisateur son premier numéro. Nous savons comment nous y prendre. Nous demandons à l' utilisateur son premier numéro. Pour collecter ces informations, nous utilisons la ligne de lecture par points de console. Nous voulons le mettre en double. J'ai configuré une variable appelée first et qui stockera le premier nombre, mais la ligne de lecture par points de console renvoie une chaîne. Nous devons convertir cette chaîne en double. Nous pouvons utiliser convert pour ce faire, nous tapons convert period et nous voulons doubler les crochets ouverts. Placez le résultat entre crochets. Et puis n'oubliez pas de fermer les crochets. Nous avons maintenant saisi le premier numéro de l' utilisateur. La prochaine chose que nous voulons faire est prendre en compte l'opérateur de l'utilisateur, mais prenons d'abord le deuxième chiffre de l'utilisateur. C'est parce que nous pouvons simplement le copier-coller. C'est beaucoup plus facile. Nous avons facilement le premier numéro de l'utilisateur et le deuxième numéro de l'utilisateur. Maintenant, nous voulons l'opérateur. Copions ceci. L'opérateur sera une chaîne car la ligne de lecture des points de la console nous donne déjà une chaîne. Nous n'avons pas besoin de convertir quoi que ce soit pour pouvoir le supprimer. Nous allons créer une nouvelle variable appelée opérateur. Mais regardez ce qui se passe quand je fais ça. Vous voyez que c'est surligné en bleu. Cela génère une erreur. Pourquoi est-ce le cas ? C'est parce que l'opérateur est un mot clé en do dièse. Il est déjà réellement utilisé. Par exemple, nous ne pouvons pas créer une variable portant le nom de double par exemple. Il fait exactement la même chose. C'est parce que c'est un mot réservé. Nous devons choisir un nom qui ne soit pas opérateur, car l'opérateur est déjà utilisé dans le langage C sharp. Je vais juste l'appeler OP. Vous découvrirez peut-être que j' ai pensé vous donner l'information maintenant. Nous voulons maintenant leur demander l'opérateur. Nous devrions peut-être leur dire ce qu'ils peuvent faire. Nous disons que vous pouvez choisir le plus, le moins, la multiplication ou la division. Nous prenons l'opérateur et le stockons dans une variable appelée p. Nous avons maintenant toutes les informations de notre utilisateur. Nous avons les chiffres et tout ce dont nous avons besoin. Nous devons maintenant découvrir quel opérateur ils utilisent , puis effectuer le calcul. Comment trouver l'opérateur ? Eh bien, nous pouvons utiliser les instructions if pour ce faire. nous qui le disons. Nous utilisons maintenant l'opérateur d'égalité. C'est l'opérateur. Comme l'opérateur est une chaîne, nous utilisons des guillemets doubles. Est-ce un avantage ? Le code qu' il contient, si nous le mettons entre accolades, si l'opération est un plus, nous disons f plus seconde Mais nous voulons en mettre le résultat dans une variable. Définissons une variable qui stocke notre résultat. Je vais juste l' initialiser à zéro. N'oubliez pas que le résultat du point-virgule est égal au résultat du premier plus le second, car nous travaillons avec l'opérateur plus. Cependant, s'ils veulent multiplier deux nombres, par exemple, alors nous avons besoin d'un si l'utilisateur saisit une multiplication par exemple, alors ce n'est pas vrai, cela donne la valeur false, puis l'exécution du code va sauter vers le bas Nous devons le comprendre ici dans un autre. Si, si l'utilisateur souhaite effectuer une multiplication, nous vérifierons cela. Ensuite, multipliez simplement les nombres ensemble. C'est très facile, n'est-ce pas ? Vous pouvez voir où cela va maintenant. Mi plats à emporter et division, la division ici, et les plats à emporter C'est ainsi que nous détectons réellement l'opérateur ici. Dans tous les cas, nous effectuons le calcul approprié en fonction de la condition, puis nous mettons toujours le résultat dans la variable de résultat ici. La dernière chose que nous voulons faire est dire à l'utilisateur quel est le résultat. Vous pouvez voir ici qu'un studio visuel me propose cela. Je vais le prendre, appuyer sur la touche Tab du clavier, et maintenant c'est écrit pour moi. Maintenant, je veux dire à l' utilisateur quel est le résultat. Résultat, quelque chose comme ça. Lancez le programme et voyons s'il fonctionne. Bienvenue sur notre super calculateur. Quel est ton premier chiffre ? Troisièmement, quel est votre opérateur ? Vous pouvez choisir plus, moins, multiplication ou division. Je vais choisir la multiplication. Quel est ton deuxième chiffre ? Parce que nous savons que trois fois quatre font 12. Je n'ai pas besoin d'y penser. Le résultat est 12. Eh bien, cela fonctionne. Essayons-en un autre. Essayons 200/3 car nous savons que trois ne correspond pas parfaitement à 200 Nous pouvons donc le tester. Notre résultat nous donne en fait une décimale. Vous pouvez voir que le résultat est 66,6 6667. Nous avons donc ici un bon degré de précision. En utilisant des doubles plutôt que des entiers, nous pouvons traiter des valeurs décimales et des nombres qui ne sont pas des nombres entiers qui ne sont pas des nombres entiers Voici un exemple très rapide sur la façon de créer une calculatrice préégale dans C Sharp en utilisant tout ce que nous avons appris jusqu'à présent 23. 4-7. Instructions Switch: Je vais donc vous présenter ce que on appelle maintenant une instruction switch. C'est un nouveau type de déclaration que nous allons découvrir. Et elle est très similaire à l' instruction if and else if dans la mesure où, lorsque l'instruction if est exécutée, elle évalue une condition Si c'est vrai, il exécutera l'action ci-dessous. S'il est faux, il passera à l'instruction Els if suivante et réessaiera. Si c'est vrai, il exécutera cette action, etc. Switch est très similaire à celui-ci. C'est juste une autre façon de représenter les mêmes informations. Ce que je vais faire, c'est la réécrire sous forme d'instruction switch afin de vous montrer exactement comment cela fonctionne le cas d'une instruction switch, nous utilisons le mot clé switch. Il possède une entrée, que l'utilisateur saisit dans le programme. Au fait, avant de commencer, je vais vous montrer à quoi sert cette application. Il demande à l'utilisateur de saisir un jour de la semaine, puis envoie un message personnalisé indiquant le jour qu'il a saisi. Si j'exécute ce programme, veuillez saisir un jour de la semaine. Je tape lundi, je n'aime pas le lundi. Il s'agit d'une application très simple. Ce que je vais faire, c'est le réécrire sous forme d'instruction switch Il prend l'entrée de l'utilisateur, que nous avons placée dans une variable appelée input. Comme dans la plupart des applications de C Sharp, nous ouvrons et fermons les bretelles et mettons tout le code au milieu Maintenant, une instruction switch, par exemple, instruction if, pour vérifier différentes conditions. Cependant, avec l' instruction switch, cela comporte des cas. Elles représentent, par exemple, une instruction L if. Notre premier cas peut être celui de la saisie du lundi. Nous représentons cela ainsi. Ensuite, nous avons mis le code au milieu, ici. Dans une instruction Switch. Ces trois lignes ici sont à peu près les mêmes que ces trois lignes ici. C'est juste formulé différemment car l'entrée est une chaîne de type de données, notre cas doit être une chaîne Si, par exemple, l' entrée est un nombre, il doit s'agir d'un nombre. C'est ainsi que cela fonctionne. Une instruction switch peut comporter un ou plusieurs cas. Nous allons en faire un pour chacun d'entre eux. Chaque cas contenu dans une instruction switch doit se terminer par deux points et doit se terminer par le mot clé break. Et toutes les lignes se terminent par un point-virgule. Chaque en-tête de dossier se termine par deux points et se termine par une pause. C'est exactement ce qui se passe dans les instructions switch. Les bretelles bouclées sont facultatives. Vous pouvez les mettre, vous n'êtes pas obligé de les mettre. Vous pouvez placer la cassure à l'intérieur des bretelles bouclées. Son fonctionnement est très flexible . J'ai tendance à les laisser de côté tant que vous suivez toute votre logique, et vous pouvez avoir plusieurs lignes de code dans une pause. Et les deux points de l'en-tête, tout va bien. C'est notre premier cas, lundi. Je n'aime pas encore le lundi au lieu du mardi, le prochain cas sera Encore une fois, nous ne pouvons pas avoir exactement le même cas car il est redondant Le prochain cas serait mardi, et nous prenons cette ligne pour mardi, et cetera Vous pouvez voir une tendance se dessiner ici. La déclaration switch contient de nombreuses conditions. Grâce au pouvoir de l'édition, j'ai réécrit toutes ces instructions et l if en une seule instruction switch et cela fera exactement la même chose. Permettez-moi de vous le démontrer. Maintenant, arrêtons temporairement cette logique. Je vais maintenant lancer l' application que je tape lundi. Vous pouvez voir que j'obtiens exactement le même résultat. Cette instruction switch ici est exactement la même que toutes ces instructions if et L if ici. Une chose que vous remarquez, c'est la lisibilité. Il se lit beaucoup mieux. Vous pouvez voir que c'est en fait beaucoup plus minimal. Vous pouvez clairement voir ce qui se passe et ça a l'air bien plus ordonné que ça C'est l'un des avantages de l'utilisation d'une instruction switch. Les opérateurs de réservation constituent un inconvénient. Par exemple, si la saisie est le lundi ou le mardi mais pas le mercredi, nous avons une chose compliquée ici. Cela est assez difficile à réaliser avec les instructions switch et cela devient très compliqué très vite. Dans cet exemple, je préférerais une instruction F, dans ce cas pour travailler avec des opérateurs bolen complexes Un autre avantage de l'utilisation des instructions switch est que lorsque vous obtenez un grand nombre de conditions, ici nous en avons sept, c'est beaucoup. Lorsque nous atteignons cinq ou plus, une instruction switch s' exécute en fait beaucoup plus rapidement par le système. C'est juste dû au design. Qu'est-ce qui se passe en arrière-plan ? Lorsque vous obtenez cinq cas, par exemple, ou plus, je préférerais une instruction switch celle-ci, simplement parce qu'elle est exécutée plus rapidement. Si vous représentez sept cas dans des instructions if et else if, l'ordinateur doit évaluer chacun d'entre eux. Ça dit, oh, celui-ci, est-ce que c'est celui-ci ? Est-ce celui-ci ? Mais cela ne fonctionne pas dans les instructions switch. En fait, il est exécuté un peu différemment. Il est plus performant lorsqu'il s'agit de choisir entre les instructions switch if et else if. Alors c'est à vous de décider. Vous devez prendre votre exemple et déterminer lequel vous convient le mieux. Une chose que je vais mentionner à propos des instructions switch, une dernière chose est que se passera-t-il si aucun de ces cas ne se produit ? Et s'il y a un huitième jour magique de la semaine, ou si l'utilisateur mal orthographié l'un de ces jours, aucun de ces cas ne se produira réellement Si nous faisions cet exemple avec if et si nous avions un L final en bas qui se lirait comme suit, cela indiquerait à cela indiquerait l' utilisateur qu'il a saisi un jour non valide parce qu' un jour non valide parce il l'a peut-être mal orthographié. Par exemple. Comment représentons-nous cela dans une instruction switch ? Eh bien, nous utilisons ce que l'on appelle le mot clé par défaut. Si je tape default, terminez-le toujours par une pause, comme dans les cas ci-dessus, alors je peux mettre le même code ici. Si je supprime cette logique et que je teste l'application, puis que j'épelle délibérément l'un des jours de manière incorrecte, vous verrez que cela indique à l'utilisateur vous verrez que cela indique à l'utilisateur qu'il a saisi un jour de la semaine non valide C'est donc très utile lorsque vous souhaitez exécuter du code alors qu'aucun de vos cas n'est réellement évalué comme vrai. C'est donc comme un fourre-tout, par exemple. 24. 4-8. Opérateurs: Parlons des opérateurs conditionnels en C Sharp. Les opérateurs conditionnels ne sont pas limités à C Sharp. Vous pouvez en fait découvrir en C plus plus et d'autres langages ce qu'est un opérateur conditionnel. C'est un moyen rapide de remplacer une instruction F et une instruction L. Prenons cet exemple. Ici, nous demandons à l' utilisateur s'il aime le café, nous prenons ses informations et les stockons dans une variable. Ensuite, s'ils tapent oui, par exemple, nous configurons simplement une variable appelée message et nous y stockons cette chaîne. Je savais que je pouvais compter sur toi. Rien d'autre ? Nous disons que nous ne sommes plus amis et nous le diffusons à l'écran Si je lance le logiciel maintenant pour que vous puissiez voir rapidement comment cela fonctionne. Oui, je savais que je pouvais compter sur toi. C'est très simple. Mais vous pouvez voir que nous avons une instruction if ici et une déclaration L également. Cela prend quatre lignes de code avec cette boîte de variable supplémentaire ici. Il y a cinq lignes au total. Lorsque vous développez de gros logiciels, il est parfois agréable de tout simplifier en une seule ligne. Cela prévient les ballonnements et, encore une fois, cela pourrait améliorer la lisibilité Cela dépend de la manière dont je peux le représenter sur une ligne de code ? Comment puis-je minimiser cela ? Eh bien, nous pouvons utiliser ce que l'on appelle l'opérateur conditionnel. Ce que je vais faire, c'est réécrire toute cette section ici en utilisant un nouveau concept, l'opérateur conditionnel Maintenant, il est parfois appelé opérateur ternaire, ce qui signifie simplement qu'il est composé de trois parties Et vous verrez aussi pourquoi on l' appelle ainsi. Je vais juste l'écrire sous forme d'opérateur conditionnel, puis je vais l' expliquer par la suite. Comme je l'ai déjà dit, il se compose de trois parties. La première partie est la condition, elle est séparée par la seconde partie marquée d'un point d' interrogation. Ensuite, la deuxième partie est savoir si la condition est évaluée comme vraie La troisième partie concerne la question de savoir si la condition est fausse. Maintenant, cette ligne de code fait exactement la même chose que tout cela ici. Laisse-moi te le prouver. Si nous faisons cela, nous exécutons le programme. Tu aimes le café ? Oui, je savais que je pouvais compter sur toi. Et testons simplement l'autre condition. Rien d'autre ? Nous ne sommes plus amis. Vous pouvez voir que c'est beaucoup plus simplifié maintenant. Nous avons mis tout cela sur une seule ligne de code. Mais comment cela fonctionne-t-il ? Ce qui se passe, c'est que nous en stockons le résultat dans une variable appelée message, comme nous le faisons ici. La première partie de l'opérateur conditionnel est la suivante : la condition est-elle la réponse de l'utilisateur ? Oui, nous testons une chaîne. C'est la condition. La première partie de l'opérateur conditionnel situe entre un point d' interrogation et deux points. Autrement dit, si la condition est vraie. Si c'est vrai, alors ce segment de l'opérateur conditionnel est exécuté, puis cette section ici, si vous pouvez imaginer cette question, c' est-à-dire celle d'une autre, si elle est Et voici la condition, cette variable prend simplement le résultat de toute cette condition ici, un opérateur conditionnel. C'est juste un moyen rapide d'écrire une instruction F et une instruction L sur une ligne de code. La lisibilité, oui, cela dépend si vous pouvez neutraliser les opérateurs conditionnels Cela peut sembler un peu déroutant, mais plus vous pouvez les utiliser, plus le code est condensé Si vous en avez 50 ou 100, considérez c'est bien de simplifier sur une seule ligne de code par exemple. Mais c'est ainsi que vous pouvez écrire des opérateurs conditionnels à levier dans C Sharp. 25. 5. Tableaux: Je vais donc introduire un nouveau type d'objet dans notre apprentissage. Et c'est ce qu'on appelle un tableau. Qu'est-ce qu'un tableau ? Eh bien, en langage clair, un tableau est une collection de quelque chose. Imaginons par exemple qu' un de vos amis possède une belle collection de jeux vidéo. Vous pourriez dire, oh, c'est une belle gamme de jeux vidéo que vous avez. Cela signifie simplement une collection de quelque chose, beaucoup de choses. En programmation, c'est très similaire. Jetons un coup d'œil à cet exemple très basique ici. Ce que j'ai ici, ce sont six variables de type entier. Integer est le type de données. Je suis juste en train de mettre le premier à l'écran. C'est très simple. Supposons que si nous émulons une application de loterie, l'utilisateur choisit six numéros, puis nous mettons chacun de ses numéros dans une variable et toutes les variables sont uniques Mais que se passe-t-il si l'utilisateur choisit 1 000 numéros ? Ensuite, je vais devoir créer 1 000 variables. Ça va être vraiment fastidieux. Notre application va utiliser plus de mémoire, ses fichiers seront plus volumineux et son développement prendra également beaucoup de temps. façon dont nous pouvons surmonter ce problème d'avoir toutes ces variables avec des noms uniques différents est d'utiliser ce qu'on appelle un tableau. Ce que le tableau peut faire, c'est regrouper toutes ces informations dans une seule variable. Voyons comment nous pouvons représenter six lignes de code ici sur une seule ligne simple à l'aide de tableaux Donc, ce que je vais faire, c'est définir et initialiser un tableau ici Nous voulons que tous les éléments du tableau soient des entiers, des nombres. Nous allons utiliser le type de données int pour notre tableau ici, puis je vais utiliser des crochets ouverts et fermés Cela indique au système, hé, je veux créer un tableau. Nous allons donner un nom au tableau. Nous allons appeler ça des numéros. Nous avons déclaré le tableau juste là. Et maintenant, nous voulons initialiser le tableau, ce qui signifie que nous voulons y mettre des données Et nous pouvons le faire de la même manière. Pour ce faire, nous allons dire non. Ensuite, je vais mettre à nouveau le type de données, les crochets à nouveau. Maintenant, je veux mettre des valeurs dans ce tableau. J'utilise des bretelles bouclées ouvertes, des bretelles bouclées fermées, puis un point-virgule Maintenant, à l'intérieur de ces bretelles bouclées, je vais mettre les valeurs, pour pouvoir en mettre deux Quand je mets une valeur suivante, j'utilise a puis 12, et maintenant la valeur suivante, 264 556,71 Maintenant, cette variable appelée nombres est un tableau Ce sont toutes les valeurs qu'il contient. Maintenant, cette ligne de code représente l'ensemble de ces six lignes ici. Maintenant, nous n'en avons plus besoin. Maintenant, comment accéder réellement aux numéros contenus dans ce tableau ? Eh bien, nous prenons le nom du tableau, qui est un nombre, puis nous utilisons des crochets. À l'intérieur des crochets, nous avons placé un index pour nos valeurs. Maintenant, lorsque nous avons déjà parlé de sous-chaînes, j'ai dit que l'indice est généralement en do dièse Commencez à zéro, il s' agit de l'emplacement zéro pour les objets. Il s'agit de l'emplacement d'éléments numéro 12345 Même si nous avons six éléments, agit de l'index cinq car il s'agit de l'indice zéro. Gardez cela à l'esprit lorsque vous travaillez avec des tableaux, Gardez cela à l'esprit lorsque vous travaillez avec des tableaux collections et des choses comme ça dans C Sharp Si je veux accéder à ce premier élément, le numéro deux, je mets simplement zéro, car il est à l'index zéro. Si je lance le programme, vous pouvez maintenant voir qu'il produit le numéro deux ici, qui est notre premier élément De même, si nous voulons accéder au numéro 12, j'en mets simplement un et je peux lancer le programme, puis il produit 12. C'est très simple, c'est ainsi que vous accédez réellement aux informations du tableau. Vous utilisez les crochets, mais vous y insérez un index. Si nous essayons d'accéder à un élément en dehors de notre tableau, par exemple l'index 45, eh bien, nous n'avons que six éléments dans notre tableau. Si nous lançons le programme, il va générer une erreur. Et généralement, l'erreur indiquera que quelque chose se trouve en dehors des limites du tableau C'est parce que nous n' avons pas 46 articles dans notre gamme. Cela nous dit juste que l'unité n'existe pas. Je ne sais pas quoi faire. Une autre chose que vous pourriez vouloir faire avec un tableau est de définir le tableau. Mais nous ne savons pas encore quelles informations nous voulons y mettre. Peut-être voulons-nous définir le tableau ici, puis faire d'autres choses intéressantes. Et plus tard, plus loin dans l'application, nous saurons peut-être enfin quels chiffres nous voulons inscrire ici. Par exemple, ce que nous faisons dans ce cas, lorsque nous définissons le tableau ici, nous voulons y mettre comme une capacité. Il est dit ici que si nous survolons réellement cette ligne rouge, la création du tableau doit avoir une taille ou un identifiant de tableau En gros, cela signifie combien d'éléments aurez-vous dans votre tableau lorsque vous voudrez utiliser votre tableau ? Je sais que je vais avoir six numéros parce que c'est comme un. Par exemple, il peut s'agir d'une application de loterie où il n'y a que six numéros. Nous le définissons avec un cinq ici. Si l'indice commence à zéro, nous avons 012345 En mettant un cinq ici, nous disons que nous allons mettre six nombres dans ce tableau. J'espère que cela a du sens. Maintenant que nous avons défini le tableau, nous devons encore l' initialiser car nous n'avons aucune valeur ici par défaut, si j'essaie d'accéder aux valeurs du tableau, même s'il n'y a aucune valeur ici, il produira zéro car c'est le comportement par défaut Ce que je veux faire, c'est maintenant mettre une valeur dans le tableau. Je vais donc mettre une valeur dans le premier emplacement qui est l'indice zéro. Et je vais mettre le numéro 777 ici. Maintenant, lorsque je lance l' application, vous pouvez voir nous pouvons voir la valeur 777 et c'est ainsi que vous initialisez un élément dans votre tableau De même, si je passe à la ligne suivante et que j'essaie de mettre une valeur dans la ligne suivante, Visual Studio prédit en fait ce que nous pourrions vouloir faire ici Vous voyez ces personnages gris ici. Cela signifie essentiellement que si vous appuyez sur la touche Tab de votre clavier. Alors faisons-le. Il va entrer cela pour nous, ce qui nous fait gagner beaucoup de temps lors de la programmation. Ensuite, nous pouvons le mettre là-dedans, par exemple. Ensuite, nous pouvons accéder à l'index 1, qui devrait être la valeur 456, ce qui est le cas. C'est en fait la façon de mettre des valeurs dans notre tableau, car nous n'avons défini qu' un tableau qui ne peut contenir que six éléments. De même, si nous essayons de mettre une valeur dans l'emplacement 45, cela générera également une erreur, car nous sommes en dehors des limites La dernière chose dont je vais parler à propos des rayons, la première chose qui précède, la dernière chose, Rays, est l'un des nombreux types de collections que vous pouvez utiliser dans C Sharp. Il y a des listes de tableaux, des listes, des dictionnaires. C'est quelque chose qui vous permettra de commencer à gérer un grand nombre de données, par exemple. La dernière chose que je vais aborder rapidement est vos tableaux peuvent contenir à peu près tous les types de données Nous pouvons avoir un tableau de chaînes, par exemple. Ce sont peut-être des noms de personnes. Ensuite, nous devons nous assurer que lorsque nous l'initialisons, il correspond bien au type de données Supprimons cela maintenant. Nous pouvons mettre quelques noms ici. On peut y inscrire Henry. Nous pouvons y ajouter notre ami Bob, et cetera. Nous avons maintenant un tableau de chaînes. D'accord, lorsque nous accédons à notre tableau, nous pouvons le faire exactement comme avant. Et il y a Access Henry, qui est le premier élément. Lorsque nous exécutons l'application, vous pouvez voir qu'elle produit Henry. N'oubliez pas que lorsque vous définissez un tableau avec un type de données de type chaîne, toutes les valeurs doivent être des chaînes. De même, si vous avez un tableau d'entiers, vous avez des entiers ici 26. 6-1. Boucles While: Maintenant, pour quelque chose de complètement différent, je vais introduire le looping en C Sharp Pour présenter la boucle, je vais présenter la boucle métallique Prenons cet exemple. Ici, j'ai un compteur de chiffres. Dès que nous ouvrons le logiciel, il dit à l'utilisateur : «   Bienvenue au compteur de numéros ». Entrez un chiffre, 1-3 Exécutons l'application. Lorsque je saisis le chiffre trois, par exemple, il compte jusqu'au nombre, je saisis 123. Si je saisis le chiffre deux, il comptera jusqu'au numéro deux. Cela est représenté par ces séries d'instructions if et else if. Si l'utilisateur en saisit deux, il affiche simplement 123123 Il compte jusqu'au nombre saisi par l'utilisateur. Cependant, considérez si nous voulons modifier cette application et demander à l'utilisateur un chiffre de 1 à 1 000, par exemple. Maintenant, comment nous pourrions représenter cela avec des instructions if pour chaque nombre, nous aurions ce bloc entier. Si nous avons le chiffre quatre, alors nous allons ajouter une autre instruction else if ici, en insérant le chiffre quatre. Ajoutez ensuite une autre ligne ici où nous comptons jusqu'au numéro quatre. Mais si nous arrivons à 1 000, ce sera énorme. La taille du fichier de notre logiciel sera énorme, il sera très lent à exécuter. Comment résoudre ce problème ? Eh bien, nous pouvons représenter toute cette logique ici en utilisant une boucle. Nous allons utiliser une boucle temporelle. Permettez-moi d'écrire le format de la boucle Y. Vous pouvez donc voir que, tout comme la déclaration, cela semble assez similaire. Considérez l'instruction if, nous avons une condition. Si la condition est vraie, cette ligne de code est exécutée une fois. Si la condition est fausse, elle passe à l'instruction if suivante et vérifie cette condition. Si c'est vrai, il exécute ce bloc de code une fois. Cependant, avec une boucle de fil, si cette condition est vraie , le contenu continuera à être répété ici. Si je mets la console, la ligne droite en est une. Si cela est vrai, il continuera à le répéter encore et encore jusqu'à ce que cela soit faux C'est ainsi que fonctionne en principe une boucle de fil. Jetons un coup d'œil à notre exemple et à la façon dont nous pouvons modifier notre application pour faire tout cela si la logique est ici dans une seule boucle filaire. Supprimons tout cela. Ce que je veux faire, c'est que je veux que cette boucle continue à tourner en boucle, en boucle et qu'elle produise le nombre jusqu' au nombre que nous avons saisi Il s'agit du numéro d'utilisateur qu'il va saisir. Et nous voulons que la boucle continue de tourner jusqu'à ce que ce nombre soit atteint OK, comment s'y prendre ? Je vais introduire une nouvelle variable et je vais l'appeler compteur. Et je vais l' initialiser à un. Quel sera le compteur ? C'est le nombre qui va continuer à augmenter de 123 jusqu'au nombre que l'utilisateur nous donne Ce que je veux faire, c'est afficher le compteur sur l'écran. Chaque fois que cette boucle de fil fait une boucle, je veux afficher la valeur du compteur. Cela commence à un, puis je veux incrémenter le compteur par un chaque fois que je pourrais faire est égal à lui-même plus un compteur a la valeur de un, mais maintenant je veux qu'il soit égal à lui-même, soit un, puis en ajouter un Maintenant, après cela, le compteur sera égal à deux. S'il recommence, le compteur sera égal à 34, et cetera. Maintenant, chaque fois que vous en ajoutez un à une variable, vous pouvez le faire de cette façon ou vous pouvez le faire de cette façon. Juste comme ça. Ce plus plus ajoute un à la valeur actuelle. C'est juste une façon abrégée de le saisir. C'est exactement la même chose. Cela ne fonctionne pas avec deux, un seul. Si vous voulez le décrémenter d'un, vous devez utiliser le négatif, le négatif, ce qui soustraira un à sa valeur Mais nous voulons simplement en ajouter un. Chaque fois que cette boucle de fil fait une boucle, elle sort le compteur 1, elle y ajoute un puis elle revient au début, vérifie la condition. Si c'est toujours vrai, elle exécutera ces deux lignes de code. Encore une fois, c'est ainsi que fonctionne la boucle de fil. Cela va continuer à tourner, mais maintenant nous avons besoin d'une condition. La condition doit être considérée comme vraie jusqu'à ce qu'elle atteigne ce que l'utilisateur a saisi, puis elle doit s'échapper de la boucle filaire et continuer avec le reste du logiciel. Quelles conditions pouvons-nous mettre ici pour que cela soit vrai ? Eh bien, nous voulons compter jusqu' au numéro de l'utilisateur. Y compris le numéro de l'utilisateur. Ce que nous voulons faire, c'est dire pendant que nous sommes au comptoir. Est inférieur au numéro de l'utilisateur, puis répétez ce code. Cependant, nous voulons également inclure le numéro de l'utilisateur. Quand il aura fini de compter, il sera inférieur ou égal à. Exécutons cette application très rapidement pour pouvoir y jeter un coup d'œil. Maintenant, entrez un nombre de 1 à 1 000. Tapons le chiffre sept, par exemple, et appuyons sur Entrée. Vous pouvez voir ici qu'il compte jusqu'à sept à partir du numéro un. C'est essentiellement ainsi que fonctionne une boucle de fil. Si nous exécutons à nouveau l'application et que nous saisissons 1 000, elle compte jusqu'à 1 000, puis s'arrête à 1 000. Vous pouvez voir qu'avec peu de code, nous pouvons reproduire toutes ces instructions if et else if Dans une boucle filaire très simple comme celle-ci, juste pour être sûr à 100 %, le logiciel fonctionne, il prend le numéro du compteur utilisateur et est initialisé à un C'est maintenant un, alors que un est inférieur ou égal au nombre que l'utilisateur a indiqué ici. Supposons que l'utilisateur ait saisi 44, tandis que 1 est inférieur ou égal à 44 Continuez ce compteur de sortie d'exécution de code jusqu'à l'écran, qui sera un. Et puis augmentez le compteur d'un. Maintenant, cela va être égal à deux. Maintenant, le compteur est égal à deux. Oui, c'est toujours inférieur ou égal à 44. Maintenant le compteur est égal à trois, il est toujours inférieur à 44. Continuez comme ça. Une fois que le compteur est égal à 45, le puits 45 n'est pas inférieur ou égal à 44. Ce qui se passe , c'est qu'il sort d'ici, passe à ici et continue avec le reste du programme C'est essentiellement ainsi que fonctionne la boucle métallique dans un magasin. Je voudrais parler de quelque chose de très important. Nous introduisons maintenant les boucles. Avec les boucles métalliques et toutes les autres boucles nous parlerons à l'avenir. Il y a un réel danger que les boucles bouclent indéfiniment. Ce ne sont que des boucles interminables. Ce qui se passe lorsque vous obtenez une boucle sans fin, c'est qu'elle consomme lentement la mémoire de votre système jusqu'à ce qu' il n'en reste plus, soit que quelque chose déborde ou qu'une catastrophe puisse se produire C'est là un réel danger. Jetons un coup d'œil à un tout petit exemple. N'oubliez pas qu'avec les instructions if, il y a une condition ici. Si cela est vrai, alors il exécutera ce code ici qui peut simplement écrire vrai ici Ce qui se passe, c'est que c'est toujours vrai, que cela sera toujours évalué comme vrai parce que j'ai écrit vrai là-bas, rien ne change cela dans ce code. Même Visual Studios note cela parce qu' il sait que cela va se répéter pour toujours. Il s'agit d'un exemple très simple. Bien entendu, cela peut être réalisé en utilisant des variables qui n'atteignent jamais leur valeur attendue. Par exemple, cela continuera à fonctionner indéfiniment si je lance le programme. Maintenant, vous pouvez voir que ça compte à l'infini. Et ce qui va se passer, c'est soit ce nombre va devenir trop important pour son conteneur, soit nous allons manquer de mémoire sur notre système. Mais en gros, cette boucle ne s' arrêtera jamais et quelque chose provoquera le plantage de ce programme. Donc ça peut être de la mémoire, ça peut être n'importe quoi. Et en général, c'est quelque chose de très inattendu. Il s'agit donc d'un exemple de cas où une boucle peut potentiellement tourner en boucle indéfiniment. C'est assez courant, et c'est pourquoi nous devons tester des logiciels pour nous assurer que cela ne se produise pas, mais nous introduisons maintenant des boucles. C'est un danger réel qui peut survenir, et vous devez en être conscient pour aller de l'avant. 27. 6-2. Boucles Do While: Je vais présenter une variante de la boucle Wile appelée boucle Il Il y a une différence très subtile entre la boucle Wile et la boucle Il La différence est que dans une boucle Il, le code contenu dans la boucle est exécuté au moins une fois. Qu'est-ce que cela signifie ? Examinons cet exemple d'application ici. Bienvenue au compteur de numéros. Nous obtenons un numéro de l'utilisateur, 1 à 1 000. Ensuite, à partir de un, nous produisons par incréments de un, les nombres jusqu'à la valeur de l'utilisateur Si l'utilisateur saisit sept, il compte jusqu'à sept , puis continue avec le reste du programme. Nous pouvons utiliser ce que l' on appelle une boucle de Wile pour obtenir à peu près la même chose ici Lorsque nous atteignons la boucle de fil, nous avons ici une condition. Le code exécute ceci, ceci, ceci, puis il atteint cette boucle de fil Si cette condition est fausse dès le départ, ce code ne sera jamais exécuté. La boucle filaire entière sera ignorée si cette condition est fausse et le reste du logiciel continuera à fonctionner avec une boucle i. Maintenant, ce n'est pas le cas, c'est parce que la condition dans une boucle ne se produit qu'une seule fois. La boucle s'est déjà exécutée au moins une fois. Réfléchis à ceci. Maintenant, cela fait exactement la même chose que l'autre morceau de code. Le logiciel s'exécute, cette ligne de code est exécutée. Ainsi, nous obtenons l'entrée de l'utilisateur, nous initialisons cette variable Maintenant que nous en sommes arrivés à cette déclaration, rien ne nous empêche d'entrer ici. C'est un ex, c' est exécuté comme ça. Et puis il y a notre état. Ces deux lignes de code ont déjà été exécutées avant que nous obtenions notre condition. Et la condition dit : le compteur est-il inférieur ou égal au nombre ? Maintenant, si c'est faux dès le départ, je pourrais même taper false ici. Ensuite, ces deux lignes de code qu'ils ont déjà exécutées, ils les ont déjà exécutées. Même si la condition est fausse, elles fonctionnent toujours. Ensuite, nous passons au reste du logiciel. Prenons cet exemple. Peu importe ce que j'ai mis ici. Vous pouvez maintenant en voir une au moins une fois en sortie. C'est parce que ces deux lignes de code ont déjà été exécutées. Même si la condition était fausse. Une boucle wile est utile lorsque vous souhaitez que le code de votre boucle soit exécuté au moins une fois Si ce n'est pas le cas, pensez plutôt à utiliser une boucle Wile. Mais les deux peuvent obtenir à peu près le même résultat. Mais c'est là la différence entre la boucle Wile et la boucle Wile 28. 6-3. Boucles pour: Je vais introduire une boucle différente maintenant appelée boucle à quatre. Une boucle à quatre boucles n'est qu'un autre moyen d'obtenir un résultat. Elle présente des avantages et des inconvénients en fonction de votre application. Prenons cet exemple ici, où nous demandons un nombre à l'utilisateur et il compte jusqu'à ce nombre en utilisant une boucle de Wile et affiche chaque chiffre en cours de route . Avec un nombre bas, quatre boucles sont légèrement différentes Vous voyez cette boucle Y ici, nous avons défini une variable juste au-dessus, puis nous l' incrémentons d' une unité à chaque itération de cette boucle Wile Lorsque la condition est fausse, elle en sort. Vous pouvez voir ici que nous avons ajouté des éléments supplémentaires à la boucle de fil afin que la boucle de fil atteigne son objectif. Maintenant à quatre boucles, il possède un mécanisme intégré qui inclut un compteur comme celui-ci. Cela va simplifier tout ce code en 14 instructions. Maintenant, qu'est-ce que tout cela signifie ? Laisse-moi t'expliquer. Nous commençons une boucle à quatre avec le mot-clé quatre comme ça. Ensuite, l'en-tête est entre crochets, tout comme la boucle de fil. Et puis il y a les bretelles frisées. En-tête d'une boucle à quatre boucles, il contient en fait un peu plus d'informations. La boucle de fil ici, nous en avons la condition, c'est la seule chose que nous avons ici. Mais la boucle à quatre nécessite en fait la définition du compteur et l'incrémentation du compteur L'en-tête nécessite trois éléments. C'est parce que la boucle à quatre boucles gère notre compteur car elle a besoin de connaître ces informations, mais elle doit également connaître la condition. Et c'est ainsi que nous entrons et sortons de la boucle à quatre. Par exemple, tout comme une boucle temporelle, elle a besoin de trois informations. Je vais utiliser exactement les mêmes noms ici, peut-être avec un numéro un par la suite Je ne peux pas utiliser de variables portant le même nom. Je vais copier l'endroit où nous avons initialisé notre compteur ici. Je ne peux pas avoir le même nom. Je vais juste mettre un numéro un après. La prochaine chose dont j'ai besoin, c'est la condition. Nous séparons ces trois éléments par un point-virgule. Puis je pose à nouveau la condition, je ne peux pas avoir le même nom. Ensuite, pour le dernier, j'ai besoin de l'incrémental, encore une fois, je ne peux pas avoir le même nom que la boucle filaire ci-dessus Maintenant, c'est exactement la même chose que ci-dessus, à part cette ligne que je vais mettre ici. Maintenant, ce bloc fait exactement la même chose que tout cela. Ici, vous pouvez voir l'avantage dans ce cas d'une boucle à quatre boucles par rapport à une boucle de fil. C'est parce qu'il suit automatiquement nos compteurs en coulisse. Chaque fois que les quatre boucles itèrent, ce compteur est incrémenté d'un à chaque fois Si nous le voulons, nous pouvons l'augmenter de deux à chaque fois que nous faisons un compteur égal à un plus deux Et cela augmentera le compteur de deux à chaque fois, par exemple, nous pourrions l'augmenter de huit à chaque fois C'est vraiment à nous de décider ce que nous voulons faire de l'incrémental Mais en général, vous verrez des gens l'augmenter d'un à chaque fois. Dans certains cas, vous souhaiterez peut-être diminuer la valeur d'un à chaque fois. Cela dépend vraiment de vous, c'est notre augmentation. Le troisième article, l' article du milieu, est notre état. C'est donc exactement la même chose qu' une boucle de fil dans ce cas. Le premier élément est l'endroit où nous définissons notre compteur. Nous devons donc dire, hé, nous configurons une nouvelle variable et nous l'initialisons à une Dans ce cas, nous pouvons l'initialiser à zéro si nous le voulons, mais nous devons l'initialiser On ne peut pas le laisser vide, on l'initialise à un Dans ce cas, cela fera exactement la même chose que ce morceau de code. Ici, permettez-moi simplement de vous le démontrer. Voici maintenant notre boucle. Nous allons saisir le chiffre sept. Pourquoi pas ? Vous pouvez voir que ça compte jusqu'à sept. Maintenant, je vais supprimer complètement notre boucle while et y insérer nos quatre boucles en panne, beaucoup moins de lignes de code. Je vais lancer l'application, je vais mettre le chiffre sept, et elle fait exactement la même chose que la boucle de fil. C'est plutôt cool, n'est-ce pas ? 29. 6-4. Boucles pour les boucles vs Boucles While: Vous devez vous poser la question suivante. Si une boucle à quatre comporte toute cette simplification, elle est ici intégrée, incrémentielle Pourquoi ne l'utilisons-nous pas toujours ? Pourquoi même s'embêter avec une boucle métallique, par exemple ? Eh bien, en général, quatre boucles sont utilisées lorsque nous savons combien de fois la boucle va itérer. Par exemple, lorsque l' utilisateur saisit ce nombre, nous comptons à partir de un, nous incrémentons de un et nous échappons à la boucle lorsque le compteur est inférieur à un Cette section affichera des nombres de 1 à 10 chaque fois qu'elle sera incrémentée d'une unité Et quand il ne sera finalement plus inférieur ou égal à dix, il s'échappera. Cependant, avec une boucle de fil, nous pouvons le faire, mais les boucles de fil sont meilleures lorsque nous ne connaissons pas le nombre d' itérations à l'avance. Par exemple, ai-je faim ? Initialisons une variable booléenne appelée am I hungry et définissons-la sur true parce que j'ai Maintenant, lorsque nous entrons dans la boucle de fil, nous n'avons pas besoin de savoir combien de fois elle va tourner en boucle. Nous n'avons pas besoin de suivre un compteur ou toutes ces informations, nous n'en avons pas vraiment besoin. La seule condition que nous avons ici, par exemple, c'est si j'ai faim ? Eh bien, oui, c'est vrai. OK, c'est vrai. Ensuite, à l'intérieur de la boucle WOW, nous pouvons appeler une méthode appelée eat food. Ensuite, nous pourrons vérifier si nous avons encore faim. Ensuite, nous pourrons continuer à tourner en boucle. Enfin, une fois que nous aurons mangé suffisamment, je n'ai plus faim, alors je pourrai m'en sortir. Mais je ne sais pas combien de fois cette boucle va tourner jusqu'à ce que je sois pleine. C'est donc une inconnue. C'est pourquoi les boucles de fil sont bonnes pour cela, car nous ne savons pas combien d'itérations cela va se produire Mais nous le découvrons à l'intérieur de la boucle elle-même. C'est pourquoi les boucles de fil sont bonnes. Le nombre d' itérations est inconnu, c'est pourquoi quatre boucles sont bonnes Lorsque nous connaissons réellement le nombre d'itérations, nous pouvons simplifier cela beaucoup plus facilement avec une boucle à quatre boucles 30. 6-5. Boucles de Foreach: Je vais maintenant présenter une nouvelle boucle, appelée boucle à quatre pour chaque boucle. Maintenant, l'avantage d'une boucle à quatre par rapport, disons, une boucle à quatre, c'est qu'elle améliore la lisibilité Et cela fonctionne beaucoup plus facilement avec les collections . Maintenant, qu' est-ce que tout cela signifie ? Eh bien, jetons un coup d'œil. J'ai un exemple d'application ici. Je suis en train de configurer un réseau. Il s'agit d'un tableau d'entiers, appelé nombres. J'initialise le tableau avec tous ces nombres ici. Tous ces nombres seront inclus dans cette variable appelée nombres. J'utilise maintenant une boucle à quatre, qui va parcourir à tour de rôle tous les nombres du tableau, puis les afficher à l'écran. Lancez l'application ici. Vous pouvez voir ici que l'application contient chacun des numéros de notre tableau. Nous parcourons simplement notre tableau à vélo et sortons chaque chiffre en cours de route Nous utilisons la propriété length du tableau pour définir une condition pour cela. Ce que je vais faire maintenant, c'est présenter les quatre boucles de chaque boucle. La première chose que j'ai dite, c'est que chaque boucle offre quatre points de lisibilité Voyons cela maintenant, lorsque nous configurons une boucle à quatre pour chaque boucle, nous utilisons le mot clé. Pour chacune d'entre elles, nous avons des parenthèses, comme dans le cas d'une instruction if normale Quatre instructions en boucle, par exemple. Ensuite, nous avons les bretelles bouclées familières. Voyons à quoi ressemble une boucle de quatre par boucle. Je vais faire exactement la même chose que pour les quatre boucles. Vous pouvez donc le voir représenté sous la forme de quatre boucles de chaque boucle. Dans la tête des quatre boucles, je place une variable, je dis en chiffres. Ensuite, pour chaque itération des quatre boucles, je veux afficher la variable num. Maintenant, qu'est-ce que tout cela signifie ? Eh bien, pour commencer, vous pouvez voir la lisibilité est bien meilleure Il y a beaucoup moins de code ici. Il a l'air beaucoup plus propre, plus petit et il fait moins de ballonnements Mais comment fonctionne-t-il ? Que se passe-t-il ici dans une boucle à quatre ? Vous pouvez voir que nous avons configuré une variable ici. À chaque itération, nous pouvons utiliser cette variable ici Il en va de même dans une boucle de quatre pour chaque boucle. À chaque itération, cette variable sera égale à la valeur suivante de notre tableau La première fois que cela exécute la première itération, num sera égal à un À la deuxième boucle, num sera égal à quatre. Neuf pour la troisième fois. Par exemple, dans une boucle à quatre, cela équivaut à l'indice Comme nous ne faisons que compter à partir de zéro, nous incrémentons zéro par un et nous y mettons fin lorsque num est égal ou supérieur à la longueur des nombres du tableau. Cependant, dans une boucle à quatre pour chaque boucle, cette variable est en fait égale aux valeurs du tableau, et non à l'index L'indice est 0123. Mais dans une boucle de quatre pour chaque boucle, Numb sera égal à la valeur réelle, 14912, etc. Nous sommes juste en train de le diffuser à l'écran. Vous voyez ici que nous utilisons un index dans la boucle à quatre pour accéder au nombre situé derrière l'index 149. Mais dans une boucle à quatre, il est en fait défini car la valeur num est la valeur. Nous affichons simplement la valeur à l'écran. Laissez-moi vous le prouver si je lance l'application. Vous pouvez maintenant voir qu' il affiche tous les nombres du tableau ici La deuxième chose que j'ai dit, c'est que cela fonctionne beaucoup mieux avec les collections. Nous avons maintenant utilisé un tableau standard comme ce tableau d'entiers, mais il existe beaucoup plus de types de tableaux et de collections dans C Sharp, par exemple, comme des listes et divers éléments du genre, car chacun offre une meilleure lisibilité avec ceux-ci et une meilleure lisibilité avec ceux-ci et vous donne également plus d'options pour les C'est l'avantage d'une boucle pour chaque boucle. Vous pouvez le constater car c'est beaucoup plus lisible. Nous n'avons pas besoin de définir cette variable ici et de suivre un compteur. C'est très simple à cet égard. C'est-à-dire une autre boucle en pointillé, et c'est la même pour chaque boucle. 31. 6-6. EXERCICE - Dessiner un cube: Je vais tester tes connaissances maintenant. Nous avons maintenant couvert quelques boucles. Et nous allons dessiner un cube. Qu'est-ce que cela signifie ? Eh bien, par exemple, si l' utilisateur entre le chiffre cinq et que nous appuyons sur Entrée, il dessine le cube. Vous pouvez voir qu'Astérix est en travers et cinq en bas. Si l'utilisateur saisit six, ce sera six en travers et six en bas. Comment y parvenir ? Jetons un coup d' œil au code ici. Maintenant, ça ne fait pas grand-chose en ce moment. Nous demandons à l'utilisateur de saisir un nombre, puis nous stockons sa réponse dans une variable appelée num. Nous ne faisons rien. aborder ce problème ? Comment dessinons-nous ces cubes ? Eh bien, nous avons besoin d'un mécanisme pour continuer à dessiner Astérix à l'écran jusqu'à ce que nous atteignions le numéro de l'utilisateur Quand quelque chose continue de faire quelque chose, nous pensons en boucle dans notre tête. Nous avons besoin de quelque chose pour continuer à faire quelque chose, quelque chose qui continue à tourner dans notre tête Nous devrions penser, d'accord, nous avons besoin d'une boucle ici. Je ne sais pas combien de boucles ou quel type de boucle, mais je sais que j'ai besoin d'une boucle, donc c'est un bon début. Maintenant, quand j'ai parlé de quatre boucles par rapport aux boucles filaires, j'ai dit qu'une boucle à quatre boucles est une bonne chose quand on sait combien d'itérations elle va faire Vous pouvez utiliser une boucle métallique, mais je dis juste qu'une boucle à quatre serait mieux. Dans ce cas, nous connaissons nombre d'itérations car nous avons le numéro saisi par l'utilisateur, qui sera la taille du cube Une boucle à quatre serait un bon début pour ne pas aborder ce problème Commençons par créer une boucle à quatre en utilisant les quatre mots clés ici. Maintenant, le format des quatre boucles. Il faut trois choses. Nous devons initialiser une variable. Je vais l'appeler y, je vais l' initialiser à zéro Maintenant, nous avons besoin de notre condition. Je veux qu'il continue à tourner en boucle jusqu'à ce qu'il soit inférieur à ce que l'utilisateur a saisi Ensuite, je veux juste l'incrémenter d'un à chaque fois. Maintenant, je veux afficher un Astérix à l'écran. Supprimons cela et ajoutons un astérix dedans. Exécutons notre programme et voyons ce que nous avons obtenu jusqu'à présent. Entrez le chiffre cinq. Vous pouvez voir que l' Astérix est en train de couler. Nous avons cinq Astérix. Ils vont tous à la verticale. Nous en sommes à mi-chemin en ce moment. Mais ce que nous devons faire, c'est également faire passer les Astrix Chaque fois que cette boucle à quatre itérations, elle dessine un Astérix et passe à la ligne suivante, dessine un Astérix, passe à la À chaque itération, nous avons besoin d'un apport. Astérix va aussi dans cette direction. Chaque fois que la boucle se répète, comment pouvons-nous obtenir quelque chose pour continuer à faire quelque chose ? Eh bien, c'est une boucle. Ce que nous pourrions faire, c'est mettre une boucle à l'intérieur d'une boucle. Jetons un coup d'œil à ça. Nous ne pouvons pas avoir deux fois le même nom de variable. Vous pouvez voir que y est utilisé par cette boucle. Il va falloir renommer celui-ci. Appelons celui-ci X sans aucune raison réelle. Cela peut être n'importe quoi. Cela peut être un cheeseburger si vous le voulez vraiment Nous avons maintenant deux boucles. Nous avons ce qu'on appelle une boucle imbriquée. Une boucle à l'intérieur d'une boucle. Chaque fois que cette boucle itère, elle fait tout cela. Réfléchis à ça. Lancez donc le programme maintenant et voyons à quoi nous avons affaire. J'entre le chiffre cinq et maintenant, ouah, que se passe-t-il maintenant ? Nous avons 25 étoiles qui descendent. C'est un peu faux, n'est-ce pas ? Pourquoi fait-il cela ? C'est parce que chaque fois que cette boucle est exécutée, elle exécute cette boucle. Et chaque fois que cette boucle se déroule, nous écrivons en fait l'Astérix ici, mais aussi une nouvelle ligne Et maintenant c'est un problème pour nous. Nous ne voulons pas écrire une nouvelle ligne à chaque fois que cela s'exécute. Sinon, nous allons juste avoir des Astrixes verticales. Ce que nous pouvons faire, c'est introduire une nouvelle méthode appelée, right. Ce que ça fait, ça écrit tout ce qui se trouve dans cette chaîne ici, tout ce qui se trouve ici. Mais cela ne crée pas de nouvelle ligne par la suite. Cela permet de rester sur la même ligne. C'est la différence entre la ligne droite qui écrit ceci et place ensuite une nouvelle ligne. Cependant, right écrit simplement ceci et ne met pas de nouvelle ligne. Jetons un coup d'œil à ça. Passons maintenant au numéro cinq. Maintenant, vous pouvez voir, oh, tous les Astérix passent par l'axe X. Maintenant, ils sont tous confrontés à ce qui se passe ici. Eh bien, c'est parce que nous n' écrivons aucune ligne en ce moment. C'est à peu près une écriture dans un sens. Je dois commencer à intégrer ces nouvelles lignes. À l'heure actuelle, nous en avons 25 qu' Astérix traverse. Je veux une nouvelle ligne toutes les cinq. Maintenant, nous savons que si l'utilisateur entre le chiffre cinq ici, cette boucle interne sera itérée cinq fois. Une fois la cinquième boucle terminée, le code terminera cette boucle et continuera à exécuter le reste du code jusqu'à ce que la première boucle recommence à zéro. Ici, je dois entrer une nouvelle ligne. Comment saisir une nouvelle ligne ? Il existe de nombreuses façons, mais en utilisant les connaissances que nous connaissons déjà, nous pouvons simplement le faire. Nous n'écrivons rien. Mais ensuite, il ajoute cette ligne par la suite. Exécutons ça. Passons maintenant au chiffre six, juste pour prouver que ce n'est pas un hasard, il va en fait faire grossir un cube pour un nombre différent Maintenant, nous avons 123456 sur 123456 vers le bas. Nous l'avons pratiquement fait. Passons en revue ce code très rapidement. Nous pouvons prendre le numéro de l'utilisateur. Nous avons maintenant une boucle imbriquée. La première fois que cette boucle itère, elle exécute ce code ici, qui est également une autre boucle Maintenant, il entre ici et affiche un Astérix à l'écran Par exemple, si l'utilisateur saisit le chiffre cinq, remplacons-le. C'est plus lisible. Il va l'exécuter cinq fois. Nous avons maintenant cinq Astérix à l'écran. Une fois cette boucle terminée, maintenant terminée. Nous allons maintenant imprimer une nouvelle ligne à l'écran. Nous avons entré une nouvelle ligne, elle va ressembler à ceci. Nous commençons maintenant notre boucle pour la deuxième fois, la boucle principale. Une fois cette boucle démarrée, elle réexécute cette boucle cinq fois. Maintenant ça va ressembler à ça. Une fois la boucle terminée, elle imprime une nouvelle ligne. Maintenant ça ressemble à ça, puis ça revient en haut. C'est ainsi que cela fonctionne, afin que vous puissiez visualiser ce qui se passe ici. La réponse à notre problème. Si nous voulons créer un cube et dessiner Astérix est en train de descendre, alors une boucle Mais si nous voulons également qu'ils descendent et traversent, considérez quelque chose comme une boucle imbriquée C'est ainsi que nous pouvons résoudre ce problème en utilisant des boucles pointues. 32. 7-1. La déclaration de pause: Je vais donc introduire un nouveau type de déclaration appelé déclaration de rupture. Maintenant, lorsque nous avons parlé des instructions switch , nous avons brièvement abordé l'instruction break, mais pas vraiment en détail. Mais maintenant, je vais expliquer exactement ce que cela fait comment cela fonctionne et comment cela peut réellement nous être bénéfique. La pause est essentielle. Lorsque vous utilisez une instruction switch , l'utilisateur saisit, par exemple, un jour de la semaine. Nous stockons la réponse dans une variable. Et puis s'ils entrent, par exemple, mercredi, cette ligne de code est exécutée ici. Une fois cette ligne de code exécutée, cette instruction break, elle échappe à cette instruction switch et le flux de contrôle de l'application continue Qu'est-ce que j'entends par flux de contrôle ? Eh bien, lorsque nous lançons notre logiciel, la méthode principale est exécutée automatiquement. Ensuite, la première ligne de code est exécutée, la deuxième ligne, et elle est séquentielle, elle s'exécute de bout en bas. C'est le flux de contrôle, c'est ainsi que votre application est exécutée. Mais le problème avec l'instruction switch, c'est que lorsque le flux de contrôle atteint un mot clé break ici, plutôt que d'exécuter la ligne suivante, la suivante, la suivante tout en bas, il appuie sur le flux de contrôle atteint un mot clé break ici, plutôt que d'exécuter la ligne suivante , la suivante, la suivante tout en bas, le mot clé break, puis il saute immédiatement tout après avoir continué C'est le pouvoir de l'instruction break lorsqu'elle est utilisée dans une instruction switch. Voyons comment l'instruction break peut être utilisée dans quelque chose comme une boucle de fil. Regardons un exemple simple : ce que nous faisons, nous demandons à l'utilisateur de saisir un numéro. Ce que fait ce programme, un programme simple, nous ne faisons que compter jusqu'à ce chiffre. Si je lance le programme ici et que l'utilisateur saisit le chiffre huit, nous ne comptons que jusqu'au chiffre huit. C'est très simple. Pour ce faire, nous utilisons une boucle Wile Nous avons une condition ici. Nous disons que si notre compteur est inférieur ou égal au numéro de sortie de l' utilisateur, le compteur incrémente ensuite le compteur d'un et nous faisons simplement une boucle Son fonctionnement est très simple. Parfois, lorsque vous créez une boucle, comme une boucle de fil par exemple, ou même une boucle à quatre, il se peut que vous n'ayez aucune condition. Dans ce cas, nous définissons une condition parce que nous savons ce que l' utilisateur va saisir, et nous comptons jusqu'à cela. Mais dans certains cas, nous n'avons aucune condition. Nous ne pouvons pas avoir de condition. Il se peut que nous ne sachions pas quel est l'objectif final et que nous puissions en fait le définir à l'intérieur de notre boucle filaire. Tu sais, quelque chose pourrait être découvert plus tard. Par exemple, si vous téléchargez un fichier sur Internet et que nous le téléchargeons en plusieurs parties, il se peut que nous ne connaissions pas la taille du fichier que nous téléchargeons. Dans ce cas, nous pouvons configurer une boucle de fil et continuer à tourner boucle indéfiniment jusqu'à ce que le fichier soit téléchargé Dans de tels cas, nous n'avons aucune condition. Donc, ce que nous pouvons faire ici, c'est établir une condition qui soit toujours vraie. Cela va faire une boucle indéfinie jusqu'à ce que, par exemple, nous ayons téléchargé tout le fichier et que nous puissions ensuite sortir de la boucle manuellement. Cela peut également être assez courant dans le cas où nous n'avons aucune condition et que également être assez courant dans le cas où nous n'avons aucune nous avons simplement cette boucle de fil indéfiniment Nous pouvons simplement la sortir de cette boucle pour l'empêcher de se boucler indéfiniment C'est une bonne façon d' utiliser le mot clé break. Nous pouvons l'utiliser dans les instructions switch, mais nous pouvons également l'utiliser lorsque nous avons une condition indéfinie, qui est toujours vraie Par exemple, examinons cet exemple. Et ce que je vais faire, c'est le réécrire en utilisant plutôt un mot clé break, et il fera exactement la même chose Disons que nous n'avons aucune condition pour cette boucle de fil. Ça va tourner en boucle indéfiniment. Nous avons besoin d'un moyen de sortir d'ici, afin de ne pas être coincés dans une boucle interminable. Ce que nous allons dire, c'est que si le compteur à un moment donné est supérieur au nombre saisi par l'utilisateur, alors sortez de la boucle. Vous pouvez voir que dès que j'ai saisi ce mot clé break, ce mot clé wire a également été surligné, et Visual Studio nous aide à y Par exemple, nous pourrions avoir une boucle de fil à l'intérieur d' une autre boucle de fil. À l'intérieur d'une boucle à quatre, nous pouvons avoir des boucles en cascade. Et cela peut être assez déroutant lorsque vous utilisez un mot clé. Break Visual Studio dit simplement, d'accord, vous avez saisi le mot clé break, c'est la boucle à laquelle il est lié Et c'est de cette boucle que vous allez sortir, tout comme l'instruction switch. Par exemple, ce mot clé break empêchera cette boucle de fil de se répéter indéfiniment. C'est littéralement dire, d'accord, cette condition est évaluée comme vraie, sortons de cette boucle et continuons avec le reste du programme Le mot clé brake contrôle le flux d'exécution du code. Il s'agit essentiellement de dire : partons d' ici et continuons avec le reste du programme. C'est ce que fait essentiellement le mot clé brake. Lancez le logiciel et confirmons qu' il fait exactement la même chose. Entrez le chiffre huit par exemple. Vous pouvez voir que ça compte jusqu'à huit. L'utilisation du mot clé brake est une autre façon d'atteindre l'objectif par le passé, mais il est couramment utilisé, par exemple, lorsque vous n' avez pas vraiment de problème et que vous souhaitez échapper à une boucle C'est la puissance de l' actionnement du frein en do dièse. 33. 7-2. La déclaration suivante: La déclaration continue, c'est quoi ? À quoi ça sert ? Maintenant, j'ai expliqué la déclaration de rupture. Et une instruction de pause, juste comme un rappel, vous permet de sortir complètement fil et de poursuivre le reste du programme Les instructions Break peuvent être utilisées dans quatre boucles. Des boucles complètes, quatre boucles de chaque, toutes sortes de boucles. Juste pour sortir de la boucle, ça ne tourne pas en boucle indéfiniment Cependant, la déclaration continue, cela ne fait qu'ignorer une itération d'une boucle Ce que je vais faire, c'est vous montrer comment fonctionne la déclaration continue en quatre boucles. Prenons cet exemple. Ici, je demande à l'utilisateur de saisir un chiffre sur ce que je vais faire, je vais compter jusqu' au chiffre dix, mais je vais ignorer le nombre saisi par l'utilisateur. Jetons un coup d' œil à cet exemple. Je vais donc saisir le chiffre six, et vous pouvez voir le résultat ici. Je compte à partir de zéro, je vais jusqu'à dix, mais j'ignore le numéro de l'utilisateur Le numéro six. Il va de 5 à 76, c'est ignoré J'utilise une boucle à quatre boucles pour y parvenir. Je compte 0 à 10. J' utilise une variable appelée. Je dis que si le compteur n'est pas égal au numéro de l'utilisateur, il suffit de l' afficher dans la fenêtre. Quelques anecdotes pour vous, si vous avez entendu parler du langage de programmation C. De plus, nous avons déjà parlé des incréments, où vous ajoutez un à une variable, vous mettez plus, plus Vous pouvez voir maintenant comment est né Plus Plus, né Plus Plus le langage de programmation C plus, en plus, c'est juste un de plus que son prédécesseur. C'est plutôt cool, n'est-ce pas ? Si vous vous êtes déjà posé la question. Quoi qu'il en soit, comment pouvons-nous y parvenir en utilisant une instruction continue ? Jetons un coup d'œil à ça. Je vais le réécrire en utilisant une instruction continue. Je vais dire que si le compteur actuel est égal au numéro de l'utilisateur, alors continuez. Cela va faire exactement la même chose. C'est ici, laisse-moi le prouver. Entrez le chiffre six. Encore une fois, vous pouvez voir qu'il a en fait ignoré le numéro six. Comment cela fonctionne-t-il ? Une chose que vous remarquerez en tapant « continuer » ou en passant la souris dessus, tout comme l'actionnement du frein, vous indiquera à quelle boucle il est lié Nous avons écrit «   continuer ». C'est dire, d'accord, nous sommes liés à cette boucle à quatre boucles ici. Par exemple, si le compteur actuel est égal au numéro de l'utilisateur, continuez. Que fait Continue ? Cela empêche l'exécution du reste du contenu de la boucle. Dès qu'il est lancé, continuez ici, il revient au début des quatre boucles et continue vers le bas. Ce code n'est jamais exécuté ici. Même si j'ai beaucoup de code ici, tout cela ici, si cette instruction continue est exécutée, tout cela est ignoré et le flux de contrôle revient au début de la boucle. Nous continuons à descendre. Encore une fois, cela modifie le flux d'exécution comme le fait l'instruction break. Mais la façon dont l' instruction break sort complètement de la boucle et continue l'instruction continue empêche simplement l'exécution du reste de l'itération en cours de la boucle Ensuite, il revient au début, puis continue à tourner en boucle normalement C'est la différence entre la déclaration continue et la déclaration de rupture que je peux vous montrer. Maintenant, si je supprime complètement cette condition, ces quatre boucles ne feront pratiquement rien. Parce que ce code n'est pas accessible ici. Même Visual Studio est gradué, qui vous indique que cela ne sera jamais exécuté parce que nous n' avons aucune condition ici À chaque itération de ces quatre boucles, nous arrivons simplement à cette déclaration continue Et on va juste revenir au point de départ dans cette petite boucle. C'est donc le pouvoir de la déclaration continue en do dièse. 34. 8-1. Gestion des exceptions (essayer, attraper, enfin): Je voudrais maintenant parler de la gestion des erreurs ou de la gestion des exceptions. Ils sont synonymes dans le monde du do sharp lorsqu'il s'agit d' exceptions, sont des résultats auxquels on ne s'attend pas. Si vous regardez une exception dans le dictionnaire, il s'agit d'une personne ou d'une chose exclue d'une déclaration générale et, plus important encore , elle ne suit aucune règle. Jetez un œil à cet exemple ici. Nous demandons deux chiffres à l'utilisateur. Nous mettons leur entrée, qui est une chaîne, dans une variable entière ici. Et nous utilisons la méthode pour int 32. Pour atteindre cet objectif, nous prenons une chaîne et la convertissons en un entier. La deuxième chose que nous faisons ici est de diviser les deux nombres ensemble et placer dans une variable appelée résultat. Maintenant, ce programme est assez floconneux. Quelques erreurs peuvent survenir si nous ne faisons pas attention. Des erreurs peuvent généralement se produire lorsque nous traitons avec des car les utilisateurs font des choses auxquelles nous ne nous attendons tout simplement pas. Parfois, si je lance l'application, entrez votre premier numéro. Et si l'utilisateur tape simplement bonjour ? Et s'ils l'ont mal lu et ont saisi leur adresse e-mail ? Les utilisateurs peuvent tout faire. Et s'ils appuyaient accidentellement sur Entrée et ne mettaient aucun chiffre ? Un utilisateur peut faire de nombreuses choses pour potentiellement endommager votre logiciel. C'est ce qu'on appelle des choses inattendues si je tape beaucoup de lettres et que j'appuie sur Entrée. Maintenant, vous pouvez voir que nous avons ce joli petit message d'erreur ici. Il indique que l'exception n'est pas gérée. Cela signifie essentiellement, d'accord, qu' une erreur s'est produite, qu'une exception s'est produite. Et ce n'est pas géré, ce qui signifie que nous ne faisons rien pour y remédier L'ordinateur ne peut rien faire pour corriger cette erreur car il essaie de la convertir en nombre. Il ne peut tout simplement pas le faire. Il ne sait pas quoi faire. Nous devons donc indiquer au système comment gérer ce type d'erreur. Si je regarde ce logiciel ici, cette erreur se produit lorsque nous prenons l'entrée de l'utilisateur, puis que nous essayons de la convertir en nombre. Si je passe la souris sur cette méthode, que nous utilisons cette méthode, à 32, vous pouvez voir cette boîte de dialogue apparaître Il nous indique à quoi sert la méthode. Il nous indique ce que la méthode nous donne en retour. Mais il y a aussi cette information supplémentaire au bas de la page indique les exceptions. Voici maintenant les deux erreurs possibles qui peuvent survenir lors de l'utilisation de cette méthode jusqu'à 32. La première est l'exception de format. C'est l'erreur que nous venons de rencontrer. Nous tapons un mot par exemple, puis il génère ce que l' on appelle une exception de format. C'est parce que le format n'est pas correct. Il attend un chiffre, nous avons quelques lettres, le format est incorrect. L'autre erreur est une exception de débordement. Je suppose que c'est à ce moment que vous entrez un très grand nombre et qu'il ne peut pas l'intégrer physiquement dans le type de données qui est un entier Maintenant, un entier de 32 bits passe à environ 2 milliards. Si j'essaie de saisir 5 billions de dollars, cela provoquera probablement cette autre erreur, l'exception de débordement Ce que nous pouvons faire à ce sujet, c'est gérer ce type d'erreurs. Quand l'ordinateur dit, oh, vous m'avez donné un mot, je voulais un entier, je ne peux pas convertir ces mots en entier. Nous pouvons l'intercepter et dire, accord, les utilisateurs ont saisi quelques mots Maintenant, je vais vous dire comment gérer cela, voici comment vous abordez ce problème. La deuxième erreur qui peut survenir est que lors de la division par zéro, nous prenons les deux nombres de l'utilisateur. En supposant qu'ils aient saisi deux nombres valides, nous essayons de les diviser. Cependant, si le deuxième chiffre est un zéro , une autre erreur va se produire. Si je mets zéro, nous avons maintenant une autre erreur. Maintenant, c'est à nouveau incontrôlé parce que nous n'y faisons rien Et ce type d'erreur est une exception de division par zéro. Le message que nous essayons de diviser par zéro. L'ordinateur ne peut pas le faire physiquement. Il ne sait pas comment mathématiquement, il ne peut pas diviser par zéro Mais nous ne lui disons pas comment contourner ce problème. C'est le but de ce tutoriel. Maintenant je vais vous montrer comment nous pouvons gérer les exceptions. Maintenant, ce sujet est assez approfondi, mais nous allons simplement gratter la surface ici Ce que nous utilisons ici est un mot clé appelé tri. C'est assez simple, SEC comme la plupart des mots clés. Nous avons nos bretelles bouclées habituelles. Nous mettons un corset bouclé ici, ce que fait Tri, c'est dire : peux-tu essayer de faire quelque chose pour moi, s' Parce que j'ai le sentiment qu'une erreur va se produire. Nous le savons, car lorsque nous survolons cette méthode, deux erreurs peuvent se produire Comme nous demandons des informations à l'utilisateur, nous savons qu'il y a un signe de problème à venir. Nous disons essentiellement, s'il vous plaît, essayez ceci. C'est ainsi que fonctionne le mot clé tri. Nous essayons quelque chose. Maintenant, que se passera-t-il si cela échoue ? Une tentative aboutira et le programme s'exécutera normalement, ou une erreur peut se produire. Cette partie est le mot clé catch. Encore une fois, des bretelles bouclées, comme avant. Maintenant, un essai ne peut pas exister sans un hic. Si je supprime le mot clé catch ici, nous aurons une ligne rouge. Si je passe la souris dessus, cela indique la capture prévue Ou enfin, remettons ça en place. La ligne rouge a disparu. C'est bien dans cette section de capture ici, ce code s'exécutera si une erreur se produit ici. Cela indique au système comment gérer cette erreur. Disons simplement qu'une erreur s'est produite. Signalons à l'utilisateur qu'une erreur s'est produite. Très générique. Je pense que si je voyais cette erreur, je serais ennuyé en tant qu' utilisateur car je n'ai aucune idée de ce que cela signifie C'est très générique, mais nous pourrons développer cela plus tard. Voyons juste si cela fonctionne. Entrez votre premier chiffre, mettons des mots ou des lettres. Vous pouvez maintenant voir que nous avons une erreur générique. Une erreur s'est produite maintenant. Notre logiciel n'est pas tombé en panne, c'est donc une bonne chose. Mais ce n'est pas vraiment révélateur d'autant d'informations. Nous avons juste reçu ce message générique. Nous ne savons pas pourquoi cela s'est produit, nous ne savons pas ce qui s'est mal passé. Cela ne nous est pas très utile, mais au moins notre logiciel n'est pas tombé en panne. C'est donc un bon signe. Voyons maintenant comment nous pouvons donner de meilleurs commentaires à l'utilisateur. Nous ne voulons pas leur dire qu'une erreur s' est produite car il ne s'agit pas d'une information vraiment utile. L'utilisateur ne peut alors pas revenir en arrière et découvrir ce qu'il a mal fait. Ce que nous pouvons faire ici à côté de catch, c'est ouvrir et fermer les parenthèses, taper exception , puis lui donner un nom Cela peut être n'importe quoi, cela peut être EX, vous pouvez l'appeler comme vous voulez. En gros, il s'agit d'une variable que nous sommes en train de configurer . Le type de données est de type exception. Exactement comme nous avons un type de données int, celui-ci est une exception. Nous aborderons maintenant ce que l' on appelle un cours plus tard, mais ne vous inquiétez pas pour le moment. Mais maintenant, nous avons défini cette variable appelée E, qui est de type de données exceptionnel. Nous pouvons l'utiliser pour obtenir des informations sur notre erreur. Ce que je vais faire ici c'est que lorsque nous joignons des chaînes, nous utilisons un plus ici. Je vais dire que le message est une propriété de chaîne de cette variable d' exception ici, cela va nous donner quelques commentaires, le message d'erreur qui explique la raison de l' exception. Maintenant, si je lance l'application maintenant et que je saisis le premier chiffre, qui est un grand nombre de lettres, nous avons maintenant un peu plus d' informations, une erreur s'est produite. La chaîne d'entrée n'était pas au format crack. Maintenant, quand l'utilisateur lit ceci, il peut penser, oh, d'accord, oui, j'ai mal lu la question, je pensais qu'elle demandait mon adresse e-mail ou quelque chose comme ça. Nous fournissons donc maintenant informations utiles à l'utilisateur. Maintenant, et si nous voulons personnaliser ? Que va-t-il se passer ? En fonction du type d'erreur qui s'est produit. Maintenant, n'oubliez pas qu'il y a quelques problèmes avec cette application. Deux ou trois choses qui peuvent se produire. Premièrement, l'utilisateur peut saisir des lettres mais il ne peut pas les convertir en nombre entier. Nous avons examiné cela maintenant. L'autre est que nous essayons de diviser par zéro. Mais ce qui se passe ici, c'est que nous ne faisons que cette seule ligne de code. Quoi qu'il arrive ici, une erreur se produit. Comment pouvons-nous le personnaliser ? Dites peut-être à l'utilisateur qu'il a fait quelque chose de mal. S'ils entrent accidentellement des lettres, alors faites peut-être autre chose. Si nous divisons par zéro, ce que nous pouvons faire ici, c'est détecter différents types d'exceptions. Si je copie et colle ceci, je vais le mettre ici deux fois, et je vais bientôt expliquer pourquoi. La première exception qui peut se produire est l'exception de format. Ce que je peux faire ici, c'est détecter l' exception de format ici. Ce qui se passera ici, c'est que si une exception de format se produit, erreur liée au formatage, nous pouvons dire à l' utilisateur, je ne sais pas. Nous pourrions leur transmettre un message vraiment sarcastique. Nous pourrions dire « apprenez à lire correctement parce qu'ils n'ont manifestement pas lu la question qui consistait à saisir un numéro, puis saisir leur adresse e-mail, par exemple. L'autre était divisé par zéro, d'accord ? Donc, divisez par zéro l'exception et le message que je voudrais peut-être donner à l'utilisateur, hé mon pote, vous ne pouvez pas diviser par zéro. Ce que vous faites alors s'il ne s'agit pas d'une erreur possible et que ce n'est pas une erreur possible, alors c'est une erreur générique. Quand nous avons eu cette déclaration if, nous l'avons fait, puis finalement nous avons eu une autre déclaration à la fin, similaire à l' instruction switch, nous avons eu l'affaire. Puis, à la fin, nous avons eu le défaut. C'est ce que cela vise à faire ici. Donc, si aucune de ces erreurs ne s'est produite, nous avons toujours notre petit filet de sécurité en bas qui contente de cracher un message ici, dans le monde réel, vous n'aurez probablement pas juste un message ici Le système devrait probablement enregistrer ces erreurs différemment et ces erreurs différemment. Mais ce n'est qu'un exemple. Vous pouvez donc voir maintenant si je lance l'application, je mets un mot, elle me dit maintenant d'apprendre à lire correctement. Charmant, n'est-ce pas ? Maintenant, si je saisis deux nombres, j'essaie de les diviser par zéro. Hey Bird, tu ne peux pas diviser par zéro. Alors maintenant, vous pouvez voir que ce sont deux choses différentes selon l'erreur survenue. La dernière chose dont je veux parler est le mot clé « finally ». Maintenant, le mot clé final est associé à un mot clé tri. C'est facultatif, vous n'êtes pas obligé d'en utiliser un, mais cela peut être très utile. Voyons comment cela fonctionne. Enfin, nous rechercherons ou rechercherons toutes les prises après l'essai. En cas d'erreur, tout le code de ce dernier bloc sera exécuté, même en cas d'erreur. Si aucune erreur ne s'est produite, cela sera également exécuté. C'est peut-être très utile si vous travaillez avec une base de données ou ce que l' on appelle des threads, et que vous pouvez fermer des connexions ou finaliser tout ce qui correspond vraiment à son Mais dans notre petit exemple, nous pouvons simplement remercier l'utilisateur d'avoir utilisé le programme. Par exemple, je remercie l' utilisateur d'avoir utilisé le programme. Jetons un coup d' œil à cela très rapidement. Si j'utilise le logiciel, que je saisis quelque chose de non valide, nous disons à l'utilisateur d' apprendre à lire correctement, puis nous lui disons merci d'avoir utilisé notre programme. C'est assez sarcastique, n'est-ce pas ? Maintenant, saisissons des chiffres valides. Nous obtenons maintenant un résultat réel. Ici, vous pouvez voir que le dernier bloc est toujours en cours d'exécution. Merci d'avoir utilisé notre programme. Vous pouvez voir enfin qu'il est exécuté qu'une erreur se soit produite ou non. Comme je l'ai dit, c'est facultatif, vous n'en avez pas besoin, mais cela peut être très utile, c'est-à-dire comment détecter et gérer exceptions lorsque vous travaillez avec C sharp. 35. 8-2. Baies 2D, 3D et multidimensionnelles: Je souhaite présenter le concept de tableaux bidimensionnels en C Sharp Ce que nous avons examiné jusqu'à présent est un tableau unidimensionnel standard. Par défaut, un tableau en boutique est considéré comme une dimension. Mais que se passerait-il si nous voulions simuler un échiquier, par exemple, où huit cases se croisent mais huit cases s'élèvent également ? Ensuite, nous pouvons nous référer à ces cases du jeu d'échecs, comme un système de grille avec x traversant et y montant. Nous pouvons simuler cela en utilisant ce que l' on appelle un tableau bidimensionnel en magasin. Regardons cet exemple ici. Nous venons de définir quelques nombres ici et nous les stockons dans un tableau d' entiers appelé Numb Et nous affichons simplement le premier chiffre de notre tableau à l'écran Si je lance l'application, le premier nombre du tableau est un, ce qui est correct car il s'agit du premier chiffre. Je vais vous montrer un exemple de tableau bidimensionnel. Voici maintenant notre tableau unidimensionnel. Je vais juste supprimer quelques chiffres. L'exemple n'est pas long. Afin de transformer ce tableau unidimensionnel en tableau bidimensionnel, j'utilise une virgule entre crochets ici Maintenant c'est révélateur en C sharp, hé, je veux créer un tableau bidimensionnel en ce moment. C'est ainsi que nous visualisons notre tableau. Cela ressemble à quelque chose comme ça. Mais ce que je veux faire, c'est créer un tableau à deux D qui ressemblera à ceci. En raison de la nature des deux dimensions, vous avez une dimension qui traverse et une qui descend. Et puis ça se remplit comme du papier millimétré, un échiquier, quelque chose comme ça C'est ce que nous voulons imiter ici. Maintenant que j'ai mis des virgules, nous obtenons immédiatement une ligne rouge car C sharp sait que nous créons un tableau à deux D. Mais ce format n'est pas correct. Le format d'un tableau à deux D ressemble à ceci. Les bretelles extérieures bouclées sont ici le contenant pour Ensuite, à l'intérieur de chaque ensemble de bretelles bouclées se trouve chaque ligne ici. Si je copie ceci et que je le mets dedans, copiez-le. Mets ça dedans. Et copiez-le. Et mettez-le là-dedans. Maintenant, cette initialisation des deux tableaux ressemble à peu près à ça C'est pareil. C'est ainsi que vous devez le visualiser. Maintenant, comment accède-t-on réellement à ces numéros ? Encore une fois, ce format est erroné. Si nous le survolons, nous pouvons voir ici un mauvais nombre d'indices C'est parce qu'il en attend maintenant deux. Comme nous avons créé un tableau à deux ici, nous pouvons simplement utiliser le système de virgules, par exemple 00 Maintenant, cela produira réellement le premier chiffre du premier bloc. Voici le premier bloc, voici le deuxième bloc. Voici le troisième bloc. Encore une fois, tous les index commencent à zéro. Il s'agit du premier représenté par le premier chiffre ici, zéro. Le deuxième chiffre ici, c'est le numéro de l' article à l'intérieur du premier bloc, qui est le premier, qui devrait être un. Cela devrait afficher le numéro un ici si nous exécutons l'application là-bas, le numéro un, si nous changeons le deuxième chiffre, par exemple, deux, puis 012, il devrait afficher numéro trois comme vous pouvez le voir ici Si nous augmentons ce chiffre à deux, alors il devrait être ici, parce que c'est deux en travers et deux en dessous, nous devrions obtenir le numéro neuf. Allons-y. C' est ainsi que l'on accède aux informations d'un tableau à deux D en C sharp. Maintenant, vous vous posez peut-être la question suivante : qu'en est-il de trois ? Qu'en est-il de quatre matrices ? Nous considérons ces deux éléments. Maintenant, cet exemple va devenir bien trop fou. C'est le minimiser. Maintenant, cela ressemblera à ceci. Que diriez-vous d'une matrice à trois ? Eh bien, oui, c'est très simple. Prenons chacun d'entre eux et remplaçons chaque numéro par un ensemble supplémentaire. Maintenant, si nous survolons cette page, attendions trois au mauvais nombre d'indices, saisissons-en un troisième Vous pouvez maintenant voir que le système de coordonnées est en trois dimensions. Si je lance le programme maintenant, le premier nombre du tableau est un, ce qui est le cas. Il s'agit du tout premier article. Vous pouvez donc voir que c'est en quelque sorte le concept de deux tableaux. Trois réseaux. Et tu sais, ça peut continuer à partir de là. Et vous pouvez vous poser la question suivante : eh bien, combien de dimensions pouvons-nous aller ? Eh bien, la réponse 32, si jamais vous vous le demandez. Nous pouvons donc avoir jusqu'à 32 dimensions dans une gamme en magasin. 36. 8-3. EXERCICE - Échecs - Trouver la reine partie: Je vais relever un petit défi maintenant. Je vais tester vos connaissances sur tableaux bidimensionnels et également sur la résolution de problèmes Considérez ce modèle ici, il émule un échiquier Si vous connaissez les échecs, vous l'avez peut-être déjà compris. Si ce n'est pas le cas, ne vous inquiétez pas. Nous allons créer un logiciel pour trouver toutes les reines, représenté par un Q sur cet échiquier Voici à quoi ressemble l' échiquier. Nous avons un château, une tour, une reine évêque et un roi, tous les pions, quelques cases vides représentées par zéro, et les pièces des autres joueurs également Si vous n'êtes pas familier avec les échecs, nous voulons trouver le signal. Il s'agit d'un tableau de caractères représenté par Shah. Dans un caractère, ils sont tous placés entre guillemets simples et vous ne pouvez avoir qu'une seule lettre à l'intérieur, sinon cela génère une erreur. Ce que nous voulons faire, c'est trouver les indices dans ce tableau bidimensionnel , puis les afficher dans la fenêtre. Alors, comment s'y prendre ? Comment trouver quelque chose ? Voici notre matrice à deux D. Comment choisissons-nous ces reines ? Eh bien, ce que nous voulons faire, c'est tester chacun d'entre eux. Est-ce un signal, est-ce que c'est un que, non, etc. Dans ta tête, tu devrais penser, accord, à une boucle. Nous avons besoin d'une boucle. Mais comme il y a plus d'une dimension, nous devons vérifier si elles sont transversales. Nous devons également vérifier, descendre, vérifier tout cela. Descendez-en un, vérifiez-les tous. Un, vérifiez, tout ça. Dans ta tête, tu devrais te dire, d'accord, nous avons besoin d'une boucle et nous en avons besoin de deux. Nous savons déjà combien d' itérations nous avons besoin, car nous en avons huit en cours et huit en cours de descente. Tu devrais penser, d'accord, à 24 boucles. Quatre, parce que nous connaissons le nombre d' itérations et d'une boucle, parce que nous devons vérifier quelque chose encore et encore, faisons 24 boucles La première boucle que je vais faire est la boucle y, et elle se déplacera vers le bas. Commençons par cela. Nous allons commencer par zéro, car tous les index commencent à zéro C'est un peu 00 là-bas, y c'est moins. Nous voulons maintenant obtenir la longueur de cette dimension ici. Comment s'y prend-on ? Nous prenons ici le nom de nos deux tableaux, point final. Ensuite, nous voulons utiliser la méthode get length. Lorsque nous ouvrons des parenthèses là-dessus, cela me demande une dimension, eh bien, c'est la première dimension, je vais mettre zéro ici Cela prend la première dimension , puis le point-virgule et augmente d'un à chaque C'est notre première boucle. Maintenant, nous sommes en train de descendre. Nous devons également faire une boucle. Nous allons avoir besoin d' une autre boucle à l'intérieur notre boucle qui représentera l'axe X ici. Nous voulons y intégrer la deuxième dimension, qui est représentée par un. Maintenant, cela traverse la première dimension ici-bas. Cela traverse la deuxième dimension d'ici. Nos deux boucles sont maintenant configurées. Nous devons réellement vérifier chacune de ces valeurs. Nous pouvons le faire en utilisant une instruction if. Que l'on puisse dire que la valeur actuelle est une reine. Et puis je vais juste dire que la reine a été trouvée à cet endroit. Juste pour que cela ait du sens. Si l'élément situé en X, qui est représenté par ces quatre boucles, et X est évidemment incrémenté un à chaque fois qu'il le traverse, il passe dans le premier emplacement ici Ensuite, le second est le Y et il se déplace vers le bas. Ce que nous faisons, c'est vérifier chaque valeur, nous parcourons l'une des valeurs, puis descendons une autre. C'est ce que fait la boucle. Et à chaque fois, nous vérifions si la machine à sous est une reine. Si c'est le cas, la condition est vraie, alors nous exécutons cette ligne de code ici qui dit simplement que la reine a été trouvée sur place. Et nous produisons X et Y. Voyons si cela fonctionne Lancez l'application. La reine a été trouvée à l'emplacement 03 et la reine à l'emplacement 73. Si nous avons raison, 03, c'est zéro. Tout cela est nul ici. 0123. C'est exact. Le suivant, je crois, était 701-23-4567 Vous pouvez voir qu'il a réussi à trouver les deux reines sur cet échiquier Si vous voulez modifier cela, nous pouvons trouver les rois, puis nous pouvons simplement trouver un K à la place, et cela trouvera les rois sur le plateau. C'était un défi plutôt amusant. Si tout cela vous prête à confusion, révisez-le. peut que vous ne l'obteniez pas la première fois, ne vous inquiétez pas pour ça. Mais vous le comprendrez lentement au fur et à mesure que vous pourrez regarder cette vidéo et comprendre le problème. Mais c'est un peu comme un exemple réel où nous simulons un échiquier, par exemple, lorsque nous travaillons avec deux tableaux D en C Sharp 37. 8-4. Listes: Je vais maintenant présenter une nouvelle collection dans C Sharp , appelée liste. Maintenant, une liste est assez puissante en interne, elle est en fait construite sur un tableau standard, mais elle inclut beaucoup plus d'options et de nombreuses façons de travailler avec les informations contenues dans le tableau. Par exemple, parlons de cet exemple ici. Nous définissons un tableau d'entiers en C Sharp. Nous lui donnons juste des valeurs numériques aléatoires. Nous utilisons une boucle à quatre pour parcourir chaque élément de la collection et l'afficher à l'écran Si je lance l'application maintenant, vous pouvez voir tous ces chiffres juste là. Très simple, je vais créer une nouvelle liste. Je vais imiter cette fonctionnalité. Vous pouvez voir la différence entre un tableau et une liste, par exemple. Maintenant, c'est un sujet un peu compliqué. Compte tenu de ce que nous avons appris jusqu'à présent, je ne vais pas tout expliquer, mais je vais aborder certaines choses liées aux listes. Maintenant, comment créer une liste ? Eh bien, le type de données est une liste. Il y a maintenant une nouvelle notation nous n'avons pas vraiment parlé. C'est ce qu'on appelle les génériques. Maintenant, je ne vais pas trop parler des génériques car je pense que c'est un sujet assez compliqué en ce moment Mais ce que je veux faire, c'est définir une liste contenant des entiers, par exemple, vous pouvez voir que Visual Studio essaie de m'aider ici Cela indique en fait ce que je veux faire. C'est correct. Il suffit d'appuyer sur la touche Tab du clavier. Et c'est écrit dans cette notation pour nous. Je vais juste le terminer au fur et à mesure. Nous avons donc imité la fonctionnalité ci-dessus. Maintenant, cette ligne ici est exactement la même que cette ligne ici. Il s'agit d'un type de collection. Il s'agit d'un type de collection. C'est un tableau d'entiers. Ici, il s'agit d'une liste d'entiers, et ils contiennent tous les mêmes informations. Je vais te le prouver. Si je parcourt cette liste ici et que j'affiche tous les chiffres à l'écran, cela fait exactement la même chose. Comment définir et initialiser une liste dans C Sharp ? Eh bien, nous utilisons le mot-clé list avec un L majuscule entre crochets. Ici, nous mettons le type de données que nous voulons stocker dans la liste. De même, si nous voulions une liste de chaînes, nous le ferions. Par exemple, nous mettons le type de données entre crochets angulaires, lui donnons un nom, puis nous utilisons un signe égal. Ensuite, nous voulons dire au système : OK, maintenant nous voulons initialiser la liste Nous voulons maintenant créer la liste et y mettre des informations. Nous utilisons ce nouveau mot clé, répétez le type de données. Ensuite, entre ces parenthèses, nous pouvons soit les laisser vides soit leur donner une capacité, comme un tableau Nous pouvons même y transférer une collection existante , par exemple. Ce que je pourrais faire, c'est le faire. Cela créera une liste basée sur mon tableau ici. Vous pouvez voir à quel point il commence déjà à être très puissant. Encore une fois, je peux prouver que cela fonctionne également en exécutant l'application et en faisant défiler les chiffres que nous lui avons transmis. Vous pouvez voir que c'est très puissant à cet égard. Mais pour ce qui est des tableaux standard dans C Sharp, par exemple, travaillons simplement avec notre tableau standard ici Si je regarde les méthodes natives à utiliser avec un tableau, nous ne pouvons pas vraiment en faire grand-chose. Nous avons différentes méthodes que nous pouvons utiliser, comme obtenir la longueur des tableaux ou le nombre d'éléments dans le tableau, mais pas grand-chose d'autre à voir avec les méthodes natives Et si nous voulions trier ces informations ? Peut-être mettre le plus petit chiffre au début, puis le plus grand à la fin ? Comment inverser l' ordre de ces chiffres ? Diverses choses de ce genre. Eh bien, c'est l'un des nombreux avantages de l'utilisation de listes en boutique. Ce que nous pouvons faire. Examinons quelques exemples d'utilisation de listes. Je suis en train de définir une nouvelle liste. Je peux définir une nouvelle liste et la laisser vide. Ensuite, plus tard dans l'application, lorsque nous déterminons ce que nous voulons réellement mettre dans notre liste, nous pouvons y ajouter des éléments de manière dynamique, à la volée . Je pourrais donc ajouter ce numéro ici. Et puis une autre. Peut-être que si nous voulons créer une application dans laquelle nous collectons des numéros auprès d'un utilisateur, nous pouvons définir la liste. Ensuite, nous pouvons ajouter les numéros des utilisateurs lorsque nous exécutons le logiciel. Nous pouvons maintenant voir que la liste contient désormais les deux nombres que nous y avons ajoutés en utilisant la méthode d'ajout ici. Mais nous pouvons non seulement ajouter des éléments, également en supprimer. Nous pouvons faire différentes choses de manière native. Mais l'un des plus puissants, que nous pouvons réellement trier les données. Nous pouvons les trier dans l'ordre. Nous pouvons même inverser les chiffres. Par exemple, vous pouvez définir une liste avec ces numéros ici. Et nous utiliserons la méthode de tri. Et ce que cela va faire, c'est prendre tous les entiers et les trier dans l'ordre C'est la seule chose que vous devez faire pour cela si nous exécutons le logiciel. Vous pouvez maintenant voir que tous nos numéros sont dans l'ordre séquentiel C'est très facile à faire, juste ce très court bout de code d' une ligne. Ici, vous pouvez faire différentes choses avec la classe list et elle offre un moyen plus puissant de travailler avec vos données. Cela ne veut pas dire qu' une augmentation est nécessairement inutile. Vous pouvez accomplir ces tâches avec une augmentation en utilisant des extensions telles que link et autres, mais je n'entrerai pas dans le vif du sujet maintenant. Je ne veux pas trop compliquer ce tutoriel, mais je présente simplement certains des avantages de l' utilisation de listes lors de la programmation en C sharp En résumé, si vous disposez d'un ensemble de données, qu'il s'agisse d'entiers, de chaînes ou d'un autre type de données, et que vous ne connaissez pas nécessairement la capacité, vous souhaiterez peut-être ajouter des valeurs au cours de l'application Peut-être que l'utilisateur a besoin d'ajouter des éléments ou que vous souhaitez mieux contrôler les données. Alors peut-être que la liste est quelque chose pour vous. Il s'agit peut-être d'un type de données que vous souhaitez explorer. Mais c'est un type de données puissant, et je vous recommande d'utiliser des listes pour vos aventures dans C Shop. 38. 9-1. O-O, classes et objets: Classes et objets en C Sharp. Qu'est-ce qu'un cours ? Qu'est-ce qu'un objet ? Qu'est-ce que tout cela signifie ? Eh bien, laissez-moi vous expliquer maintenant les classes et les objets en C Sharp soutiennent ce que l'on appelle le paradigme de programmation. Qu'est-ce que tout cela signifie ? La programmation est l' abréviation de ce que l'on appelle la programmation orientée objet et c'est un paradigme Un paradigme n'est qu' un mot sophistiqué désignant une façon de faire quelque chose, comme une méthode. Si vous poursuivez vos efforts dans le domaine de la programmation, vous verrez peut-être beaucoup ce mot, alors j'ai pensé que je pourrais en parler Maintenant, un paradigme est un style de programmation. Imaginez un chef dans la cuisine avec du poulet cru. Il pouvait faire rôtir le poulet. Il pouvait faire bouillir le poulet, il pouvait le faire frire. Mais chacun d'entre eux est un paradigme, une manière différente d'arriver au résultat final. Voilà donc ce qu'est un paradigme. Maintenant, lorsqu'il s'agit de programmes de base tels que construction d'une calculatrice ou quelque chose de très simple comme ça, paradigmes ne sont pas vraiment importants pour les débutants Ce n'est pas surprenant, vous n'en avez probablement jamais vraiment utilisé auparavant alors qu'un logiciel ne contient que 2030, 40, voire 50 lignes de code. La manière de structurer votre logiciel n'est pas vraiment importante car il s'agit d'une programmation assez petite, le style de programmation est très important Lorsque vous avez de gros logiciels, il se peut que 20 à 30 100 personnes travaillent sur un seul logiciel. L'organisation du code est très importante. Alors considérez ceci par exemple. Si vous avez beaucoup de lignes de code qui ressemblent à ceci, comment faites-vous pour en assurer la maintenance ? Il peut faire 50 pages, 1 000 pages. Nous avons besoin d'une structure, d'une certaine organisation. Et c'est l'un des nombreux éléments de la programmation 00. Maintenant, la programmation 00 est un sujet très vaste et complexe qui présente de nombreux avantages et de nombreux avantages, mais c'est l'un d'entre eux. ce qui concerne la programmation, elle remonte aux années 1950 et 1960, mais elle a définitivement gagné en popularité je me souviens bien, au début des années 2000. C'est à ce moment-là que tout a vraiment débuté. Ce que nous avons réellement fait jusqu'à présent c'est ce que l'on appelle la programmation procédurale, où le programme démarre et où nous exécutons en quelque sorte chaque ligne dans l'ordre. Nous avons peut-être une ou deux méthodes. Et, vous savez, les choses sont très simples. Mais encore une fois, dans les applications logicielles très volumineuses, cela est assez difficile à maintenir. Par exemple, la programmation 00, sujet très vaste et très complexe. Je peux vous ennuyer avec tous les tenants et les aboutissants de cette histoire pour le moment, mais je ne pense pas que ce soit une bonne façon d'apprendre la programmation 00. Je pense que la meilleure façon d' apprendre est de s'appuyer sur des exemples concrets et de les étudier à l'aide d' exemples pratiques. Vous souvenez-vous du film Karate Kid, où Daniel Larusso peint la maison, peint la clôture et ponce le Et secrètement, il apprenait tout ce karaté, sans vraiment savoir pourquoi Et puis à la fin, M. Magi a dit, oh, d'accord, maintenant testez vos compétences Donc, pour ce qui est des avantages de rester engagé, c'est exactement ainsi que je veux enseigner la programmation O, et je pense que c'est une façon fantastique d'apprendre la programmation 00 en apprenant par l'exemple, puis en revenant dans une boucle détournée juste à la fin Donc, lorsque je parle mots compliqués tels que l'instanciation, le polymorphisme, l'abstraction, la cohésion, le couplage, toutes ces choses compliquées, je pourrais Mais le problème, c'est qu'en réalité, ce sont des tueurs de motivation. Et dans le but de préserver motivation et de maintenir votre engagement, je vais procéder de cette façon et je pense que ce sera une façon fantastique d' apprendre ces cours et ces objets en C Sharp. Qu'est-ce qu'un cours ? Qu'est-ce qu'un objet, quels sont ses avantages et pourquoi devrais-je même les utiliser ? Jusqu'à présent, si vous avez suivi certains des didacticiels que nous avons créés jusqu'à présent, nous avons créé quelques exemples de base comme multiplier deux nombres ensemble. Lorsque nous prenons deux nombres d' un utilisateur et que nous les multiplions ensemble, par exemple. Et lorsque nous prenons un nombre d'un utilisateur, nous pouvons le représenter sous forme d'un type de données entier, ce qui est assez simple. Et c'est tout ce que nous devons faire. Nous n'avons pas besoin de plus d'informations sur ces nombres pour les multiplier ensemble. De même, si nous prenons le nom de l'utilisateur, nous pouvons le stocker dans un type de données simple qui est une chaîne, et nous stockons simplement le nom de l'utilisateur. C'est très facile. Mais comment représenter un type de données complexe, comme un utilisateur ou peut-être un compte comme un compte social, ou un compte bancaire, ou même un vélo comme un objet du monde réel, ou un sandwich, ou même une planète entière comme la planète Terre ou quelque chose comme ça Eh bien, jusqu'à présent, avec notre style de programmation procédural Cano, peut-être pour représenter un utilisateur, nous pourrions avoir une chaîne qui pourrait être le prénom de l'utilisateur, puis une autre chaîne pour son nom de famille. Peut-être un entier pour leur âge, puis peut-être une chaîne pour leur nom d'utilisateur. S'ils ont un nom d'utilisateur, nous pourrions avoir une décimale ou un double pour leur taille La liste est longue. Il y a tellement de choses que vous pouvez stocker à propos d'un utilisateur. Vous pouvez voir que j'ai déjà cinq lignes de code pour toutes ces variables. Cette page de canettes ici va la remplir très rapidement avec beaucoup d'informations. Je pourrais peut-être utiliser ces cinq types de données ici. Ces types de données simples, string, int et double, représentent un objet complexe tel qu'un utilisateur. De même, si j'ai un vélo, je pourrais avoir besoin de la couleur du vélo, de la marque du vélo, peut-être des mesures, etc. Et c'est ainsi que je représenterais un objet de vélo. Mais comment puis-je mettre tout cela dans son propre objet ? Par exemple, plutôt que pour chaque utilisateur de notre application, je peux simplement taper user et nous pourrions avoir notre propre type de données, comme un type de données utilisateur. Ce serait plutôt cool, n'est-ce pas ? C'est l'un des avantages de l' utilisation de classes et d'objets dans C Sharp. Voyons comment nous pouvons réellement créer notre propre type de données dans C Sharp. Ce que je vais faire maintenant, c'est créer une toute nouvelle classe, essentiellement un tout nouveau type de données personnalisé que nous pouvons utiliser n'importe où dans notre logiciel. Si nous passons sur le côté droit, c'est le nom de notre projet ici, la programmation. Et il a une petite icône en C pointu avec un carré autour. Je vais donc cliquer dessus avec le bouton droit de la souris. Je vais aller sur Ajouter, puis je vais aller en classe. Une fois sur place, nous pouvons voir que les classes ont été sélectionnées. Ici, nous pouvons donner un nom à la classe. Maintenant, tu peux appeler la classe comme tu veux. Mais il est courant de le commencer par une majuscule en fonction de son objectif. Quel est l'objectif de ce cours ? À quoi ça sert ? Quelles sont les informations qu'il contient ? Ou quelle est sa principale fonction ? Ainsi, lorsque vous avez une très grande application avec peut-être 1 000 classes, vous savez exactement, d'après son nom, ce qu'elle réalise, ce qu'elle vise à faire Ce que je vais faire, c'est créer un type de données personnalisé appelé Utilisateur. Cela va permettre de stocker des informations sur un utilisateur potentiel qui pourrait utiliser notre logiciel. Je vais l'appeler utilisateur, puis je clique sur le bouton d'annonce ici. Ce que cela fait, cela crée une toute nouvelle classe dans notre projet. C'est notre projet ici. Nous y sommes allés jusqu'à présent, si vous avez regardé nos précédents tutoriels avec la classe par défaut appelée program, et que nous avons travaillé avec la méthode principale. Vous pouvez voir ici qu'il existe une classe appelée programme et la méthode principale se trouve à l'intérieur. Il s'agit d'une classe par défaut d' un type d'application de console. Mais si nous allons ici, nous avons maintenant une toute nouvelle classe appelée User. Et maintenant, nous pouvons mettre quelques informations dans cette classe ici. Vous pouvez donc voir que Visual Studio fait allusion à ce que je pourrais vouloir mettre ici Oui, c'est peut-être une méthode préférable, mais je vais parler de get and set dans un prochain tutoriel. Je vais donc le faire légèrement différemment. Ce que nous voulons faire ici dans notre nouvelle classe, qui s'appelle user, c'est tout mettre sur notre utilisateur. Donc peut-être le prénom de l'utilisateur, le nom de famille de l'utilisateur, son âge. Tout ce qui a trait à un utilisateur. Ce que je vais faire, c'est définir quelques variables simples ici. Donc, ce que je vais faire, c'est peut-être le prénom par exemple, puis peut-être le nom de famille, puis peut-être l'âge, quelque chose comme ça. Avant chacun d'entre eux, je veux juste mettre ce mot clé interne. Ne vous inquiétez pas de ce que cela signifie pour le moment. Nous y reviendrons dans un prochain tutoriel. Mais ce que j'ai fait, c'est que j'ai défini trois types de données simples ici, deux chaînes et un entier. Et tous les trois font partie de la classe utilisateur. Il s'agit de la nouvelle classe que nous venons créer. Qu'est-ce que tout cela signifie ? Il s'agit de notre type de données personnalisé ici Tout comme un entier est un type de données, une chaîne est un type de données. Maintenant, l'utilisateur est notre propre type de données personnalisé et il contient toutes ces informations. Voyons un exemple de ce que cela signifie. Si nous revenons à notre classe principale ici avec la méthode principale, nous pouvons réellement configurer ce que l' on appelle une instance de notre nouvelle classe. Tout comme lorsque nous créons une chaîne, nous pouvons faire quelque chose comme ceci. Mais lorsque nous avons un type de données personnalisé, comme une nouvelle classe, par exemple, le format est légèrement différent. Il s'agirait de notre type de données personnalisé, qui est le nom de notre classe, qui est user, car nous avons créé une classe avec le nom user. Vous pouvez voir maintenant que c'est vert et qu'il contient en fait des informations sur notre classe. Si je tape Bacon par exemple, vous pouvez voir que c'est noir, il y a une ligne rouge. C'est parce que nous n' avons pas de classe appelée Bacon. Nous avons maintenant une classe appelée User, elle est verte. Et nous pouvons réellement nous en servir. Nous allons maintenant lui donner un nom comme nous le faisons ici, par exemple, avec une variable simple. Je vais juste l'appeler US. R, abréviation d'utilisateur. Alors je vais être sur un pied d'égalité. Et Visual Studio me donne une idée de ce que je veux faire. C'est exactement ce que je veux faire. Je souhaite créer une nouvelle instance de notre classe appelée user. Et je lui donne le nom USR. Je peux lui donner le nom que je veux, peu importe. Maintenant, j'ai une toute nouvelle variable, tout comme une variable ici de type chaîne. J'ai maintenant une nouvelle variable appelée US user. Si je commence à utiliser ma variable USR et que je mets une fléchette ensuite, vous pouvez voir que je peux accéder à ces variables que je viens de créer dans notre classe Vous pouvez voir ici le nom de famille, le prénom et l'âge. Configurons un exemple de variable utilisateur. Si je dis le prénom de l'utilisateur, nous savons qu'il s'agit d'une chaîne. Appelons-le, je ne sais pas. Appelons-le Bob. Pourquoi pas ? Nous allons définir un nom de famille pour notre utilisateur. Nous l'appellerons Bob Smith. Enfin, Bob Visual Studio veut que j'en mette 30. Pourquoi pas ? Je ne sais pas pourquoi Visual Studio indique 30, mais voilà. Maintenant, ce que j'ai fait ici, j'ai créé un tout nouvel objet utilisateur ici. Ensuite, je lui ai donné quelques informations. Ces champs sont là. Ce sont exactement les mêmes champs que ceux que nous avons définis dans notre tout nouvel utilisateur, qui sont similaires à notre type de données, et nous leur avons donné quelques valeurs ici. Ce que je peux faire maintenant, c'est réellement utiliser ces informations. Si je fais la ligne droite de la console, je peux réellement afficher certaines de ces informations à l'écran. Disons, laissez-moi afficher le prénom, le nom de famille et l'âge de l'utilisateur . Gardons la fenêtre de la console ouverte pour qu'elle ne se ferme pas sur nous. Lancez maintenant l'application pour voir ce que nous avons ici. exécutant l'application, nous pouvons voir que nous affichons toutes les valeurs de notre type de données personnalisé à l'écran Nous définissons les valeurs de cette façon. Nous affichons les valeurs de notre type de données personnalisé, comme à l'écran Lorsque vous créez des classes dans C Sharp, comme notre classe utilisateur personnalisée ici, imaginez que cette classe est un plan, une spécification Dans notre classe, tout est lié à un utilisateur, pas à un vélo, à un sandwich ou à quelque chose de fortuit. Ici, tout est impliqué dans la création d'un nouvel utilisateur. Nous avons le nom de l'utilisateur, son âge, tout ce qui a trait à un utilisateur. Imaginez que c'est comme un plan pour cela, ou comme je l'ai dit, une spécification Le processus ici, ce que nous faisons, consiste à créer un objet, comme lorsque nous créons une simple variable de chaîne appelée name, par exemple. Lorsqu'il s'agit de classes personnalisées et d'autres choses de ce genre, on les appelle des objets. Vous pouvez maintenant voir d'où vient le terme « programmation orientée objet vient le terme « programmation orientée Parce que nous représentons des objets du monde réel tels que les utilisateurs, les voitures, les vélos sous forme d'objets tels que les cours, l'USR. Voici l'objet, c'est le type de données qui est une classe. Ce processus s' appelle ici instanciation. Et c'est ce qu'on appelle l'instanciation parce que vous créez une nouvelle instance d'une classe Nous pouvons également créer une deuxième instance de la même classe. Il s'agit de la première instance. Il s'agit de la deuxième instance. Nous pouvons en créer 50. Nous pourrions en créer 100 par exemple. Ce que nous pouvons faire ici, c'est un autre utilisateur Peut-être qu'il s'appelle Darren Smith et qu'il a 75 ans De même, nous pouvons afficher ses informations dans la fenêtre. Comme vous pouvez le constater, vous commencez à percevoir le véritable pouvoir de la programmation orientée objet. Nous pourrions créer des milliers de ces objets utilisateur et répliquer des milliers d'utilisateurs dans notre logiciel si nous le voulions Nous ne nous limitons pas aux seuls objets utilisateur. Nous pourrions avoir des objets de compte, de nombreuses choses différentes pour intégrer nos logiciels. Ce que nous pouvons faire avec ces objets ici, nous pouvons les transmettre à des méthodes, nous pouvons les placer dans des tableaux, nous pouvons les parcourir en boucles Les limites sont infinies. Mais il ne s'agit là que d'un petit échantillon de programmation orientée objet Et cela commence par la création de classes et de nouveaux objets. J'espère donc que cela vous a aidé à démarrer votre parcours orienté objet dans C shop 39. 9-2. Structurateurs: Je vais maintenant parler des constructeurs dans C Sharp. Qu'est-ce qu'un constructeur ? Comment fonctionnent-ils ? Eh bien, vérifions-le ici, nous avons un exemple très simple. Nous avons une classe personnalisée appelée user. Nous avons trois variables à l'intérieur de la classe, qui sont des informations sur l'utilisateur et son âge. Ensuite, nous configurons simplement un nouvel objet, qui est une instance de la classe. Nous lui donnons des valeurs, prénom, nom de famille et âge, et nous les affichons à l'écran Un logiciel très simple. Je vais introduire un constructeur dans cet exemple. Maintenant, ce que fait un constructeur, il nous aide à construire nos objets Nous créons ici une nouvelle instance de notre classe. Voici notre objet. Ce que fait un constructeur, cela nous aide à configurer cet objet Apprenons par l'exemple. Je pense que ce serait plus facile ici. Nous sommes en train de configurer un nouvel objet utilisateur. Je vais juste copier-coller celui-ci. Et nous allons créer un nouvel objet, un autre objet. OK, je suis en train de créer un nouvel utilisateur appelé Tony, Tony Smith, âgé de 41 ans. Lorsque j'ai configuré cet utilisateur, vous pouvez voir qu'il utilise quatre lignes de code. Peut-être que si nous voulons en installer 100, cela ne sera pas très élégant, cela aura l'air assez gonflé. C'est l'un des avantages de l'utilisation de constructeurs. Ce que je peux faire lorsque je crée une nouvelle instance de cette classe, transmettre ces valeurs en tant que paramètres. Lorsque je crée une nouvelle instance, je peux transmettre Tony, disons Smith, puis transmettre l'âge ici même. Ensuite, je peux supprimer toutes ces lignes de code. Et puis, essentiellement, cette ligne fera exactement la même chose, ces quatre lignes ici. L'un des avantages des constructeurs est la minimalisation du code Il n'est représenté que sur une seule ligne. Mais comment mettre cela en place ? Parce qu'à l'heure actuelle, nous avons une ligne rouge. Et si je passe la souris dessus, cela indique que l'utilisateur ne contient pas de constructeur qui prend trois arguments Eh bien, allons-y et ajoutons-en un. Je vais entrer dans la classe utilisateur ici, je dois configurer un constructeur Comment est-ce que je peux m'y prendre ? Cela commence par le mot clé interne. Maintenant, ne vous inquiétez pas pour ce qui est interne en ce moment. J'en parlerai dans un prochain tutoriel. Tous les constructeurs prennent le nom de la classe. Le nom de la classe est user. Je vais y mettre le nom de la classe. Ensuite, j'ai mis parenthèses, puis les bretelles bouclées habituelles Il s'agit d'un constructeur de base dans sa forme minimale. Nous pouvons avoir plus d'un constructeur par classe si nous le voulons Ce que je veux faire, c'est prendre ces valeurs ici et les initialiser dans nos variables ici Je veux mettre ces valeurs ici. Ce que je dois faire, c'est que lorsque nous avons travaillé avec des méthodes, cela fonctionne de manière très similaire. Je veux les transmettre essentiellement sous forme paramètres que je vais faire en premier. Par exemple, prénom, nom de famille, âge. Lorsque vous nommez vos paramètres, donnez-leur des noms significatifs tels que le prénom, le nom de famille et l'âge. Et assurez-vous qu'elles ne sont pas exactement les mêmes que ces variables locales ici. Donnez-leur un boîtier légèrement différent, par exemple, ou un nom complètement différent. J'en parlerai dans un prochain tutoriel lorsque je parlerai de ce mot clé. Pour l'instant, nos paramètres entrent dans notre constructeur ici Maintenant, je veux initialiser ces variables locales avec ces valeurs ici C'est très facile de le faire. Je prends la variable locale ici, je la définis comme valeur du paramètre. C'est déjà fait et nous allons continuer pour les deux autres. Visual Studio nous y a bien aidés. Passons simplement en revue ce qui se passe ici en ce moment. La ligne rouge a disparu. Si je passe la souris dessus, cela fonctionne. Il n'y a pas de ligne rouge. Je passe une chaîne, une chaîne et un entier dans le constructeur de la classe Lors de la création de notre objet, ces valeurs sont transmises en tant que paramètres au constructeur, c' est-à-dire tout cela Ensuite, la valeur des paramètres assignés été initialisée dans nos variables locales ici Désormais, ces variables locales conserveront à jamais ces valeurs tant que cette instance restera active dans notre système. C'est plutôt cool, n'est-ce pas ? Permettez-moi de lancer le logiciel très rapidement pour que vous puissiez voir ce qui se passe. Je vais faire un commentaire à ce sujet, et j'y reviendrai dans une seconde. Maintenant, mettons-le simplement là, pas de problème. Nous exécutons le logiciel. À l'heure actuelle, vous pouvez le voir, indique Tony Smith, 41 ans. Il semble que cela fonctionne correctement. Permettez-moi d'annuler ces commentaires et de parler d'une dernière chose. Vous pouvez voir quelque chose d' intéressant. Maintenant, il y a une ligne rouge en dessous de cette partie, juste ici. Lorsque nous essayons de configurer un nouvel objet, celui-ci ne fonctionne plus. Pourquoi est-ce le cas ? C'est parce que dans notre classe ici, par défaut, nous n'avons pas de constructeur. Ça ressemble à ça. Cependant, une fois que nous avons défini un constructeur avec des paramètres comme celui-ci, nous ne pouvons plus configurer une instance de notre classe comme celle-ci Il existe un moyen facile de contourner ce problème. Nous définissons juste un constructeur très basique sans paramètres Maintenant, vous pouvez voir cette ligne rouge a disparu et que tout va bien . Comment est-ce que cela fonctionne ? Eh bien, lorsque nous appelons ce constructeur ici, lorsque nous créons cet objet, nous transmettons trois paramètres Lorsque cette ligne est exécutée par le logiciel, l'exécution du code passe ici Et tout est mis en place ici. Lorsque nous créons une nouvelle instance en utilisant cette ligne ici, il n'y a aucun paramètre, ce constructeur est appelé Au lieu de cela, cela n'est jamais exécuté, seulement cette section ici, il ne se passe rien ici. Voilà la différence entre les deux. Il y a actuellement deux constructeurs dans cette classe. Cela utilise le premier constructeur, cela utilise le second Et nous pouvons avoir 50 constructeurs si nous le voulons, mais c'est un peu comme ça que les choses se passent en interne au sein de notre classe Vous pouvez donc voir que les constructeurs nous ont permis de minimiser le code, vous savez, sur une seule ligne, par exemple Mais que peuvent-ils faire d'autre ? Tu sais, quel est l'autre avantage ? Eh bien, les constructeurs comme nous le disons peuvent vous aider à construire votre objet et ils le font en quelque sorte dans les coulisses Donc, à partir de ce fichier, nous n'avons pas vraiment besoin de savoir comment cet utilisateur est configuré. Nous sommes juste en train de leur transmettre des informations et nous pouvons les récupérer quand nous le voulons. Toute cette logique nous est donc cachée, ce qui est plutôt cool. Les constructeurs peuvent faire en interne certaines choses dont nous n'avons pas à soucier dans les coulisses Par exemple, si j'appelle ce constructeur en transmettant les deux noms dans l'âge, je pourrais afficher quelque chose dans la fenêtre, par exemple Je pourrais dire à l'utilisateur que nous sommes en train de créer un nouvel utilisateur. Par exemple, lorsque je lance le logiciel. Maintenant, vous pouvez voir que je reçois un petit message disant, d'accord, veuillez patienter, je suis juste en train de configurer un nouvel utilisateur. Ensuite, il produit les informations. Les constructeurs font des choses supplémentaires, ils n'ont pas simplement besoin de configurer des variables Ils pouvaient se connecter à une base de données, ils pouvaient parler à un site Web. Ils pourraient ouvrir une connexion à une base de données. Ils peuvent faire beaucoup de choses internes dans les coulisses. C'est ainsi qu'ils peuvent aider à construire un objet, et c'est pourquoi ils sont appelés constructeurs Les constructeurs sont des éléments assez puissants de la programmation orientée objet Et vous pouvez voir, en utilisant cet exemple dans ce tutoriel, comment cela simplifie les choses. Peut-être pas dans le cours lui-même , mais je travaille certainement à partir d'ici. Vous pouvez voir à quel point tout semble simple en utilisant une seule ligne de code pour configurer un objet. Et nous n'avons pas à nous inquiéter des problèmes internes qui se passent ici. C'est un exemple de constructeurs dans C shop, et j'espère que vous le trouverez très utile 40. 9-3. Méthodes d'objet: Parlons des méthodes d'objets. Maintenant, voici un exemple d'application. Ce que je fais, c'est créer une nouvelle liste ici. Ensuite, je crée trois utilisateurs. Ils ont tous des informations uniques ici. Par exemple, Tony Smith a 70 ans, Bob Holmes et Tyrone Jones Ensuite, je vais ajouter chacun de ces objets à notre liste. Notre liste d'utilisateurs contiendra maintenant ces trois objets. J'utilise une boucle à quatre pour parcourir tous les utilisateurs et, à leur tour, afficher toutes ces informations dans la fenêtre de la console. Jetons simplement un coup d'œil à ça. Maintenant, vous pouvez voir que c' est le résultat que nous obtenons. Il affiche simplement toutes ces informations sur l'objet à l'écran Maintenant, ce que je veux faire, c'est savoir lequel de ces utilisateurs a pris sa retraite. Ont-ils atteint l'âge de la retraite ou sont-ils retraités ? Selon le pays dans lequel vous vivez actuellement. Au Royaume-Uni, je ne suis pas sûr pour l'Amérique, mais l'âge de la retraite est, je crois, de 66 ans pour les hommes. Nous utiliserons simplement 66 comme nombre arbitraire. Cela peut être n'importe quoi. Tony Smith serait retraité dans ce cas, mais Bob Holmes et Tyrone Jones ont encore du chemin à parcourir avant de prendre leur retraite Ce que je veux faire, c'est fournir une information supplémentaire pour indiquer si l'utilisateur est retraité ? façon dont nous procéderions normalement est configurée, peut-être une instruction if. Et nous disons que si l'âge de l'utilisateur est supérieur ou égal à 66 ans, alors nous dirions, d'accord, il est retraité. Nous dirions retraité. Nous allons l'initialiser à false. S'ils sont supérieurs à cela, je dirais simplement que la retraite est vraie, mais par exemple, quelque chose comme ça. C'est ainsi que nous définirions normalement un cas où, s'ils sont retirés, nous utiliserions une condition. Ensuite, nous affichons ces informations à l'écran. Cela ressemblerait à ça. Vous pouvez voir que nous avons une belle boucle ici avec notre âge, nom de famille et notre âge. Mais en ce qui concerne les retraités, nous avons toutes ces informations. Ça a l'air un peu gonflé. Peut-être que nous pouvons le déplacer ailleurs. Peut-être dans notre classe ici. Et puis prenez un autre paquebot ici. C'est ce que nous pouvons réaliser avec les méthodes objets. Dans ce cas, ce que nous voulons faire, c'est mettre cette logique ici, cette condition dans notre classe. Nous n'avons pas à nous inquiéter à ce sujet. Nous ne savons pas comment c'est calculé, cela ne nous intéresse pas vraiment. Nous voulons juste une petite variable ici, elle est supprimée, et nous pouvons afficher cette information. Voyons comment créer une méthode objet en déplaçant cette logique dans notre classe. Juste avant cela, je vais lancer l'application très rapidement. Juste pour que nous puissions voir le résultat ici. Vous pouvez voir en dessous chaque utilisateur qu'il est dit «   retraité » est vrai parce que cet âge est supérieur à 66 ans et que les autres sont faux simplement parce qu'ils n'ont pas 66 ans ou plus. Cela va déplacer cette logique vers ce que l'on appelle une méthode objet. Et c'est ce que nous définissons dans notre classe ici. Voici notre cours. Ici nous avons nos variables, ici nous avons deux constructeurs. Ce que nous voulons faire, c'est simplement créer une méthode ici, nous allons réutiliser le mot clé interne Ne vous inquiétez pas de ce que cela signifie pour le moment. Nous allons juste le mettre ici. Lorsque nous définissons une méthode, nous avons besoin d'un type de retour. Ce sera un privilège haussier parce que nous voulons savoir s'ils ont pris leur retraite pour vrai ou s' ils ont pris leur retraite pour de faux, par exemple. Maintenant, le nom de la méthode que je vais appeler est alors retiré. Cela ne prend aucun paramètre car nous avons accès à l'âge par le biais de la classe elle-même ici. À utiliser à l'âge, nous allons simplement créer notre méthode ici, puis ce que nous voulons faire , c'est renvoyer quelque chose comme ça. Visual Studio a déjà fait allusion à ce que nous pourrions vouloir faire, mais prenons-le ici Ce que nous disons ici, c'est que si l'âge de l'utilisateur est supérieur ou égal à 66 ans, nous pourrions également dire cela, ce qui est exactement la même chose, car cette condition sera évaluée comme vraie ou fausse. Et puis le résultat est stocké dans un bolen. C'est très simple, en fait. Ce que je veux faire, c'est prendre la condition ici, aller dans notre classe et nous voulons la renvoyer à partir de cette méthode ici. Juste comme ça, parce que nous sommes dans notre classe ici. Nous avons accès à l'âge des utilisateurs ici. Nous allons juste prendre ceci et nous allons le mettre là. Nous avons créé une méthode, elle n'a aucun paramètre, mais elle a un type de retour booling Nous renvoyons vrai ou faux si l'âge de l'utilisateur ici est supérieur ou égal à 66 ans. En revenant ici, nous pouvons le supprimer complètement. Maintenant, ce que nous pouvons faire, c'est prendre notre objet ici, qui est user, parce que nous le parcourons en boucle avant. Ensuite, nous pouvons accéder à une toute nouvelle méthode que nous venons de créer ici, appelée is retired. Et vous pouvez voir que cela renvoie un bolen. Je double-clique donc sur les parenthèses ouvertes et fermées car cela ne prend aucun paramètre Et maintenant, vous pouvez voir que le code semble beaucoup plus rationalisé. Nous n'avons pas ce genre de condition ici. Nous avons juste quatre types de bons bouts de code. L'un reçoit le nom, l'autre l'âge et l'autre s'ils sont retraités. Je viens de me rendre compte que j'ai mal orthographié « retraité » dans la méthode, personne n'est parfait Mais vous pouvez voir que cela semble beaucoup plus simple maintenant. Mais l'un des avantages et avantages de 00, de toute façon, c'est que votre logique est en quelque sorte cachée ici. Supposons, par exemple, qu'un membre de votre équipe, si vous travaillez dans une grande équipe, travaille sur ce cours ici et que vous travaillez sur ce cours ici. Vous n'avez pas à vous soucier de façon dont le montant de la retraite est calculé. Tu ne sais pas, peut-être que tu t'en fous. Tu ne sais même pas quel est l'âge de la retraite. Ce n'est pas grave, car la seule chose que nous devons appeler est cette méthode ici. Alors peut-être que notre ami de notre équipe logicielle pourra, vous savez, s'occuper des subtilités liées à la détermination de l'âge de la retraite Le principe est donc qu'il s'agit quelque sorte de vous cacher les informations, de les soustraire. Et c'est l'un des points clés de l'abstraction de la programmation orientée objet. Vous n'avez pas besoin de savoir comment cela fonctionne. Par exemple, si vous possédez une cafetière, vous n'avez pas besoin de savoir comment elle fonctionne. Vous savez comment cela fonctionne à l'intérieur, en interne, de tous les appareils électroniques. La seule chose à faire est de le remplir d'eau et d' appuyer sur le bouton. C'est donc ce que j' essaie en quelque sorte d'expliquer ici. Nous n'avons pas besoin de savoir comment cela fonctionne, suffit d'appeler la méthode et elle obtient une valeur vraie ou fausse. C'est donc l'un des avantages de l'utilisation de programmation orientée objet et c' est ainsi que les méthodes objets fonctionnent dans Sea Shop. 41. 9-4. Modificateurs d'accès (publics, privés, etc): Je vais maintenant parler des modificateurs d'accès en boutique. Cela semble un peu compliqué, mais je vais le décomposer. C'est donc très simple et vous allez comprendre tout ce qui concerne les modificateurs d'accès en boutique Qu'est-ce qu'un modificateur d'accès ? Maintenant, avant de parler du type de travail qu'aurait une classe, elle modélise en quelque sorte un objet du monde réel. Dans cet exemple. Ici, j'ai un cours de jeu vidéo. Lorsque je crée un nouveau jeu vidéo, par exemple, il veut le nom du jeu vidéo, son éditeur et une note pour le jeu. Vous pouvez donc voir qu'une classe ici représente un objet de jeu vidéo. C'est comme un objet du monde réel. Et lorsque nous créons des classes, nous voulons que tout soit inclus dans la classe. Par exemple, ce cours de jeu vidéo ne portera que sur le jeu vidéo. Nous ne voulons donc pas parler d'autre chose que du jeu vidéo ici. Peut-être comme la nourriture que nous mangeons pendant que nous jouons au jeu vidéo. Ou peut-être des informations sur l'utilisateur qui joue au jeu. Parce que ces informations utilisateur pourraient peut-être appartenir à une classe d'utilisateurs. Ou peut-être que la nourriture que l'utilisateur mange en jouant au jeu vidéo appartient à une classe alimentaire. C'est très important avec la programmation 00, vous conservez ce que l'on appelle des classes très cohérentes. Et cela signifie simplement que tout ce qui se trouve dans le cours de jeu vidéo est directement lié à un jeu vidéo. C'est le principe général. Quoi qu'il en soit, cela profite non seulement à l'organisation du code, mais permet également à différentes personnes de travailler sur ce projet. Par exemple, peut-être 100 personnes. Vous pouvez donc déléguer une ou deux personnes pour travailler, par exemple, sur ce cours. Bien qu'une autre personne puisse se concentrer sur cette classe principale ici, elle présente de multiples avantages. Mais quel est le lien entre cela et les modificateurs d'accès et autres choses de ce genre ? Eh bien, considérez cet exemple ici. Ce que je fais, c'est construire quatre objets de jeux vidéo ici. Je fournis des exemples de données Que se passe-t-il dans les coulisses lorsque je construis ces quatre objets ? Je suis juste en train de configurer quelques variables ici. Le nom, l'éditeur et le classement. Vous pouvez voir que les paramètres entrent dans le constructeur, et je ne fais que définir les valeurs Cependant, secrètement dans cette classe, je suis en train de générer un nouvel identifiant unique pour chaque objet que nous créons. Ce qui se passe ici, c'est que j'ai une méthode ici. Il s'agit simplement de configurer cette variable ici avec un identifiant unique. Vous n'avez pas à vous soucier de ce que cela fait, mais cela génère un identifiant unique, qui est unique et il ne devrait jamais y avoir de doublon. Il s'agit d'une fonction intégrée que vous pouvez utiliser pour ce faire Et il s'agit simplement de définir cette variable ici sur un identifiant unique. Donc, si nous créons un jeu ici en utilisant ce constructeur, il aura toujours un identifiant unique D'après cette partie du programme, nous n' avons aucune idée de ce qui se passe. Nous transmettons simplement trois valeurs. Nous ne savions même pas qu'il avait un identifiant unique. Nous n'avons aucune idée de ce qui se passe dans les coulisses. Et c'est là toute la beauté de la programmation orientée objet. Nous n'avons pas besoin de savoir et nous n'avons pas besoin de nous en soucier. Par exemple, je viens de créer ici cet objet appelé Game One. Quand je vais ici, je peux modifier à nouveau l'éditeur. Je peux le remplacer par une autre valeur. Maintenant je l'ai construit. Supposons par exemple que World of Warcraft Blizzard ait été racheté par Riot Games Ensuite, je souhaiterai peut-être modifier l'éditeur pour Riot Games plus tard dans le logiciel, par exemple. Je peux le faire sans problème. Cependant, que se passe-t-il si quelqu'un peut accidentellement modifier cette valeur d'identifiant ici ? Ce que je vais faire, c'est aller ici, le premier match, et vous pourrez voir ce champ d'identification ici. Je pourrais le changer comme bon me semble. Le truc, c'est que je ne veux pas que quelqu'un change ce champ d'identification. C'est déjà unique. Je ne veux pas qu'un autre membre de l'équipe modifie cette valeur. Cela pourrait corrompre les données car l'identifiant est unique. Et n'importe qui peut simplement changer cette valeur d'identifiant en sandwich au jambon, par exemple. Vous savez, cela pourrait avoir de nombreux effets indésirables. Premièrement, cela pourrait casser le logiciel. Deuxièmement, cela pourrait entraîner, vous savez, une perte d'informations. Vous savez, cela pourrait avoir de nombreux effets néfastes sur le logiciel. Donc, ce que je veux faire, c'est garder cet identifiant privé pour la classe. Je veux seulement que la classe elle-même connaisse cet identifiant et gère l'identifiant en interne à cette classe. Je ne veux pas que quelqu'un d'autre dans le logiciel modifie autres classes ou d'autres classes ou parties du logiciel touche à cet identifiant. Peut-être qu'ils peuvent simplement le regarder, mais je ne veux pas qu'ils le modifient, par exemple. C'est là que les modificateurs d'accès sont utiles. Désormais, les modificateurs d'accès appliquent ce que l'on appelle l'encapsulation, c'est-à-dire s'assurer que les données sensibles, comme l'identifiant dans ce cas, sont cachées aux utilisateurs ou aux personnes, ou même à d'autres logiciels qui ne devraient jamais y avoir accès C'est un exemple d'encapsulation et c'est pourquoi l'encapsulation est importante lors de la génération de programmes orientés objet Voyons comment nous pouvons restreindre l'accès à certaines variables ou même à certaines méthodes à l'aide de modificateurs d'accès Passons à notre classe. Parlons des différents modificateurs d'accès que nous pouvons avoir dans C Sharp Maintenant, le premier est ce qu'on appelle public. Vous pouvez le voir ici en public. Cela signifie simplement que tout ce qui est défini comme public, vous pouvez avoir une variable par exemple, ou vous pouvez même avoir une méthode. Par exemple, celui-ci ici bas, si je le rends public. Cela signifie que lorsque nous créons un objet de cette classe, nous pouvons y accéder depuis l'extérieur de la classe. Nous pouvons y accéder de n' importe où dans notre projet. N'importe où dans notre solution. J'ai tapé le premier jeu, puis un petit t là, et maintenant nous pouvons accéder à l'identifiant Nous pouvons accéder à la méthode de génération d' un nouvel identifiant ici. C'est parce qu' ils sont publics et nous pouvons y accéder de n'importe où. Maintenant, l'autre est ce qu'on appelle interne. Nous pouvons avoir des variables ici, nous pouvons avoir des constructeurs internes, nous pouvons avoir des méthodes internes La différence entre public et interne est que l'interne n' est accessible que dans l'assemblée ou le projet en cours. Qu'est-ce que cela signifie ? Eh bien, venez ici. Jusqu'à présent, nous avons travaillé sur un seul projet. Maintenant, ce que nous pouvons faire, c'est avoir un autre projet dans notre solution. Nous pourrions avoir 50 projets, par exemple. Ce que cela signifie pour notre projet. Ici, dans notre projet par défaut, seules les classes du projet peuvent accéder aux éléments internes. Si nous sommes dans un autre projet, ce projet représente peut-être la base de données, comme la couche de données ou peut-être le front-end où se trouvent tous les éléments graphiques. Ils ne peuvent alors pas accéder aux éléments internes car ils ne sont internes qu' au projet en cours. Nous parlerons plus en détail de plusieurs projets plus tard, mais c'est essentiellement ce qu'est le mot clé interne. Un autre modificateur d'accès est ce que l'on appelle protégé. Maintenant, nous parlerons de protection plus tard, alors ne vous inquiétez pas pour celui-ci pour le moment. La dernière question dont je veux parler est privée. Maintenant, le privé est très important pour l' exemple que je viens de donner ce qui concerne l'accès à l'identifiant en dehors de cette classe. Quel type de droit privé applique-t-il ? Les variables locales comme celle-ci ou même les méthodes comme celle-ci ne sont accessibles que depuis l'intérieur de la classe en cours. Ce que j'ai fait, c'est que j'ai changé cet identifiant privé et j'ai changé cette méthode en privé également. Si je reviens à mon programme principal ici et que je mets un point après cet objet, vous pouvez voir que la propriété ID, la variable ID, est absente de cette liste. Vous remarquerez également que la méthode permettant de générer un nouvel identifiant est également absente de cette liste. Vous pouvez voir ce qui se passe ici. C'est renforcer l'encapsulation. Cela masque des informations sensibles car nous voulons uniquement que la classe de jeu vidéo puisse générer de nouveaux identifiants et que vous contrôliez l'identifiant du jeu vidéo. Personne d'autre dans ce logiciel n'a besoin de connaître les identifiants. C'est propre au jeu vidéo et cela devrait rester propre au jeu vidéo. Par conséquent, ces champs doivent être rendus privés car seul le jeu vidéo doit en être informé , il s'agit d'informations privées. Alors considérez-le comme ça par exemple. Cependant, le nom de l'éditeur est public. Rendons l'évaluation interne. Tant que je travaille sur le même projet, je devrais pouvoir accéder au nom, à l'éditeur et à l'évaluation. Ce que je peux faire ici, évaluation du nom et éditeur. Pour le moment, l'identifiant est privé. Si j'essaie de l'utiliser de toute façon, par exemple, mettez-y des informations dans l'identifiant. Vous pouvez voir que j'ai une erreur ici. Et si je passe la souris dessus, cela indique que Video Game Dot ID est inaccessible en raison de son niveau de protection C'est parce que c'est privé. Nous ne pouvons pas réellement accéder à ces informations si nous essayons lancer le logiciel et de le compiler, ce n'est même pas sous forme de lettres. Vous pouvez donc voir à quel point c'est strict. Dès que je change cet identifiant en identifiant public ou interne, la ligne rouge disparaîtra. La protection a disparu. Nous pouvons exécuter le programme normalement. C'est donc le pouvoir des modificateurs d'accès dans C Sharp. Il applique ce que l'on appelle l'encapsulation et protège nos données sensibles des autres logiciels, autres segments du logiciel existant et même des utilisateurs travaillant sur différentes parties du logiciel Il renforce l'intégrité des données et prévient de nombreux problèmes indésirables qui peuvent en résulter Ce sont des modificateurs d'accès dans C Sharp et c'est pourquoi ils sont très utiles lors de la création de classes et d'objets Enfin, je voudrais parler de ce qui peut avoir des modificateurs d'accès Nous avons ici une méthode qui possède un modificateur d'accès. Nous avons ici quelques constructeurs qui ont des modificateurs d'accès ainsi que des variables locales. Ils ont également des modificateurs d'accès ici. Mais vous remarquerez que la classe qui contient tous ces éléments possède également un modificateur d'accès. Le public est désormais le modificateur d'accès le plus faible. Si un élément est rendu public, n'importe où dans l'ensemble de la solution, peut accéder à cet élément. Cependant, la classe elle-même est marquée comme interne. Cela signifie que seules les classes du projet ou de l'assemblage existant peuvent accéder à cette classe. Par défaut, ce modificateur d'accès plus puissant remplace tout modificateur interne plus faible Nous allons remplacer tous ces modificateurs d'accès public ici. Et c'est parce que la classe environnante est marquée comme interne. Par défaut, l'accès à tous ces éléments sera interne. S'ils sont publics, cela ressemblera à ça. Même s'ils sont marqués comme publics, c'est ainsi qu'ils seront accessibles. Cependant, si je marque la classe comme publique, n'est pas un problème car il s'agit du modificateur d'accès le plus faible Ils seront tous publics si vous avez déjà travaillé avec des autorisations de fichiers et de dossiers pour les systèmes d'exploitation et que divers paramètres peuvent remplacer les sous-dossiers Cela fonctionne de manière très similaire Pour clarifier, si j'ai pu marquer cette classe comme privée, alors par défaut, tout ce qu'elle contient sera privé quel que soit le modificateur d'accès. C'est ce que j' essaie de faire comprendre. Désormais, l'écriture de modificateurs d'accès en C sharp est facultative. Si je supprime le modificateur d'accès de la classe, classes sont toutes internes par défaut. Je pourrais écrire ceci et ce serait exactement la même chose que de le faire. C'est facultatif, mais il est supposé interne par défaut. Cependant, tout ce qui se trouve dans la classe, les méthodes, les constructeurs, les propriétés ou les variables est par défaut privé, sauf s'il est explicitement marqué comme public ou interne . On suppose alors qu'ils sont privés Écrire ceci serait exactement la même chose que d'écrire ceci. Dans ce cas, le mode privé est facultatif. Nous pourrions supprimer le modificateur d'accès privé de la méthode et de la variable ci-dessus. Et cela aura exactement le même effet car par défaut, tout ce qui se trouve dans la classe est considéré comme privé s'il n'y a pas de modificateur d'accès. 42. 9-5. Propriétés: Je vais parler des propriétés en boutique. Maintenant, nous allons également discuter du mot clé get et du mot clé set, également appelés getters et setters Alors, qu'est-ce que tout cela signifie ? Eh bien, jetons un coup d'œil. Si vous avez suivi les autres tutoriels consacrés à la programmation orientée objet jusqu'à présent , cela sera parfaitement logique et servira de point de départ. Si ce n'est pas le cas, je vous recommande vivement de les regarder afin de comprendre ce que je vais vous montrer. Qu'est-ce qu'une propriété de magasin ? Pourquoi devrions-nous les utiliser ? Les propriétés de la boutique imposent donc l'un des principes fondamentaux de la programmation 00, à savoir l'encapsulation. agit simplement de garantir que les informations sensibles ne sont accessibles nulle part ailleurs. Comme lorsque nous avons parlé de cette variable privée ici, elle n'est accessible qu' à l'intérieur de la classe et personne qui y accède n'a aucun contrôle là-dessus, par exemple. Cela va donc pousser les choses encore plus loin. Je vais donc présenter un scénario ici et vous montrer l'un des avantages de l' utilisation de propriétés pointues , de getters et de setters Dans cet exemple, nous avons défini une classe de jeu vidéo ici. Il contient différentes variables que nous pouvons utiliser et un constructeur avec trois paramètres Nous configurons ici quatre objets de jeu vidéo. Jeu 123.4 Dans le constructeur nous créons un nom de jeu vidéo, l'éditeur du jeu et une classification pour le jeu Supposons que lorsque notre programme démarre, toutes ces données sont chargées dans le système Plus tard dans le logiciel, l'utilisateur souhaite le modifier. Par exemple, le nom de ce jeu ici. Ils ont cliqué sur le bouton d'édition, peut-être dans le gars, et ils veulent changer le nom Pour une raison ou une autre, peut-être que le jeu vidéo porte désormais un autre nom. Nous allons demander à l'utilisateur un nouveau nom pour ce jeu, Game One. Et ils vont taper quelque chose dans le système. Supposons par exemple que nous leur demandions un nouveau nom, nous pouvons le définir en utilisant le nom de la variable ici. Peut-être qu'ils ont accidentellement appuyé sur G sur le clavier, puis sur Entrée. Ce que nous faisons ici, nous transmettons simplement leur entrée dans cette variable. Pas de problème du tout. Nous allons poursuivre notre journée. Cependant, ce n' est peut-être pas une bonne idée. Peut-être voulons-nous d'abord valider cette entrée. Peut-être voulons-nous nous assurer que le nom du jeu comporte au moins deux caractères ou qu'il ne contient aucun caractère numérique ou autre. Il y a peut-être quelques vérifications à faire. C'est là que les propriétés du C sharp peuvent entrer en jeu. Dans ce scénario particulier, il existe de nombreuses raisons d' utiliser les propriétés C sharp, mais ce n'est qu'un exemple que nous allons examiner. Maintenant, ce que je pourrais faire dans ce cas, c'est qu'au lieu de définir directement la variable name, je peux créer ici une méthode appelée update name. Et cela peut prendre notre nouveau nom de l'utilisateur. Ce qu'il peut faire, c'est effectuer divers contrôles de validation. Il peut dire, d'accord, le nouveau nom est-il inférieur ou égal à un caractère ? Si tel est le cas, nous ne pouvons pas mettre à jour le nom et nous pouvons effectuer toute autre validation sur le nom. Enfin, nous pouvons réellement mettre à jour le nom. Par exemple, ce que je peux faire ici, c'est mettre à jour le nom du jeu 1. Maintenant, plutôt que de définir une variable, je peux utiliser une méthode. Pour ce faire, je transmets notre nouveau nom potentiel que l'utilisateur nous donne. Ensuite, cette méthode renverra soit vrai si elle le peut, soit faux si elle ne le peut pas. Ensuite, mettez à jour la variable interne dans un nom ici en interne au sein de la classe. Et c'est parfaitement acceptable plutôt que d'utiliser une méthode dans ce cas, car il se peut que nous ayons besoin d' une méthode pour mettre à jour l'éditeur, ou d'une autre méthode pour mettre à jour la note. Mais maintenant, nous utilisons des méthodes pour mettre à jour le nom, par exemple. Eh bien, nous pouvons toujours accéder au nom lui-même, nous devons donc restreindre l'accès au nom car nous voulons uniquement mettre à jour le champ du nom en utilisant notre nouvelle méthode, le nom de mise à jour. C'est donc essentiellement là qu'entrent en jeu les propriétés de C sharp. Et le principe qui consiste à rendre les variables locales d'une classe privées uniquement, vous pouvez voir que dans notre classe nous avons toutes ces variables ici , nous en avons trois publiques et une privée. Nous avons examiné un exemple et je vais vous dire maintenant qu'il est courant de rendre privées toutes vos variables dans les classes. Cela signifie que personne en dehors de la classe ne peut modifier ces variables de quelque façon que ce soit. Si j'accède au jeu, un objet. Maintenant, je ne peux pas accéder directement au nom. Je n'arrive pas à accéder à la variable publisher, rien. La seule façon d'accéder au nom ou de le mettre à jour est d'utiliser notre méthode de mise à jour. Et c'est exactement ce que nous voulons car lorsque l'utilisateur saisit une entrée ici, nous voulons qu'elle passe par la validation. Nous voulons nous assurer que le nom comporte au moins autant de lettres ou, vous savez, diverses autres choses. Ensuite, nous voulons enfin le mettre à jour. Cette méthode est donc une solution acceptable pour le faire. Et cela garantit que toutes nos variables ici sont privées parce qu'elles sont sensibles Nous ne voulons pas que d'autres personnes, vous savez, y accèdent et y insèrent d'anciennes valeurs. Cela impose l'encapsulation ainsi qu'un principe Core 00 Mais si je vous disais qu'il existe un moyen plus simple de faire cette méthode ? Nous n'avons pas besoin d'écrire une méthode comme celle-ci à chaque fois que nous mettons à jour une variable. Il y a peut-être un autre moyen. C'est là que les propriétés C sharp entrent en jeu. Je vais donc créer une nouvelle propriété C Sharp. Maintenant, lorsque nous créons une propriété, nous lui donnons un modificateur d'accès. Je vais le dire public parce que je veux tout le monde accède à notre champ de nom. Le nom est alors une chaîne de caractères. Comme vous pouvez le voir ici, le nom est une chaîne, alors je dois lui donner un nom. Désormais, lors de la création de propriétés et de variables, par exemple, elles sont également appelées champs. Les champs eux-mêmes sont généralement et généralement tous en minuscules. Vous pouvez voir que tous ces cas sont des cas ici. Les propriétés elles-mêmes ont juste une première lettre majuscule. Si les variables ici contiennent deux mots, cela ressemblerait à ça. Étui de titre, par exemple, sans les espaces blancs. C'est une pratique courante. Les champs locaux ici, les variables locales en minuscules et les propriétés sont toujours en majuscules au début C'est juste une bonne pratique. Une fois cela fait, je vais maintenant vous montrer une propriété C sharp dans sa forme de base. Chaque fois que nous voulons mettre à jour le nom du champ privé, nous passons en revue cette propriété ici, comme lorsque j'ai parlé de l'exemple. Chaque fois que nous voulons mettre à jour le champ du nom, nous utilisons cette méthode. Eh bien, plutôt que d'utiliser cette méthode ici, nous allons utiliser cette propriété C sharp à la place. Chaque fois que nous voulons accéder à cette variable locale ici, nous allons toujours utiliser notre propriété à la place. Considérez cela comme un accesseur pour notre variable locale ici. Pour que la variable en obtienne réellement la valeur, elle va la renvoyer en utilisant le mot clé return. Chaque fois que nous voulons définir une valeur , la variable locale sera égale à ce mot clé spécial appelé ici valeur. C'est la valeur qui y est transmise. Regardons un exemple de cela en ce moment. Si nous entrons dans notre classe principale ici, plutôt que d'utiliser cette méthode ici dans notre exemple, je veux dire le nom du jeu 1. C'est la propriété de notre boutique juste ici. Ensuite, nous pouvons réellement lui donner une valeur, comme par exemple. Maintenant, ce qui se passe ici, c'est que nous utilisons le nom de la propriété, mais en interne, dans cette classe, c'est elle qui entre ici et définit la valeur. Cette section se trouve juste à l'intérieur de cette déclaration Get. C'est ici que nous voulons effectuer cette validation. Copions tout cela ici, puis mettons ces bretelles bouclées sur une nouvelle ligne Supprimons cela pour le moment. Ce que nous faisons ici, c'est que chaque fois que nous définissons cette propriété shot, cette instruction set est appelée. Vous pouvez voir ici que lorsque nous utilisons un signe égal avec une nouvelle valeur sur cette propriété de boutique, en interne, ce bloc défini, en interne, ce bloc défini, tout cela est exécuté à la fin de celui-ci, nous voulons simplement définir notre variable locale ici, name, à la valeur transmise. La valeur magique du mot clé dont je viens parler sera égale à cette valeur ici, quelle que soit la valeur assignée. Chaque fois que cette propriété est définie ici, c'est ce que nous faisons, nous la définissons sur, puis nous effectuons toute cette validation ici. Nous devons utiliser la valeur magique du mot clé, qui est la valeur que nous sommes en train de vérifier. Cela produirait exactement la même chose que cette méthode ici. valeur remplace simplement le nom dans cette instance, vérifions-le et révisons-le une fois de plus. Nous donnons une valeur au nom de la propriété de la boutique ici. Maintenant, la valeur va être égale à, ça pourrait être n'importe quoi. Cela n'a pas vraiment d'importance. Ensuite, le flux d' exécution arrive ici, et cette méthode set est appelée parce que nous définissons une valeur, ce mot clé magique ici. La valeur va être égale car c'est la valeur transmise. Nous vérifions maintenant que la longueur du nom de l'utilisateur est inférieure ou égale à un. Si c'est le cas, nous ne pouvons pas le mettre à jour, alors pas de chance, nous faisons toute autre validation, quelle qu'elle soit. Si nous pouvons enfin le mettre à jour, nous allons définir le nom de notre variable privée, qui correspond à la valeur transmise. C'est la magie de l'utilisation d'une propriété de boutique et du mot clé défini. Ici, nous n'avons pas besoin d'une toute nouvelle méthode. Pour ce faire, nous pouvons utiliser des fonctionnalités intégrées Le principal point à retenir est que les établissements commerciaux contrôlent l'accès aux informations sensibles Et ces éléments sont tous nos champs locaux. Ils sont tous considérés comme des informations sensibles. Nous ne voulons pas que les utilisateurs mettent simplement d'anciennes valeurs ici. Nous voulons peut-être une validation pour nous assurer, vous savez, que les valeurs transmises sont exactes. Vous savez qu'ils sont valides ou pour une autre raison. Et quand elles le seront enfin, nous pourrons mettre à jour nos variables privées sensibles et précieuses dans ce cas. C'est donc l'avantage d' utiliser les propriétés C sharp. Nous avons longuement parlé du mot clé set. Passons simplement au mot clé get très rapidement. Le mot clé get obtient simplement la valeur de notre variable privée. Encore une fois, nous pouvons faire diverses choses en cours de route avant de finalement le retourner. Nous pouvons faire tout ce que nous voulons ici, comme dans le mot clé défini ici, nous pouvons faire ce que nous voulons. Mais en fin de compte, nous allons enfin le rendre d'ici. Ce que nous pouvons faire ici , c'est afficher le nom du jeu dans la fenêtre de la console. Lorsque cette ligne s'exécute ici, nous affichons simplement un nom dans le jeu dans la fenêtre Vous pouvez donc le voir ici. Donc, ce qui se passe en interne, c'est lorsque nous obtenons réellement cette valeur, donc ce que nous voulons faire, c'est obtenir le nom du jeu. En interne, ce bloc get est appelé. Nous pouvons faire ce que nous voulons ici, toutes les vérifications, toutes les validations que nous pourrions enregistrer dans une base de données ou un fichier. Ensuite, nous pouvons enfin renvoyer nos informations sensibles ici, le champ privé en dehors d'ici, puis les renvoyer à la fenêtre. Vous pouvez voir le mot clé get, dans ce cas, qui contrôle l'obtention de notre variable locale ici. De même, le mot clé set contrôle l'initialisation d'une valeur dans notre précieux champ local sensible ici Et encore une fois, il est toujours recommandé d'avoir une propriété C sharp pour chacun de vos champs privés ici. Et par défaut, vous devez toujours rendre vos champs locaux privés, sauf en cas de circonstances atténuantes ou de raisons particulières L'une des autres choses que nous pouvons faire avec propriétés C sharp est de les rendre en lecture seule. Ce que je veux dire par là, c'est que l'utilisateur peut accéder aux variables privées, mais il ne peut pas les initialiser, il ne peut leur donner aucune valeur Par exemple, disons le champ éditeur, nous voulons le rendre en lecture seule. Qu'est-ce que je veux dire par là ? Par exemple, si je souhaite obtenir l'éditeur de l'un de ces objets de jeu, j'utiliserais Game One Publisher. Et ce serait comme si je pouvais accéder aux informations en lecture seule. Mais lorsque j' essaie réellement de définir les données, par exemple en définissant le nom, je ne peux pas le faire. Il ne me le permettra pas, comment puis-je m'y prendre ? C'est peut-être utile. Ce que nous pouvons faire ici, c'est créer une nouvelle propriété pour notre éditeur. Encore une fois, nous avons notre format habituel, nous utilisons une majuscule pour les bonnes pratiques. Visual Studio nous aide ensuite en nous indiquant ce que nous pourrions vouloir faire C'est super, je vais m'en servir. Voici comment rendre une propriété en lecture seule. Oui, mais nous ne définissons tout simplement pas de mot clé défini. Il suffit d'entrer ici. Maintenant, vous ne pouvez pas avoir un set en lui-même, vous avez toujours besoin d'un get. Mais vous pouvez avoir juste un get qui le rend en lecture seule. Jetons un coup d' œil à cet exemple. Maintenant, si nous voulons afficher l' éditeur à l'écran, nous pouvons simplement le faire. Nous pouvons afficher l' éditeur à l'écran. Ce n'est pas du tout un problème, ça va marcher. Si j'essaie de définir une valeur ici, je veux vraiment mettre à jour cet éditeur. Vous pouvez voir qu'il y a une erreur ici, il y a une ligne rouge. Si je survole cela, vous pouvez voir ici que propriété ou l'indexeur ne peuvent pas être attribués, ils sont en lecture seule C'est simplement parce que nous n'avons pas défini de mot clé défini ici. Il n'y a pas de setter, on ne peut pas vraiment définir de valeur ici. Ceci est très utile si vous avez ici des champs sensibles auxquels vous ne souhaitez qu'un accès en lecture. Peut-être voulons-nous lire notre champ ID ici, mais nous ne voulons pas que l'utilisateur le définisse par exemple. Nous aurions alors quelque chose comme ça où nous ne fournirons qu'un accès en lecture à nos variables locales ici même. Une autre chose que nous pouvons même faire est d'ajouter des modificateurs d'accès à nos mots clés et de les définir Ici, nous avons notre nom, nous voulons que tout le monde le connaisse. Mais peut-être voulons-nous en faire un cadre privé. Seules les personnes de notre classe ici peuvent réellement le faire. Ce que nous pouvons faire ici, c'est rendre le setter privé. Cela signifie que si nous essayons de définir cette valeur de nom ici depuis n'importe où en dehors de cette classe, elle ne sera pas composée de lettres. Donc, si je vais dans le fichier principal ici, j' essaie d'initialiser le nom en tant que valeur. Je passe la souris dessus Vous pouvez voir qu'il ne peut pas être utilisé dans ce contexte car l' accessoire du set est inaccessible. Nous ne pouvons pas réellement le définir depuis n' importe où en dehors de cette classe. Dès que je le supprime, vous pouvez voir l'erreur disparaître et nous pouvons redéfinir le nom. Les propriétés Sharp sont en fait assez puissantes, nous venons juste de les aborder, mais je pense que cela suffira à vous lancer dans vos efforts pour les utiliser. Ce que vous devez en retenir, c'est que les propriétés de C Sharp contrôlent l'accès à vos champs privés à l'aide de getters et de setters, qui font partie de vos classes C Sharp Merci d'avoir regardé. 43. 9-6. Héritage: OK, héritage en C Sharp. Vous avez peut-être déjà entendu le mot, vous ne l'avez peut-être pas entendu, mais je vais l'expliquer tout de suite. Alors, qu'est-ce que l'héritage dans C Sharp ? Fondamentalement, le principe de base de l'héritage est d'augmenter la réutilisabilité du code Et c'est très important même en termes de programmation orientée objet, pas en termes de programmation orientée objet Le fait est que si nous copions et dupliquons du code, notre logiciel finira par être très difficile à maintenir. fichier va avoir une grande taille et vous allez avoir beaucoup de problèmes. Réutilisez toujours le code dans la mesure du possible. Examinons un exemple d' héritage en C Sharp. Donc, ce que j'ai ici est une application très basique. J'ai créé un nouvel objet animal et j'ai une classe d'animaux pour cela. Jetons un coup d'œil à la classe animale. Voici donc mon cours sur les animaux. Il comporte ici deux champs privés, le nom et l'âge. Ainsi, le nom de l' animal pourrait être Rocky, et Rocky pourrait avoir sept ans, comme Rocky pourrait être un chien par exemple. J'ai ici deux méthodes de base qui font simplement écho au nom de l'animal dans la fenêtre de la console et une autre méthode qui fait écho à l'âge de l' J'ai deux boutiques ici, deux propriétés publiques qui me permettent contrôler mes champs privés ici, mon nom et mon âge. C'est donc un cours très simple. J'ai créé un objet animalier ici. J'ai défini le nom Property et Rocky Age à sept. Maintenant, j'utilise simplement ces méthodes qui font simplement passer ces valeurs à l'écran si nous exécutons l'application. Maintenant, vous pouvez voir que c'est très simple. Je m'appelle Rocky, j'ai sept ans. Il s'agit donc d'une classe animale de base. Disons maintenant que je souhaite étendre mon application. Peut-être que je veux un logiciel qui me permette de créer un zoo d'animaux. Je voudrais peut-être un cours pour chiens, cours pour rats, un cours pour chats, un cours pour hamsters Je voudrais peut-être 20 classes chacune représentant un animal à sa manière. Si nous venons ici maintenant, nous pouvons cliquer avec le bouton droit sur le projet ici et ajouter une nouvelle classe. Et disons que nous voulons créer un cours pour chiens. Ce cours aura tout à voir avec un chien. Par exemple, un zoo compte peut-être des centaines de chiens et nous voulons gérer nos chiens dans sa propre classe de chiens. C'est parfaitement raisonnable. Encore une fois, nous pourrions avoir un cours sur les chats, un cours sur les hamsters, plein de choses Mais ce que nous voulons, notre classe de chiens, nous voulons toutes les fonctionnalités de cette classe d'animaux, parce que notre chien aura un nom, il aura un âge. Mais peut-être qu'il y a d'autres choses, comme peut-être des méthodes pour creuser. Et tous les animaux ne peuvent pas creuser, par exemple, peut-être quelque chose de spécifique à un chien. Mais nous voulons cette fonctionnalité de base. Notre chien va avoir un nom et un âge. Je veux toutes ces choses et je vais les mettre dans mon cours de canin. Alors maintenant, je peux en quelque sorte m'appuyer sur cela. Je peux ajouter quelques méthodes pour, vous savez, le chien creuser ou le chien mendier des friandises, ou peut-être certaines astuces pour chiens Mais le problème, c'est que nous avons copié toutes ces fonctionnalités de base qui vont fonctionner, pas de problème. Mais le problème, c'est que lorsque j'ai une autre classe, peut-être une classe pour chats ou une classe de cobaye, encore une fois, je veux qu'ils aient également cette fonctionnalité de base. Et le problème, c'est que je vais avoir toutes ces informations dans vingtaine de classes différentes et cela va être très difficile à maintenir. Et pas seulement cela, cela va augmenter, comme je l'ai déjà dit, la taille du fichier dans l'application. Comment contourner ce problème ici ? Notre boutique a quelque chose que nous pouvons utiliser et qui s'appelle l'héritage. Héritage en C Sharp, c'est très facile à démarrer, mais peut-être plus complexe à maîtriser. Mais commençons et voyons comment nous pouvons le faire. Nous n'avons besoin d'aucune de ces fonctionnalités dans notre classe. Ce que nous pouvons faire, c'est hériter des fonctionnalités de la classe animale Toute cette boîte de trucs ici, tout ce qui est public en tout cas. Et nous pouvons accéder à notre classe de chiens et nous pouvons utiliser deux points , puis taper la classe dont nous voulons hériter les fonctionnalités Dans ce cas, ce sera un animal rien qu'en faisant cela. Un tout petit bout de code ici. Maintenant, notre classe de chiens connaît toutes les méthodes publiques ici et toutes les propriétés publiques que nous pouvons avoir dans cette classe. Jetons un coup d'œil à un exemple. En ce moment, vous pouvez voir que notre cours pour chiens est parfaitement vide. Notre classe d'animaux suit toute cette logique. Créons un nouvel objet pour un chien et voyons si nous pouvons réellement utiliser certaines de ces propriétés et méthodes ici. Créons un nouvel objet pour un chien. Je vais juste l'appeler Do. Nous pouvons donner le nom au chien. Bingo, pourquoi pas l'âge du chien ? Nous pouvons le fixer à trois, par exemple. Je vais juste les renommer. Vous pouvez voir ici qu'il n'y a pas de lignes rouges sous ces propriétés. Il n'y a aucune erreur lors de l'utilisation de ces méthodes. Nous pouvons même lancer l' application, sans problème. Et maintenant, regardez, je m'appelle Bingo. J'ai trois ans. Vous pouvez voir ici que le chien a hérité de toutes les fonctionnalités de l'animal, de toutes les méthodes et propriétés publiques de l'animal. Vous pouvez voir ici le cours pour chiens. Il est totalement vide. Mais vous pouvez voir que nous réutilisons ici tout ce code qui est vraiment efficace et c' est le but de l'héritage. Dans cet exemple, nous disons que l'animal est soit la classe des parents, comme dans le cas d'un parent et d'un enfant, où l'enfant peut hériter de la capacité de respirer, saigner ou de manger des éléments de votre ADN C'est de là que vient la terminologie. Dans ce cas, l'animal serait le parent et le chien l'enfant. Mais d'autres synonymes seraient la classe de base ou la superclasse chien serait l'enfant, la classe dérivée ou la sous-classe Ce sont tous des synonymes, mais ils signifient essentiellement le même genre de chose. Lorsque vous envisagez l'héritage en C Sharp, vous devez tenir compte d' une chose, d'une pensée qui vous trotte dans la tête, à savoir : un chien, un animal est un chat. Un animal est un rat, un animal. Si c'est le cas, l'héritage est parfait pour vous. Et vous ne vous méprenez pas sur le concept. Lorsque vous héritez d'une boutique, considérez toujours s'il s' agit d'une relation L'héritage est un sujet très long. Mais il y a une autre chose que je vais expliquer pour que ce que je vais faire soit parfaitement clair. Je vais définir une méthode propre à un chien au sein de notre classe de chiens. Je veux que ce soit, peut-être un aboiement, par exemple. Parce que tous les chiens aboient, laissez-moi créer une méthode où le chien aboierait. Vous pouvez donc voir que j'ai créé ici une méthode appelée bark. Et tout ce qu'il fait, c'est écrire dans la fenêtre de la console. Woof, woof. C'est très simple. Et tout comme chez les humains, si vous en avez un, vous pouvez hériter de choses à la naissance, comme je l'ai déjà mentionné Mais le parent ne peut pas hériter de l'enfant. Par exemple, si l'enfant a une nouvelle capacité, comme aboyer par exemple , l'animal n'en a aucune connaissance Tout comme dans une relation parent/enfant, si votre enfant a une nouvelle compétence, il peut-être devenu artiste. Cela ne veut pas dire que le parent est artiste. Tu sais, l'héritage ne fonctionne pas comme ça. Permettez-moi donc de vous en montrer un exemple maintenant. Nous avons donc défini une méthode dans la classe dog appelée bark. Si je passe à notre programme principal de canon ici, si je mets un petit point après l'animal, vous verrez que l'animal ne connaît pas la méthode des aboiements. Ce n'est même pas prévu dans cette liste. Cependant, si nous allons voir le chien ici et que nous le saisissons, avons-nous la méthode que nous venons de créer, appelée aboiement ? Nous pouvons exécuter l'application. Maintenant, vous pouvez voir que vous le pouvez. Le chien aboie , puis nous ne faisons que répéter le nom et l'âge du C'est un exemple très simple d'héritage dans un magasin. 44. 9-7. Suppression de méthode (polymorphisme): OK, la méthode plutôt que l'équitation. Si vous n'avez pas vu le précédent tutoriel sur l'héritage, je vous suggère vivement de le regarder car il fait suite à ce que j'ai ici. J'ai une classe animale de base. Nous donnons un nom et un âge à la classe d'animaux. Maintenant, j'ai un cours pour chiens. Et encore une fois, le chien a un nom et âge et il y a aussi une classe pour chats ici. Et ils font différentes choses avec l'animal. Je dis le nom âge et je fais même bruit pour le chien et pareil pour le chat. Si je vais à mon cours sur les animaux ici, nous avons les choses habituelles, les méthodes du dernier tutoriel. Mais nous avons également une autre méthode ici et elle s'appelle faire du bruit. Il ne fait que renvoyer à l'écran quelque chose qui dit qu'il produit des bruits d'animaux aléatoires J'ai un cours pour chiens qui hérite des animaux. Elle hérite de toutes les fonctionnalités publiques que nous lui avons définies. Et une classe de chats qui hérite également de l'animal, mais qui ne fait rien Les cours pour chats et chiens ne servent à rien. Pour le moment, si nous gérons le programme, vous pouvez voir ici que je m'appelle Henry. J'ai cinq ans. Émet des bruits d'animaux aléatoires. Et il en va de même pour le chat. Ce que nous faisons ici, c'est hériter de toutes ces fonctionnalités Mais vous pouvez voir en particulier que nous héritons de cette méthode appelée make Noise Maintenant, cela fait partie de la classe des animaux, par exemple, nous ne savons peut-être pas quel type d'animal nous avons, nous avons juste un animal générique appelé Henry. Cependant, dans mon cours de caniculture, je sais que les chiens aboient. Par exemple S, je voudrais que Lassie aille au bar. Je ne veux pas que Lassie fasse des bruits d'animaux au hasard. Pareil pour la classe des chats. Nous avons Felix. J'aimerais que le chat, par exemple, je pourrais facilement le faire en définissant ici une nouvelle méthode appelée aboiement dans la classe des chiens. Ensuite, dans la classe cat, je peux définir une méthode appelée make noise ou per, ou meow ou quelque chose comme ça, qui est propre à un chat Mais ce que nous pouvons réellement faire, c'est remplacer cette méthode appelée ici make noise Cela signifie que nous pouvons hériter de cette fonctionnalité de bruit. Mais ça ne va pas faire ça, ça va faire autre chose. C'est quelque chose d'autre que nous pouvons définir dans notre classe pour enfants. Par exemple, le cours pour chiens. Comment remplacer cette méthode ? Comment en hériter et le remplacer ? Eh bien, dans la classe pour enfants, chien, nous héritons déjà de la méthode parce que nous émettons des bruits d'animaux au hasard Mais nous voulons que le chien aboie. Alors, comment s'y prendre ? Ce que nous devons faire dans la classe parent, donc dans ce cas animal, nous devons faire de la méthode ce qu'on appelle virtuelle. Et ce que c'est, c'est un nouveau mot clé appelé virtual. Et cela dit simplement, d'accord, si vous héritez de cette classe, vous pouvez donner votre propre définition de cette méthode si vous le souhaitez. C'est ton choix. Tu n'es pas obligée pour le moment. Je ne suis même pas en train de le faire. Je lance le programme, j'hérite de toutes ces fonctionnalités. Virtual, c'est essentiellement dire, d'accord, l'option est là pour redéfinir votre propre contenu Pour cette méthode, elle est facultative, vous n'êtes pas obligée de le faire. C'est virtuel. Mais ce que nous voulons faire, oui, nous voulons réellement disposer de nos propres fonctionnalités. Par exemple, dans cette classe pour enfants, faites ce que je veux faire lorsque j'appelle la méthode make noise ici. J'ai envie d'aboyer. Je veux que le chien aboie. Pour ce faire, je dis aboiement ou woof, ou peut-être les deux. Pourquoi pas ? J'ai copié cette méthode ci-dessus, mais nous ne mettons pas le virtuel ici. Nous utilisons un nouveau mot clé appelé override. Et c'est encore une fois un mot clé spécial. Dans la classe de base, la classe parent, nous utilisons le mot clé virtual. Dans la classe enfant, nous utilisons le mot clé override Cela revient essentiellement à dire, d'accord, j'hérite de cette méthode de la classe parent animal, mais je veux ma propre définition Je veux passer outre à votre logique canonique et mettre ma propre dérogation dans la classe enfant, dans ce cas, dans ce cas Dans la classe de base, nous devons le définir sur virtual. Si nous ne mettons pas le virtuel, nous ne pouvons pas le remplacer Ils vont ensemble comme un couple dans notre classe de chats. Eh bien, je veux le chat pour moi maintenant. Par exemple, là, c'est aussi simple que si je lançais l'application. Maintenant, vous pouvez voir ici que je m'appelle Henry. Maintenant, Henry est un animal générique. Ce n'est ni un chien ni un chat. Henry fait des bruits d'animaux au hasard. Cependant, Lassie or Less est un chien. Lorsque nous appelons la méthode, faites du bruit ici pour le chien, puis le chien aboie et loupe Eh bien, le chat ne va pas émettre de bruits d'animaux au hasard car la classe cat remplace également la méthode virtuelle Faites du bruit et le chat miaule. Vous pouvez voir que c'est un exemple assez simple de la façon dont nous pouvons réutiliser cette méthode ici, créer du bruit défini dans notre classe parent, mais en lui donner notre propre définition. Il s'agit de réutiliser du code existant comme cette méthode ici. Mais nous ne voulons pas cette fonctionnalité, nous voulons la nôtre. Le processus de définition de notre propre définition est un exemple de ce que l' on appelle le polymorphisme Qu'est-ce que c'est ? C'est un mot grec qui signifie de nombreuses formes ou de nombreuses formes. Mais c'est un principe clé de la programmation orientée objet. Vous avez donc fait un exemple de polymorphisme pendant tout ce temps, peut-être sans Mais c'est le principe clé de la programmation 00 et il est très important, comme vous l'avez déjà vu. Cela est possible grâce à l' héritage et à la réutilisation du code. Mais pas seulement cela, mais en fournissant votre propre définition de quelque chose. C'est donc du polymorphisme. Il s'agit donc d'un exemple de remplacement de méthode en do sharp. 45. 9-8. Héritage à plusieurs niveaux: OK, héritage à plusieurs niveaux. Si vous n'avez pas regardé les précédents tutoriels sur l'héritage, je vous recommande vivement de les regarder maintenant, car ils font suite à cet héritage à plusieurs niveaux. Regardons donc un exemple ici. Ici, j'ai une classe d'animaux, elle est ici. Il définit certaines choses de base à faire avec les animaux, en particulier cette méthode qui fait du bruit. Maintenant, cette méthode est virtuelle, qui signifie que toutes les classes enfants de cet animal de classe de base peuvent éventuellement définir leur propre contenu pour cette méthode. OK, nous en avons parlé, maintenant nous avons deux nouveaux cours. L'un est appelé carnivore et sa classe mère est animale et l'autre appelé Le carnivore est comme un mangeur de viande, un herbivore mange des plantes et un herbivore est un animal Cela satisfait donc ce type de relation. Et l'herbivore remplace la méthode de la classe animale parente et définit sa propre fonctionnalité, à savoir que je suis un herbivore, que je fais des bruits mangeurs de plantes, et il en va de même pour le carnivore bruits mangeurs de plantes, et il en va de même pour classe animale parente et définit sa propre fonctionnalité, à savoir que je suis un herbivore, que je fais des bruits mangeurs de plantes, et il en va de même pour le carnivore. Il remplace la méthode virtuelle et définit son propre code Je suis carnivore et je fais des bruits en mangeant de la viande. OK ? Si nous créons un objet carnivore ou herbivore et que nous exécutons cette méthode, nous obtiendrons Maintenant, chat et chien. Maintenant, le chat est carnivore. Le chien est également carnivore. Vous pouvez voir ce qui se passe ici, c'est que le chien est presque comme le petit-fils d'un animal. Le cours de carnivore se situe entre chien et animal. La classe de base ici est l' animal, puis les animaux, l'enfant est le carnivore, puis l'enfant du carnivore C'est un exemple d'héritage à plusieurs niveaux. Nous avons une hiérarchie ici. Nous avons le petit-fils, le chien. Le père est carnivore. Le grand-père serait l'animal par exemple. Il y a plusieurs niveaux d'héritage ici, vous pouvez parfaitement faire ce que vous trouvez en do dièse. Ce n'est qu'un exemple. Vous pouvez voir ici que le chien remplace également la méthode « faire du bruit Ça aboie, ouah. Jetons donc un coup d' œil à un exemple. Ici, je crée un nouvel animal, c'est la classe de base, comme le grand-père Je suis en train de créer un nouveau chien qui ressemble à un petit-fils et à un nouveau chat, puis j'utilise la méthode Make Noise pour chacun d'entre eux. Je n'ai pas d'objet carnivore. Je n'ai pas d'objet herbivore. Lancez l'application ici. Fait des bruits d'animaux aléatoires parce que nous ne savons pas quel est Henry C'est ce que nous avons défini alors. Le chien et le chat ont leur propre définition du terme « faire du bruit ». Bark, wolf and O, que se passera-t-il si je supprime cette méthode ici pour le chien ? Que se passe-t-il ? Suis-je en train d' hériter d'un carnivore ? Suis-je en train d'hériter d' un animal comme son grand-père ? Eh bien, je vais vous montrer tout de suite qu'elle hérite de la classe parent, donc vous pouvez voir maintenant que je n'ai pas de méthode appelée make noise in dog Lorsque le chien fait du bruit, il regarde sa classe parentale, et dans ce cas, il s'agit d'un carnivore Carnivore remplace make noise et donne sa propre définition lorsque nous exécutons Voici Henry, l'animal aléatoire Noise. Mettons simplement cela en vue. Voici Henry, voici le chien. Parce que la classe canine ne remplace pas cela maintenant. Maintenant, il passe à son parent, un carnivore, qui le remplace Maintenant, le chien dit : je suis carnivore, il fait du bruit en mangeant de la viande, et le chat a toujours sa propre méthode, définie de manière à ce qu'il miaule Mais c'est un exemple très basique d' héritage à plusieurs niveaux dans C Sharp et comment nous pouvons l'utiliser. Combien de niveaux d' héritage pouvez-vous avoir ? De quelle taille peut-on construire cet arbre généalogique d'animaux par exemple ? Eh bien, il n'y a pas de véritable limite, mais lorsque vous créez un logiciel, vous ne voulez pas le rendre complètement ridicule. 234 niveaux peuvent peut-être dépendre de la taille de votre application. Donc, avec dix ou 50 niveaux d'héritage, je ne vois aucun exemple pour lequel vous voudriez le faire. Mais le but de ce tutoriel est simplement de vous montrer que c'est possible et que vous savez que c'est le cas, les gens l'utilisent dans le monde réel. Il existe un autre type d' héritage appelé héritage multiple. C'est là qu'une classe, comme le chat, peut hériter non seulement d'un animal, mais peut-être de quelque chose d'autre, comme un félin ou quelque chose comme ça Donc deux cours. Maintenant, shop ne le supporte pas nativement, mais cela peut être réalisé grâce à des interfaces, dont nous parlerons dans un prochain tutoriel Il existe donc différentes configurations pour l'héritage, mais ce n'est qu'un exemple d'héritage multicouche Alors je peux vous aider à démarrer ? J'espère que ce tutoriel vous a aidé à envisager de nombreuses possibilités liées à l'héritage en boutique. 46. 9-9. Le mot-clé scellé: Je voudrais parler du mot clé scellé en boutique et il ressemble à ceci. Le mot clé sealed est très utile pour restreindre l'héritage au niveau de la classe. Qu'est-ce que cela signifie ? Voici un exemple d' héritage à plusieurs niveaux dans C shop. J'ai un cours de jeu qui ressemble à celui de la mère, par exemple. J'ai un jeu vidéo, celui de l'enfant. Et puis j'ai Super Mario, qui est le petit-fils Cela ressemble donc à ceci. Voici donc le jeu de classe de base. Il n'y a qu'une seule méthode qui indique ce qui est cool, et elle est marquée comme virtuelle. Cela signifie donc que toutes les classes enfants de ce peuvent choisir de remplacer cette méthode s'ils le souhaitent Ensuite, sous le jeu de classe de base, j'en ai un appelé jeu vidéo qui hérite du jeu et qui remplace cette méthode Mais au lieu de dire que le jeu est cool, on dit que ce jeu vidéo est cool. Ensuite, j'ai la classe grandchild dans cette application qui hérite du jeu vidéo Elle remplace également la méthode what is call. Maintenant, il est dit que Super Mario est l'appel. Si je regarde cette application ici où je configure trois objets et que j'appelle simplement ces méthodes, elle produira simplement les résultats de ces méthodes, c'est du polymorphisme Ce que je peux faire avec le mot clé scellé, c'est restreindre l'héritage d'une classe. Le jeu vidéo, c'est comme la garniture de ce sandwich. Son parent est un jeu, mais son enfant est Super Mario. Donc, par exemple, si je dis que c'était une classe scellée, cela signifie qu'aucune autre classe ne peut hériter de cette classe, donc elle ne peut plus avoir d'enfants Imaginez que c'est peut-être comme une phasectomie ou quelque chose comme ça Cependant, vous devez essayer de vous rappeler que maintenant, si je vais dans un cours pour enfants, vous pouvez voir qu'il y a un problème. Super Mario ne peut pas dériver d' jeu vidéo de classe fermée parce que le jeu vidéo ne peut plus avoir d'enfants. C'est scellé. Cela empêche l'héritage au niveau de la classe ici, qu'est-ce que je veux dire au niveau de la classe ? Cela signifie simplement sur cette ligne, ici. Cependant, nous pouvons également l' utiliser au niveau de la méthode. Et cela restreint tout héritage ultérieur sur une méthode, pas sur la classe entière, mais simplement sur une méthode Nous ne pouvons pas mettre cela dans la classe de base en règle générale, nous ne pouvons jamais le mettre dans la master class, le parent ultime. Ce que nous ferions, c'est définir ici une méthode appelée what is cool. Nous le marquons comme virtuel. Lorsqu'un élément est marqué comme virtuel, cela signifie que la classe enfant peut fournir sa propre définition en remplaçant la méthode Nous l'avons déjà fait. Je passe maintenant à l'enfant immédiat, qui est un jeu vidéo. Je remplace cette méthode, non ? C'est la première fois que nous annulons cette méthode parce qu'il s'agit de l'enfant immédiat C'est ici que je peux utiliser le mot clé scellé. Vous ne pouvez utiliser que des produits scellés avec dérogation. Vous ne pouvez pas l'utiliser avec le virtuel. Il doit être inférieur d'au moins un niveau. Maintenant, je restreint tout accès ultérieur à cette méthode. Ce qui est cool maintenant, c'est que la pauvre classe Super Mario ne peut plus utiliser cette méthode. Tu peux voir. donc impossible de remplacer le membre hérité, appelé parce qu'il est scellé L'utilisation du mot clé sealed empêche au niveau de la classe tout nouvel héritage de la classe elle-même. Et un niveau de méthode empêche toute modification ultérieure de la méthode, condition que la méthode soit marquée comme étant scellée C'est donc la puissance du mot clé scellé dans C Sharp. 47. 9-10. Cours abstraites et méthodes abstraites: Parlons des classes abstraites et des méthodes abstraites. Quels sont-ils ? Pourquoi devrions-nous les utiliser ? Jetons un coup d'œil à cet exemple ici, le prolongement de ce qui précède. Si vous n'avez pas vu les autres tutoriels, je vous recommande vivement de les regarder car ils font suite à ceux-ci. Nous avons notre classe de base ici, animal, et nous sommes juste en train de créer un animal nommé Henry. Nous avons notre chien qui hérite d'un animal, et encore une fois un chat qui hérite d' Et nous ne faisons que reprendre le nom de l'animal, du chien et du chat Voici notre classe d'animaux. Ça ne fait pas grand-chose. Nous avons trois méthodes. Nous avons marqué, fait du bruit, dit l'âge et dit le nom. Tout était virtuel. Si les classes pour enfants souhaitent les remplacer, elles peuvent le faire. Nous allons maintenant remplacer le même nom. Si nous obtenons le nom du chien, cela signifie «   oh mon nom est alors le nom du chien, oh mon nom est puis woof à la fin Et pareil pour le chat. Il ne se passe pas grand-chose. Nous ne nous sommes pas vraiment appuyés là-dessus. Nous exécutons le programme, voici ce que vous pouvez voir, par exemple. C'est tout à fait normal. Imaginez maintenant que vous avez un très gros logiciel. Vous avez dix autres personnes qui travaillent sur le logiciel, et vous voulez une classe pour chaque animal. Vous imitez un zoo, par exemple. Vous créez un logiciel pour un zoo ou même un jeu Pokemon Et vous voulez une classe pour chaque personnage ou chaque animal. Vous pouvez demander à une personne votre équipe de créer tous ces cours, mais dans des équipes de dix ou 100 personnes, vous allez déléguer cela. Vous n'allez pas être le seul créer ces classes. Dans ces cours, nous en avons un qui dit « faites du bruit » et qui aboie et wooff Nous en avons un qui dit le nom et qui dit le nom de l'animal, par exemple, le chien ici. Et le chien fait du bruit après avoir fait écho à son nom. Pareil pour le chat. Mais que se passerait-il si notre coéquipier Randy, par exemple, créait une classe de hamsters ? Peut-être qu'il oublie d' annuler cette méthode. Il s'est souvenu de prononcer le nom, mais il a peut-être oublié de faire le bruit lorsque l'application s'exécute au lieu de remplacer make noise et d'émettre des sons de hamster Cela va juste faire en sorte que le son de classe par défaut soit apparent ici, des bruits d'animaux aléatoires Alors, comment pouvons-nous dire à Randy, notre ami, que vous avez oublié d' annuler cette méthode, de faire du bruit, que vos hamsters ne font pas de bruit de hamster Eh bien, nous pouvons réellement appliquer cela à notre classe de parents, les animaux. Ce que nous pouvons faire chez les animaux, nous pouvons dire, d'accord, je vais rédiger un contrat et dire toute classe qui hérite de cette classe doit remplacer, disons, ces trois méthodes ici Sinon, le logiciel ne compilera même pas. Nous ne pouvons même pas exécuter le logiciel qui garantit que notre ami Randy, par exemple, remplace les méthodes nous voulons que notre ami Randy Nous pouvons introduire ce que l' on appelle des classes abstraites. Pour y parvenir, que font les classes abstraites ? Imaginez que c'est bon, si je veux une classe abstraite et une méthode abstraite, toute classe qui hérite de cette classe ici doit remplacer ces Ils doivent définir une définition. S'il s'agit d'une méthode abstraite appartenant à une classe abstraite, alors si Randy, notre ami, crée une classe Hamster, le logiciel ne fonctionnera même pas S'il ne fournit pas sa propre définition de ces méthodes, c'est l'avantage d' une classe abstraite et d'une méthode abstraite. Je vais vous montrer comment le configurer. Maintenant, la première chose que nous faisons pour configurer une classe abstraite est de la marquer comme abstraite. C'est aussi simple que d'y écrire le mot clé abstrait. Cela fait un certain nombre de choses. Une fois qu'une classe est marquée comme abstraite, nous ne pouvons plus créer d' objet à partir de cette classe. Qu'est-ce que cela signifie ? Si nous examinons le programme ici, vous pouvez voir que nous créons ici un objet animal appelé Henry. Maintenant, nous ne savons pas quel est l'animal Henry, il vient d'être utilisé dans notre exemple. Mais vous pouvez voir ici qu'il y a maintenant une ligne rouge sous cette nouvelle ligne d' instance. Lorsque je passe la souris dessus, cela indique qu'il est impossible de créer une instance du type abstrait ou de l'animal d'interface En effet, si vous marquez une classe comme abstraite, vous ne pouvez plus créer d'instance de cette classe. Maintenant, Henry, nous allons devoir décider quel type d'animal est Henry à ce stade. C'est soit un chien, soit un hamster, un chat, soit autre chose. Mais maintenant, nous avons marqué cette classe d'animaux comme abstraite. Nous ne pouvons pas créer une instance d'animal. Henry va devoir partir et nous allons devoir prendre une décision sur ce qu'est Henry. Mais c'est intentionnel. Si vous avez une classe abstraite, vous ne pouvez pas créer d' instance de cette classe. Maintenant, méthode abstraite. Nous avons donc configuré notre classe abstraite. Nous allons maintenant créer une méthode abstraite. Comme je l'ai mentionné, si une méthode est abstraite , toute classe enfant héritant de cette classe doit fournir une définition Par exemple, notre classe do class hérite de l'animal. Ce que je vais faire, supprimer ces deux méthodes. Le chien hérite juste des choses normales. Maintenant, je vais marquer cette méthode comme abstraite. Il s'agit d'une méthode abstraite. Lorsque je marque une méthode comme abstraite, nous ne pouvons pas fournir de définition pour la méthode. Comme je l'ai déjà mentionné, cela oblige toutes les classes enfants à fournir leur propre définition, car nous ne pouvons même pas créer une instance de cette classe et nous obligons simplement les classes enfants à fournir leur propre , il n'y a même aucun sens à avoir une définition ici, car elle n'est pas pertinente. Il ne sera jamais appelé ou atteint lorsque vous définissez une méthode abstraite, il s'agit simplement d'un modèle. Cela signifie simplement que, d'accord, pour tous les cours pour enfants, vous devez fournir votre propre définition de cette méthode. Dans le cours sur les chats, c'est exactement ce que nous faisons. Nous avons notre propre méthode ici et nous la remplaçons lorsque vous définissez une méthode comme abstraite afin de fournir votre propre définition, tout comme virtual, vous utilisez le mot clé override Maintenant, dans le cours sur les chiens, vous pouvez voir qu'il y a une erreur. Si je passe le curseur sur le chien, cela signifie « écoutez, chien n'implémente pas le membre abstrait hérité d'un animal faire du bruit Vous pouvez voir que le logiciel ne compile même pas. Nous ne pouvons tout simplement pas compiler le logiciel. C'est la raison pour laquelle nous devons faire, définir cette méthode. Notre ami Randy qui a oublié sa définition de son hamster qui fait des bruits de hamster Eh bien, maintenant, le logiciel ne compilera physiquement pas à moins que notre coéquipier se souvienne de remplacer ces méthodes C'est une très bonne utilisation d'une méthode abstraite. Nous pouvons le faire pour toutes ces méthodes. Par exemple, par exemple, dites le nom. Nous pouvons définir un modèle pour cela. Vous vous demandez peut-être quel est l'intérêt d' avoir une méthode. Alors, par exemple, pourquoi même avoir votre mot à dire : « Bien vieillir ». C'est parce que tous nos cours pour enfants, comme les chats et les chiens, peuvent toujours utiliser, disons, l'âge ici. Par exemple, nous pouvons appeler «  âge » dans ces méthodes, nous pouvons les utiliser à partir de n'importe quelle classe enfant de cette méthode. Ces méthodes sont toujours utiles. Il s'agit donc d'une méthode standard, mais il s'agit d'une méthode abstraite. ce qui concerne les méthodes abstraites, nous forçons essentiellement toutes les classes d'animaux enfants à implémenter quelque chose. Lui donner une définition, une fonction, c'est ce qu'est une méthode abstraite. Cela oblige toutes les classes d'enfants à implémenter une définition pour elles. Cependant, nous pouvons toujours avoir des méthodes normales comme l'âge par exemple. Nous pouvons toujours utiliser le virtuel et demander chien et au chat de remplacer les méthodes virtuelles Elles sont parfaitement correctes, mais c'est là le but de l'abstraction. Ainsi, l'utilisation de classes abstraites ici, comme animal, impose non seulement l'abstraction, dont nous avons parlé plus tôt avec les modificateurs d' accès, mais également le polymorphisme, nous permet de définir notre propre boîte de fonctions Ici, non seulement cela, mais les classes abstraites peuvent appliquer n'importe quelle classe enfant héritant d' animal, donner certaines fonctionnalités à ces méthodes, considérez-les comme un plan ou un contrat ou quelque chose comme ça Je suis consciente que ce didacticiel peut être long à assimiler, mais n'hésitez pas à le rejouer encore et encore jusqu'à ce que vous compreniez Mais c'est le principe générique qui sous-tend les classes abstraites et les méthodes abstraites en boutique. 48. 9-11. Ce mot-clé: Je vais parler de ce mot clé en C sharp, il ressemble exactement à ceci. fait, c'est un raccourci pour une instance de classe. Ici, nous avons une classe appelée dog, et je suis en train de créer une instance. Cela peut être un raccourci pour cette instance ici. Si je regarde mon cours pour chiens ici, il y a une méthode appelée faire du bruit. Lorsque nous appelons cette méthode, il s'agit simplement d'écrire bark woof dans la fenêtre de la console Si on regarde ça, maintenant on appelle Make Noise. Si je lance le programme, vous pouvez voir qu'il ne fait pas grand-chose. Si je vais dans cette classe de chiens, je peux me référer à cette instance actuelle lorsque cette méthode est appelée. Par exemple, je vais ici Si je tape ceci, je peux faire référence à tout ce qui concerne cette instance en cours de création ici. Regardons un exemple, juste pour que je puisse vous le prouver. J'ai créé une classe appelée helper. Maintenant, l'assistant ne fait plus grand-chose. Il a une méthode appelée « faire plus de bruit ». Il faut un paramètre, qui est un type de chien, et il y a l' instance du chien. Ceci est transmis en tant que paramètre à cette méthode. Nous écrivons une ligne, je fais plus de bruit pour le nom du chien. Si je vais dans ma classe de chiens ici, je vais créer une nouvelle instance de helper afin de pouvoir utiliser la classe Ensuite, je vais utiliser de l' aide, faire plus de bruit. Je voudrais transmettre un exemple de chien. Ce que je peux faire, c'est transmettre le mot-clé this, car il représente l'instance que j'ai créée ici. Lorsque nous appelons la méthode sur cette instance. Imaginez qu'on s'en souvienne ici. Maintenant, cela représente précisément cette instance. Imagine que c'est ça. Maintenant, lorsque nous appelons helper, nous appelons la méthode, faites plus de bruit Cette instance est en cours de transmission. Cela a fait un long chemin. Maintenant, nous ne faisons que reprendre le nom du chien qui appartient à cette instance actuelle Si je lance le programme maintenant, vous pouvez voir Barkworfi'k. Plus de bruit, quoi ? C'est vide parce que nous n'avons pas donné de nom au chien. Donnons un nom au chien. Donc, nom du chien. Appelons-le Rocky. Pourquoi pas Maintenant, le chien a un nom. Réexécutons-le. Maintenant, je fais plus de bruit pour Rocky. Vous pouvez voir que c'est le pouvoir du mot clé, ceci. Il prend l'instance actuelle, c'est essentiellement un raccourci pour cela. Imaginez qu'il s'agit d'un raccourci pour l'instance actuelle. Et nous pouvons en faire ce que nous voulons. Nous pouvons y accéder, accéder aux propriétés, accéder à n'importe quel champ privé ou même le transmettre à différentes méthodes en tant que paramètres. C'est le pouvoir de ce mot clé en boutique. Une autre chose que nous pouvons faire avec ce mot clé dans C Sharp. Voici un bon exemple. Je vois que les gens le font souvent si nous avons un constructeur pour une classe comme animal, et qu'il prend deux paramètres, par exemple le nom et l'âge Dans notre constructeur, nous voulons construire notre objet. Ce que nous faisons, nous définissons le nom de notre champ local sur le paramètre, comme ceci. Ensuite, nous avons également défini l'âge sur le paramètre , comme ceci. Maintenant que nous l'avons fait, nous pouvons réellement utiliser ce mot clé pour différencier cette instance de nom. Il s'agit du paramètre de cette instance de nom. C'est le champ privé. Ce que nous pouvons faire pour que cela soit plus évident, c'est le dire. Maintenant, ce nom fait référence à celle-ci, puisqu'il s'agit de l' instance actuelle de cette classe, il va faire référence à celle-ci. Pareil avec l'âge. Cela fait référence à l'instance qui est celle-ci ici. Cependant, le nom ici fait référence à celui-ci car il ne figure pas dans l'instance actuelle. Il est transmis en tant que paramètre. Vous le verrez souvent lors de la configuration des constructeurs, et cela différencie simplement les noms pour éviter toute ambiguïté . Ce qui se passe est clairement évident. L'instance actuelle ici est égale au paramètre. Vous le verrez souvent dans vos projets futurs. 49. 9-12. Les concepteurs de mots clés et de cours de base: Le mot clé de base de la boutique. Quel est le mot clé de base ? Maintenant, vous devez utiliser le mot clé de base lorsque vous essayez d' accéder à partir d'une classe enfant telle que dog. Ici, il s'agit d'une classe enfant, nous voulons accéder à tout ce qui se trouve dans la classe de base, d'où le mot-clé base. Considérez-le comme un raccourci pour accéder aux méthodes, propriétés et à d' autres choses de ce genre. Ici, par exemple, j'ai une classe animale de base qui comporte quelques champs privés et quelques méthodes. Par exemple, cette méthode s'appelle méthode animale, elle est publique et fait partie de la classe des animaux. Ce que je peux faire avec le chien de classe pour enfants, je peux venir ici et dire « base », puis je peux accéder à la méthode animale, car il s'agit d'un cours pour enfants dans ce cas. La base est facultative, mais vous pouvez voir comment elle fonctionne. Cela ajoute un peu de clarté. Par exemple, ce que j'ai ici, j'ai une méthode appelée info qui affiche simplement à l'écran des informations sur ce chien actuel. Si je vais ici, j'ai créé un nouvel objet ici, une instance de chien. Je lui ai donné un nom, un âge et une race. Ensuite, je ne fais que publier les informations ici. Ainsi, lorsque nous exécutons le programme, nous pouvons voir des informations sur le chien. Ce que vous verrez beaucoup, c'est simplement ajouter un peu de clarté, car nom et l'âge sont tous deux définis dans la classe de base animal ici. Vous pouvez donc voir le nom, l'âge, cela ajoute un peu de clarté. Si vous regardez le code, vous pouvez rapidement voir, oh d'accord, ce sont des membres de la classe parent à consulter. Cependant, Breed est membre de cette classe, il n'a donc pas le mot-clé de base, mais vous pouvez voir assez facilement que vous savez à quoi ils appartiennent simplement en regardant ce mot-clé. Mais ce n'est pas la caractéristique principale de la classe de base. Ce dont je veux parler maintenant, c'est si vous avez un animal dans la classe des parents, par exemple. Si je configure un constructeur dans animal this, vous pouvez voir qu'il y a un petit problème avec cela Si j'essaie maintenant d' exécuter le programme, il ne me permettra pas, si je passe à ma classe enfant, l'une des classes enfants, cette erreur apparaîtra. Cette petite ligne rouge. Si je passe la souris dessus, il y a un petit message d' erreur cryptique ici Désormais, par défaut, les constructeurs ne sont pas hérités car ils ne sont pas vraiment membres d'une classe Mais maintenant j'ai défini un constructeur dans animal ici. Maintenant, il a un problème. Je n'arrive même pas à compiler mon logiciel. Ce que nous allons faire ici, c'est définir un constructeur dans dog ici Ainsi, lorsque je crée mon objet pour chien ici, je n'ai pas à définir toutes ces propriétés. Je peux simplement les mettre dans les paramètres ici lors de la création de notre nouvelle instance. Voyons comment nous pouvons le faire. Lorsque nous créons un objet pour chien, je souhaite spécifier un nom qui appartient à la classe parent, un âge qui appartient également à la classe parent, ainsi qu'une race. Je les veux car tous les paramètres et race font partie de la classe des chiens, pas de la classe de base. Si je passe à la classe dog ici, la classe enfant, je commence à créer un constructeur Je veux prendre en compte le nom du chien, son âge et aussi sa race. Cela ressemble à quelque chose comme ça. Maintenant, il y a un raccourci ici. Ce que nous pouvons faire ici, c'est transmettre le nom et l'âge à la classe de base. Pour ce faire, après le constructeur, nous mettons deux points et la base du mot clé Ensuite, ouvrez et fermez les parenthèses ici. Cela appelle à peu près le constructeur de la classe de base. Notre constructeur prend ici deux paramètres. Dans ce cas, la base est un raccourci pour le constructeur de la classe parent Le constructeur prend deux arguments. Si nous revenons ici, cela prend en compte le nom, l'âge. Nous traitons maintenant de ces deux paramètres ici. Ils sont renvoyés à la classe de base et le constructeur est appelé Ensuite, nous devons juste faire quelque chose avec la race, nous l'avons défini ici. Nous pouvons maintenant configurer nos paramètres ici lorsque nous créons la nouvelle instance. Maintenant, nous n'avons plus besoin de tout cela. Essentiellement, cela fera exactement la même chose si je lance le programme. Vous pouvez maintenant voir qu'il affiche toutes les informations. Encore une fois, comment cela fonctionne-t-il ? Nous sommes en train de créer une nouvelle instance de la classe pour chiens. Nous appelons le constructeur dog, qui prend en compte trois paramètres Voici notre constructeur de chiens. Oui, il prend en compte trois paramètres. Une fois que le constructeur est appelé, il prend ces deux paramètres et les transmet à la classe de base Dans la classe de base, vous pouvez voir qu'il y a deux paramètres. Ici, on appelle le constructeur avec deux paramètres Nous n'avons qu'un seul constructeur, il a deux paramètres, alors celui-ci est appelé Cela définit nos propriétés ici, le nom et l'âge, qui définissent ensuite nos champs privés via des getters et des setters Une fois que le constructeur a construit notre flux d'objets animaux repart , puis le reste du constructeur dog est appelé Ce qui définit juste le terrain local ici, se reproduit pour se reproduire ici. C'est essentiellement ainsi que cela fonctionne en arrière-plan. Il s'agit simplement d'appeler le constructeur de la classe de base. Écrivez ici, vous vous demandez peut-être pourquoi ne pouvons-nous pas simplement le supprimer ? Et je fais que le nom de base est égal au nom, puis à l'âge par exemple. Non, cela ne va pas fonctionner car selon cette terminologie, la base de deux points appelle en fait le constructeur de la classe parent elle-même C'est donc nécessaire et cette erreur se résoudra d'elle-même sans cela. Et même si vous y mettez ces bases, cela générera toujours cette erreur car le constructeur de la classe parent n' est jamais construit Il ne crée donc jamais réellement cet objet animal car il s'agit de la classe parent. Le chien de classe pour enfants en dépend. C'est pourquoi c'est obligatoire ici. Et c'est là le pouvoir du mot clé de base dans la boutique. 50. 9-13. Interfaces: Interfaces en boutique. Les interfaces sont un autre moyen de réaliser l'abstraction en boutique. Nous avons déjà parlé un peu des cours abstraits. L'abstraction est un principe clé orienté objet, qui consiste simplement à masquer les détails internes et à n' afficher que les fonctionnalités Jetons un coup d' œil aux interfaces en boutique à titre de mini-rappel Je vais juste me référer à ce projet dans lequel nous avons créé une classe abstraite sur les animaux ici. Voici notre classe abstraite sur les animaux. Nous avons ici des champs privés et des méthodes publiques, ainsi que des propriétés publiques. J'ai une méthode abstraite ici, parce que la classe dog ici hérite de la classe abstraite animal, elle doit remplacer cette méthode abstraite Il est obligé de le faire. Et c'est le but des classes abstraites par le biais du polymorphisme Nous annulons cette méthode, faites du bruit. Et nous ne faisons que produire du woof, woof pour notre Lorsque nous créons un nouvel objet canin et que nous exécutons la méthode, faisons du bruit, nous obtenons simplement woof, woof En principe, il s'agit de la classe abstraite qui s'y trouve. Nous sommes obligés de passer outre à ces méthodes abstraites. Voyons ici comment créer une interface animale et voyons également en quoi les interfaces diffèrent des classes abstraites. Interfaces en boutique, assez similaires aux classes abstraites. Ce que je vais faire, c'est créer une toute nouvelle interface dans la boutique. Ensuite, je vais vous montrer quelques différences entre les classes abstraites et les interfaces. Ensuite, notre classe de chiens utilisera notre toute nouvelle interface. Tout deviendra clair dans un instant. Si nous passons à droite de notre projet, cliquez bouton droit de la souris, cliquez sur Ajouter, puis passez au cours. Dans le menu, il suffit de choisir Interface. Maintenant, nous pouvons donner à l'interface le nom que nous voulons, mais je veux créer une interface animale. Lors de la création d' interfaces, il est toujours recommandé d'utiliser un I majuscule au préalable. En effet, lorsque vous ajoutez des interfaces, ou du moins que vous avez un très gros projet avec peut-être des dizaines ou des centaines d'interfaces, vous pouvez les distinguer des classes normales. Ici, nous avons des animaux et vous pouvez voir des animaux. Il s'agit clairement d'une interface, simplement parce que nous l'avons nommée ainsi. C'est juste une bonne pratique. La différence entre une interface comme celle-ci ici et une classe, celle-ci ici. Voici juste la différence entre le mot clé, c' est-à-dire que nous avons un mot-clé de classe pour une classe et le mot clé d'interface pour une interface. À peu près tout le reste est pareil. C'est la seule différence subtile ici. Maintenant, les interfaces sont en C sharp, vous pouvez les considérer comme totalement abstraites à 100 %. Qu'est-ce que cela signifie ? Eh bien, si vous avez regardé le didacticiel sur les classes abstraites comme celui-ci ici, nous avons quelques méthodes abstraites ici. Lorsque nous avons une méthode abstraite, nous ne lui définissons pas de corps. Parce que nos classes héritent de cette classe abstraite, elles définissent leurs propres méthodes, comme la classe dog et la classe cat par exemple Ils fournissent du code. Lorsque nous accédons à notre classe abstraite, elle n'a pas de corps par exemple. Cependant, une classe abstraite peut définir ses propres méthodes, telles que say name, say age. Ils peuvent également faire diverses autres choses. Ce n'est pas le cas pour les interfaces. Considérez une interface comme une classe purement abstraite dans laquelle vous ne définissez pas de corps. Il y a une petite exception à cette règle concernant les initiatives parlementaires, mais j'en parlerai peut-être plus tard ou à un autre moment. Considérez les interfaces comme des classes purement abstraites. Nous ne définissons pas les corps dans les interfaces de nos méthodes. Si je passe à mon cours sur les chiens ici, qui hérite de cette classe animale abstraite, vous verrez que je remplace une méthode de création de bruit pour lui donner mes propres fonctionnalités Je veux faire le même genre de chose dans mon interface. Dans mon interface, je souhaite définir une méthode appelée make noise, qui sera abstraite car c'est le but de l'interface. Si je définis une nouvelle méthode appelée make noise comme vous le dites, parce qu'elle est abstraite, je n'ai pas de corps ici. Et par défaut, c'est public. Le modificateur d'accès est public par défaut. Et cela se fait simplement par la conception des interfaces, car nous voulons que tout le monde utilise ces interfaces. C'est ainsi que nous avons défini notre toute première méthode dans notre interface. C'est très simple, n'est-ce pas ? Parce que c'est public et abstrait par défaut. Nous n'avons pas besoin de modificateurs d'accès tels que public. C'est facultatif et nous n'avons pas besoin du mot clé abstract. Par exemple, voici comment définir une méthode abstraite publique dans C Sharp pour une interface. Maintenant, je passe à mon cours de canin. le moment, il hérite de cette classe abstraite et je suis bien là Je souhaite implémenter l'interface. Donc je vais juste mettre un I devant. Il utilise donc désormais notre interface au lieu de notre classe abstraite. Maintenant, comment pouvons-nous le réécrire pour le faire fonctionner avec notre interface ici Eh bien, lorsque nous héritons d'une classe abstraite et que nous avons une méthode abstraite, comme nous en avons déjà parlé, nous utilisons le mot clé override ici Mais avec les interfaces, nous n' utilisons pas le mot clé override, il n'est pas du tout nécessaire Cela est parfaitement suffisant. Autre chose, par exemple. Si nous choisissons de ne pas définir méthode pour notre interface et de la laisser comme ça. Si nous le survolons ici, cela signifie que dog n'implémente pas le membre de l'interface make noise, tout comme les classes abstraites Cela nous oblige à fournir une implémentation pour cette méthode afin de nous obliger à le faire. Lorsque vous avez de grandes équipes de personnes par exemple, c'est très pratique car tous vos cours sont alors quelque peu standardisés. Ensuite, vous allez tous remplacer cette méthode de création de bruit ici, comme nous en avons déjà parlé dans les classes abstraites Maintenant, j'ai ce cours pour chiens ici. Il implémente la méthode make noise que nous avons définie dans notre interface et définit ses propres fonctionnalités grâce au polymorphisme définit ses propres Si je passe au programme ici où nous créons un tout nouvel objet canin et que nous appelons la méthode make noise disponible via l'interface, nous obtiendrons exactement le même résultat. Permettez-moi donc de passer en revue quelques similitudes et quelques différences entre les classes abstraites C shop et les interfaces. Parce qu'en apparence, ils obtiennent peut-être un résultat très similaire lorsque nous essayons de créer une instance d'une classe abstraite. Il ne nous le permettrait pas. Ce n'est pas possible, et c'est grâce au design. Même si j'essaie de faire la même chose avec une interface par exemple, cela ne me permettra pas même Visual Studio ne propose pas de fonctionnalité de saisie semi-automatique pour cela Lorsque je survole cette nouvelle tentative d' instance ici, cela indique qu'elle ne peut pas créer d'instance de l'animal d' interface de type abstrait Ce n'est donc pas possible. Dans une classe abstraite, nous pouvons avoir un constructeur, mais il n'est appelé que par les classes enfants, pas en dehors de cette chaîne d'héritage avec interfaces Vous ne pouvez pas avoir de constructeur car vous ne construiriez jamais d'interface en aucun cas L'interface agit simplement comme un contrat, sorte que toute implémentation de l'interface peut remplacer les méthodes disponibles Aucun constructeur dans les interfaces. Si nous voulons le faire, le but est d'avoir une classe, puis d' implémenter une interface, ou d'hériter d'une classe abstraite, puis de définir nos propres remplacements pour ces méthodes abstraites Par exemple, c'est pourquoi nous ne créons pas nouvelles instances de classes et d'interfaces abstraites, et nous n'avons donc pas besoin de constructeur autre chose que nous avons également abordée est le fait que les classes abstraites peuvent avoir des champs ici, ce que vous ne pouvez pas avoir dans une interface. Encore une fois, dans les méthodes utilisées ici, nous pouvons définir des corps dans des classes abstraites. Cependant, dans les interfaces, nous ne le pouvons pas car c'est purement abstrait. Voici quelques différences ici. Vous vous posez peut-être la question suivante. Pourquoi devrais-je même utiliser une interface dans une classe abstraite, par exemple, je peux utiliser des champs, je peux définir des corps de méthode si je le souhaite. Pourquoi utiliser une interface ? Quel est l'intérêt ? Cela semble plus limité, oui. Peut-être que c'est 100 % abstrait, par exemple, mais pourquoi devrais-je en utiliser un ? Eh bien, les interfaces supportent l'idée d' héritage multiple dans C Sharp par exemple. Si j'ai une interface animale comme animal, je peux créer une interface appelée peut-être carnivore par exemple Ensuite, notre classe de chiens peut réellement implémenter à partir d'un animal et d'un iconivorre ou peut-être d'autre chose Il peut donc implémenter à partir de plusieurs classes ici, multiples interfaces, et vous ne pouvez pas le faire avec des classes abstraites. C'est donc l'un des principaux points forts des interfaces de C Sharp. Jetons donc un coup d'œil à un exemple dès maintenant. Si je viens ici, je vais cliquer avec le bouton droit sur le projet, accéder à l'interface d'ajout de classe. Je vais juste créer iconivorre parce que les chiens sont carnivores C'est aussi un animal. Il existe peut-être une meilleure façon de représenter cela, mais passons simplement en revue cet exemple. Vous pouvez donc voir l' intérêt de tout cela. Dans carnivore, je vais simplement définir une méthode appelée «  peut-être manger de la viande », car tous les carnivores mangent de la viande Juste comme ça. Encore une fois, il est abstrait et public par défaut. C'est tout ce dont nous avons besoin dans ce cas. Maintenant, si je veux hériter ou implémenter plusieurs interfaces, je sépare la classe des deux points, comme avant Ensuite, insérez la classe ou interface que je souhaite implémenter ou dont je souhaite hériter Mais si je veux hériter de plusieurs interfaces, je mets simplement une virgule ici Ensuite, je peux mettre l' interface suivante iconivor, par exemple. Maintenant, vous pouvez voir qu'il y a une ligne rouge parce qu'elle n' implémente pas que notre nouveau membre mange de la viande, ce qui est vrai. Nous n'avons pas défini de méthode pour le faire. Si je vais ici et que je tape eat meat, j' implémente maintenant cette méthode ici à partir d'iconivor J'implémente cette méthode à partir d'un animal maintenant. Tout le monde est content, il n'y a pas de ligne rouge, tout le monde est satisfait. Je peux alors donner ma propre définition, quelque chose comme manger de la viande. Ensuite, si je passe à mon application ici, je tape simplement eat meat par exemple. C'est maintenant la méthode que nous mettons en œuvre à partir de notre toute nouvelle icône d'interface. Ou mangez de la viande. Oh, débarrassons-nous de cela car nous ne pouvons pas créer une nouvelle instance d'interface. Maintenant, je crée un nouvel objet pour chien et je mange de la viande. Et c'est un membre de notre nouvelle interface. Vous pouvez voir ici qu'il s'agit d'un exemple très rapide d' héritage multiple dans C Sharp. Et cela est possible grâce à l'utilisation d'interfaces, ce que vous ne pouvez pas faire avec des classes abstraites. Ce sont là les avantages des deux. Vous pouvez voir qu'en utilisant des interfaces dans C Sharp ainsi que des classes abstraites, nous pouvons réaliser l'abstraction, qui est un principe clé de la programmation orientée objet. Maintenant, testez vos connaissances en matière d'héritage ou demandez simplement que vous comprenez parfaitement ce sujet Par exemple, si je passe à mon application principale ici, je peux créer une nouvelle méthode ici. Par exemple, je vais l'appeler faire du bruit. Cela ne renverra pas de valeur, cela fera juste du bruit à propos de nos animaux dans la fenêtre de la console. Et il va falloir un paramètre ici parce que le chien implémente notre interface animal parce que nous savons qu'en parlant héritage, avant qu'un chien ne soit une relation satisfaisante, un chien est un animal De même, notre cours sur les chats. Un chat est un animal, un hamster est un animal Ensuite, nous pouvons simplement aller ici et prendre l'animal en paramètre car notre chien implémente cette interface ici. Ensuite, nous pouvons faire les choses à partir d'ici. On peut dire « faire du bruit ». Ce que nous pouvons faire ici, c'est créer un objet pour chien. Ensuite, nous pouvons faire passer notre chien à cette méthode appelée faire du bruit. Alors, comme le chien est un animal, cela va fonctionner, pas de problème. Cela va appeler la méthode make noise sur l'objet ici, qui est un animal. C'est un animal. Si je crée un objet chat, je peux utiliser cette même méthode car cat implémenterait animal. Dans ce cas, je pourrais créer une classe Dolphin tant qu'elle implémente animal. Encore une fois, je peux appeler cette méthode, pas de problème. Vous pouvez voir que c'est le pouvoir de l'héritage, mais aussi de l'utilisation d'éléments tels que les interfaces. Cela fonctionne également avec les classes abstraites, comme avant, pas de problème. Tant que ma classe canine hérite de la classe abstraite animal Vous pouvez voir maintenant que si je lance ce programme, vous pouvez voir qu'il dit woof, woof De même, si j'ai une classe de chat comme celle-ci ici, elle implémente à partir d'un animal la méthode make noise et remplace sa propre logique , qui est O. Ensuite, je passe au programme, je crée un nouvel objet chat, puis je veux faire du bruit avec le chat Et tant qu'il implémente notre interface, cela fonctionnera, pas de problème. Vous pouvez voir le pouvoir de l'héritage et pourquoi nous utilisons des interfaces. Il suffit de transmettre l'interface au logiciel, par exemple, tant que paramètre de méthode ou même en tant que retour d'une méthode, ou à peu près n'importe quoi. Encore une fois, si je lance le programme, vous pouvez voir qu'à travers le polymorphisme, nous annulons la méthode make noise pour les chiens et les chats, mais nous utilisons également des interfaces faire passer cet objet dans Vous pouvez voir qu'il est assez puissant et que les possibilités sont également infinies. Vous pouvez voir ici si je change cette interface pour notre classe abstraite ici, allez dans la classe et assurez-vous qu'elle implémente la classe abstraite. cas des classes abstraites, nous utilisons le mot clé override, car c'est ce qui fait la différence entre celles-ci et les interfaces Nous reflétons cela également dans les cours sur les chiens. Et puis revenons à notre programme principal ici. Lancez ensuite le programme. Vous pouvez voir que nous avons transmis une classe abstraite qui fonctionne exactement de la même manière qu'une interface. Mais il existe des différences subtiles, comme nous l'avons vu précédemment, entre les interfaces et les classes abstraites. Mais c'est un exemple à la fois de la façon dont ils se comparent et des avantages de l'utilisation d' interfaces pour satisfaire l'héritage multiple dans C Sharp. J'espère que ce tutoriel vous a aidé, et je vous remercie de votre attention. 51. 9-14. Résumé O-O: Nous venons donc de terminer quelques tutoriels sur la programmation orientée objet Nous avons maintenant passé en revue à peu près tous les principes du paradigme de programmation. Et maintenant, nous allons simplement boucler la boucle et réfléchir à ce que nous avons appris, et supprimer certains mots clés et autres choses de ce genre. Encore une fois, comme je l'ai mentionné au début de notre aventure 00, C sharp est un langage de programmation orienté objet. Et l'utilisation de 00 vous aidera vraiment à structurer vos projets. Lorsque vos projets deviennent très volumineux, ils seront beaucoup plus faciles à gérer. Vous allez peut-être pratiquer une grande partie de la réutilisabilité du code à l'avenir. Si vous continuez ce voyage, vous travaillerez avec d'autres personnes. Peut-être dans une entreprise qui comprend également la programmation. Vous allez tous connaître et déjà comprendre les mêmes techniques d'écriture de logiciels. Vous allez donc démarrer très rapidement. Revoyons donc une partie de la terminologie pour que vous compreniez parfaitement. Ensuite, nous allons passer à quelque chose d'un peu différent. Programmation orientée objet. Encore une fois, c'est un paradigme , une façon de faire quelque chose. Nous avons parlé de cours. Désormais, les classes modélisent des objets du monde réel. Donc, si vous avez un logiciel concernant une bibliothèque, un cours peut être un livre. Parce qu'un livre est un objet du monde réel, votre cours de lecture doit être très cohérent. Cela signifie que le cours sur le livre ne doit porter que sur le livre. Il ne devrait pas s'agir de la lecture du livre par l' utilisateur. Ainsi, lorsque vous avez un cours de lecture, toutes les méthodes, toutes les propriétés doivent toujours porter sur le livre. C'est une très bonne pratique et vos cours devraient être peu couplés Cela signifie que votre cours de lecture doit porter sur le livre. Votre classe d'utilisateur doit porter sur l'utilisateur. Et ils ne devraient pas vraiment avoir grand-chose en commun entre eux. À présent, objects crée une nouvelle instance d'une classe. Une classe est un peu comme modèle avec toutes les méthodes et propriétés. Et lorsque nous voulons créer une nouvelle instance de ce type, vous pouvez en avoir une ou des milliers si vous le souhaitez. C'est ce qu'on appelle créer un objet. Un objet n'est donc qu'une instance d'une classe, et lorsque vous créez une instance, cela s'appelle instanciation Désormais, l'héritage favorise la réutilisation du code, et lorsque vous réutilisez le code, cela le rend plus facile à maintenir Nous n'avons pas besoin de copier le code et mettre dans chaque classe, car si nous avons une classe comme le chien, elle peut hériter de l'animal Si nous avons une classe appelée chat, elle peut encore une fois hériter de l'animal Et beaucoup de ces cours auront les mêmes caractéristiques. Vous allez donc utiliser et écrire beaucoup moins de code. Et lorsque vous écrivez beaucoup moins de code, cela signifie que votre code sera beaucoup plus facile à maintenir et à gérer De plus, la taille du fichier du logiciel sera minimale. Et en testant également le logiciel, vous pouvez avoir beaucoup moins de code à tester. Dans l'ensemble, l'héritage est donc un très bon principe à mettre en pratique. Nous avons parlé du polymorphisme, ce mot grec étrange qui signifie de nombreuses formes ou de nombreuses formes, nous avons obtenu en surchargeant les méthodes Quand on parle de méthodes, comment on peut avoir des paramètres différents mais avec le même nom de méthode. Mais plus récemment, nous avons également parlé de polymorphisme avec remplacement méthode. Dans une classe de base comme animal, nous pouvons dire faire Ensuite, lorsque nous héritons de cette classe, dans une classe de chien, de chat ou de hamster, nous pouvons remplacer cette méthode et fournir nos Nous pouvons en voir le résultat lorsque nous exécutons l'application, exemple lorsque nous utilisons le, le chien aboie en utilisant la méthode make noise. Lorsque vous utilisez la classe pour chats, le chat miaule Nous pouvons réutiliser cette même méthode mais en fournissant des fonctionnalités différentes. C'est du polymorphisme. Les deux derniers. Maintenant, les deux dernières personnes confondent les deux parce qu'elles sont très similaires et qu'elles vont de pair. Et c'est l' abstraction d'encapsulation . Désormais, l'encapsulation masque les fonctionnalités internes d'un objet Il n'autorise l'accès que par le biais d'un ensemble public de fonctions. Par exemple, lorsque nous avons parlé modificateurs d' accès publics et privés, parce que nous voulons masquer nos informations sensibles, comme nos champs privés, par exemple Mais n'y accédez que par des méthodes publiques afin vérifier les données et de nous assurer que personne ne casse des objets. Des choses comme ça, par exemple. Et aussi des propriétés de Sea Shop. Quand on parle d'abstraction, cela signifie n'afficher que les informations essentielles et masquer les détails essentiels. Et nous l'avons fait par le biais de classes abstraites et d'interfaces. Imaginez donc comme une cafetière, si vous voulez préparer un café, vous appuyez sur le bouton d'infusion de café. Si tu veux démarrer une voiture, tu tournes la clé. Vous n'avez pas besoin de savoir comment fonctionne un démarreur dans une voiture, ni comment fonctionne un alternateur ou un chargeur de batterie En tant qu'utilisateur, en tant que développeur, vous suffit de tourner la clé pour faire fonctionner la voiture. Comme pour une cafetière, vous préparez un café, vous n'avez pas besoin de savoir comment fonctionnent les appareils électroniques, comment l'eau est chauffée. Tout cela vous est soustrait , ce sont des informations inutiles Si vous n'êtes qu'un utilisateur final de ces appareils, comme une cafetière ou le conducteur d'une voiture, vous n'avez tout simplement pas besoin de le savoir. Et c'est de l'abstraction. Et nous le constatons dans la vie tous les jours, plusieurs fois par jour. C'est la différence entre l' encapsulation et l'abstraction Encore une fois, il s'agit de deux termes clés de programmation orientée objet, mais ils vont souvent de pair. Et parfois, on a souvent l' impression qu'il y a une frontière un peu floue entre l' frontière un peu floue entre encampsulation et l' abstraction Félicitations, nous avons passé en revue tous les principes de la programmation orientée objet Et si vous choisissez d'utiliser un autre langage tel que C plus ou Java, vous pouvez appliquer ces principes et démarrer presque immédiatement. Il n'est pas lié au C. Sharp est quelque chose de très populaire et également utilisé dans de nombreux langages de programmation. 52. 10-1. EXERCICE - Dessiner des pyramides: Aujourd'hui, nous allons dessiner pyramides et nous allons les dessiner dans notre type d'application console. Et nous allons laisser l'utilisateur décider de la taille qu'il souhaite donner à sa pyramide. Par exemple, si l' utilisateur saisit 45, une pyramide sera générée ici. Et il fera 45 lignes de haut, comme vous pouvez le voir ici. Ça a l'air plutôt cool, n'est-ce pas ? Cependant, si l'utilisateur saisit le chiffre cinq, par exemple, sa pyramide ne mesurera que cinq lignes de haut. C'est un peu un exercice. Cela permettra non seulement de tester vos compétences en programmation C Sharp, mais également de tester vos capacités logiques. Comment examiner un problème et développer une solution en le décomposant en décomposant en petits sous-groupes, puis en s'attaquant au problème Je vais donc résoudre ce problème et vous montrer comment j' aborderais cette tâche afin que vous puissiez voir comment fonctionne mon esprit et comment j'aborde ce problème particulier. Il est assez courant de voir de tels exercices lors d'un entretien d'embauche. Par exemple, l'intervieweur peut vous demander comment vous développez un petit logiciel pour générer une forme, une pyramide ou quelque chose comme ça Parce que n'importe qui peut rechercher la syntaxe et le code sur Internet. Mais ce que beaucoup d' employeurs aiment faire nos jours, c'est tester fonctionnement de votre esprit, comme la pensée logique. Voyez si vous pouvez trouver une solution sur place et peut-être aussi sous pression. Je vais donc développer une solution pour cela et je vais vous montrer comment je pense à cela étape par étape afin que vous puissiez voir comment fonctionne mon esprit et comment j'aborde ce problème. Allons-y. La première étape consiste à analyser le problème. Lorsque l'utilisateur saisit un nombre, celui-ci indique la hauteur de la pyramide Non seulement la hauteur de la pyramide, mais aussi le nombre de lignes tracées. Vous pouvez voir qu'il y a cinq lignes ici. La pyramide se termine lorsqu' il y a le symbole d'une livre, et la base de la pyramide couvre toute la ligne ici Mais vous pouvez voir ici que c'est la hauteur de la pyramide, qui est désignée par ce chiffre La pyramide mesure cinq lignes de haut, c'est une chose à noter. La deuxième chose à noter est que tous ces carrés sont remplis. S'ils ne sont pas remplis par des hachages ici, le symbole de la livre représentant la pyramide Ils sont ensuite remplis par l'arrière-plan, qui est indiqué par des traits d'union Ici, vous pouvez voir que le haut de la pyramide porte le symbole d' une livre, puis quatre traits d'union des deux côtés Sur la ligne suivante, vous pouvez voir la pyramide augmenter de deux au lieu d'une. Ici, il y en a maintenant trois, puis il y a un trait d' union de moins de chaque côté. Encore une fois, en dessous de la pyramide, la taille augmente de deux par ligne, puis le trait d'union se réduit d'une unité Nous avons quelques règles ici. À chaque nouvelle ligne, la pyramide augmente de deux. Et chaque nouvelle ligne, le trait d'union, rétrécit d'une unité de chaque côté. Une dernière chose à noter est que dans cet exemple où j'ai une hauteur de pyramide de cinq, nous avons neuf caractères sur la largeur ici, cinq vers le bas et neuf de large. Nous avons beaucoup de données sur lesquelles travailler. Voyons comment développer une solution pour cet exemple. Si vous avez déjà suivi nos tutoriels, vous avez peut-être vu l'exemple que nous avons fait lorsque nous avons dessiné un cube à l'écran. Maintenant, cet exercice est un peu différent, il est un peu plus complexe, mais les principes et les procédures en coulisses sont assez similaires. Dans cet exemple, nous utilisons des boucles, nous utilisons quatre boucles. Cet exemple ne devrait pas être différent Lorsque nous voyons des données se répéter comme celles-ci et comme ça dans notre tête, nous devrions nous dire, d'accord, une boucle doit être impliquée. Quelque chose doit tourner en boucle et itérer pour générer ces traits d'union ici Ensuite, nous avons besoin d'une autre boucle pour générer ces symboles en livres. Et puis peut-être une troisième boucle pour continuer avec les traits d'union Nous pouvons aborder ce problème de plusieurs manières. Peut-être pourrions-nous avoir une boucle où nous remplacerons simplement le personnage par la partie pyramidale. Oui, cela peut également fonctionner. Lorsque vous développez des solutions de ce type. Il existe de nombreuses solutions au problème, mais le choix vous appartient. Lorsque vous faites ce choix, vous voulez choisir le plus simple et le plus efficace en termes de temps. Mais générez également le code qui sera plus facile à maintenir, plus facile à maintenir par vous-même à l'avenir, mais plus facile à maintenir par tous les membres de votre équipe qui reprendront votre code et le développeront Il y a plein de choses auxquelles réfléchir. Je pense que la façon dont j'aborderais ce problème est d'avoir une boucle principale descendant sur l'axe y. Nous avons une boucle principale qui génère chaque ligne à tour de rôle. Ensuite, à l'intérieur de cette boucle, j'aurai une boucle qui génère ces traits d'union Une deuxième boucle qui génère la partie pyramidale, qui est celle-ci. Et puis une troisième boucle qui continue avec ces tirets, une boucle principale qui fait l'axe y. Ensuite, à l'intérieur de cette boucle, je pense à trois boucles distinctes. C'est une solution parfaite pour résoudre ce problème. Jetons un coup d' œil à cela maintenant et voyons si nous pouvons développer quelque chose comme ça. Voici donc le code que nous avons jusqu'à présent, il ne fait rien du tout, il s'agit simplement d' envoyer des messages à l'utilisateur pour lui souhaiter la bienvenue dans le logiciel Merci d'avoir utilisé l'application. C'est ce qu'il fait. Ensuite, nous posons la question à l' utilisateur. Nous prenons l'entrée de l'utilisateur, convertissons en un entier et la stockons dans une variable entière. Maintenant, ce que je veux faire, c'est créer une méthode. Parce que lorsque je crée une méthode, je peux l'appeler plusieurs fois à partir de plusieurs endroits, puis je peux générer des pyramides où je veux. Je pense que toute la logique pour générer la pyramide de taille personnalisée ici devrait appartenir à une méthode. Et puis il est facilement réutilisable par n'importe quoi d'autre. Je vais créer un modèle de méthode. Maintenant, la méthode n' aura pas de type de retour car je veux juste que la méthode dessine la pyramide. Cela va créer un paramètre qui sera simplement la taille de la pyramide. Voici notre méthode de base. La première chose que j'ai dit que j'allais faire était de générer une boucle, qui imprimerait chaque ligne à tour de rôle, et qui descendrait le long de l'axe y. Je vais créer une boucle pour ce faire. Cette boucle représente donc ici la hauteur de la toile. Donc, la hauteur de la pyramide dans ce cas, étant donné que la pyramide touche le haut de la toile sur laquelle nous dessinons ainsi que le bas, on peut affirmer sans risque de se tromper que quel que soit le nombre que l'utilisateur donne pour la hauteur totale de la pyramide, nous n'avons aucun arrière-plan au-dessus la pyramide ni aucun arrière-plan en dessous de la pyramide. faisant l'axe y à partir d'une taille inférieure ou égale à la taille de la pyramide et incrémentant d'un point, nous pourrons tracer la pyramide le long de l'axe y descendant. Maintenant, à l'intérieur de cette boucle, j'ai mentionné qu'une solution possible était d'avoir trois boucles distinctes. Le premier pour dessiner les traits d'union sur le côté gauche, le second pour dessiner la pyramide, et le troisième pour continuer avec les traits d'union sur le côté continuer avec les traits d'union sur le Permettez-moi de configurer ces boucles maintenant sans vraiment penser à écrire du code. Par exemple, j' ai déjà ce joli modèle. Je viens de générer ce modèle en réfléchissant logiquement au problème J'ai besoin d'une boucle à dessiner vers le bas en fonction de la taille de la pyramide Ensuite, à l'intérieur de chaque ligne, j'ai besoin de quelque chose qui génère la pyramide et l'arrière-plan de chaque ligne séparée. déjà, j'ai un joli petit template ici sans trop réfléchir au problème. Lorsque nous dessinons les traits d'union sur la gauche, la seule chose que nous voulons faire est afficher un trait d'union à Faisons-le maintenant. De même, lorsque nous dessinons les traits d'union sur la droite, nous allons dessiner un trait De même, lorsque nous dessinons la pyramide, nous avons besoin du symbole de la livre. peu près, la seule chose que nous devons faire maintenant est de déterminer quand ces boucles se terminent. Lorsque nous avons examiné l' exemple précédent et que l'utilisateur a saisi le chiffre cinq par exemple, la pyramide avait une largeur de neuf, mais une hauteur de cinq. La toute première ligne de la pyramide portait le symbole d'une livre, mais elle avait quatre traits d'union de chaque côté Nous devons déterminer quand arrêter de dessiner des traits d'union. Pour savoir quand arrêter de dessiner des traits d'union sur le côté gauche, nous devons déterminer quand terminer cette boucle avant De même, à quelle largeur devons-nous dessiner la pyramide de chaque côté et à quel moment arrêter de dessiner des traits d'union sur le côté droit Et lorsque vous développez de tels logiciels, vous aurez parfois une clarté ultime. Ce sera facile pour vous, il vous suffit de saisir les valeurs. Tu sais, tu passes une bonne journée. Mais parfois, si je suis juste fatiguée, si je ne suis pas dans le bon état d'esprit ou si vous êtes débutant et que vous savez que vous êtes en train de le surmonter dans votre tête. Il n'est donc pas dommage d' utiliser un appareil comme Microsoft Cell ou un bloc-notes juste pour tracer tous vos chiffres afin pouvoir utiliser votre espace cérébral libre pour trouver une solution au problème ou peut-être autre chose y a donc aucune honte à créer des nœuds ou quoi que ce soit d'autre, c'est parfaitement normal. Permettez-moi d'ouvrir Excel et de tracer certains de ces chiffres ici. J'ai ouvert Microsoft Cell ici et j'ai cartographié la Eh bien, solution inattendue. Quoi qu'il en soit, si l'utilisateur saisit le chiffre cinq par exemple, nous savons que notre pyramide aura cinq unités de haut. Lorsque l'utilisateur en saisit cinq, il génère une pyramide qui ressemble à ceci. La solution que nous avons développée jusqu'à présent. J'ai une boucle qui imprime chaque ligne à tour de rôle. C'est notre boucle principale. Nous l'avons noté avec y. Vous pouvez voir ici que je l'ai simplement appelée la variable y, y est égal à un Et cela va jusqu'à la taille de la pyramide. Inférieur ou égal à ce que je vais faire. Je vais mettre la variable y ici. La prochaine chose à l'intérieur de cette boucle, que j'ai trois boucles. L'une générera ce contenu, la boucle suivante générera ce contenu et la troisième boucle générera ce contenu. Je vais également le mettre ici. Ce sera la première série de traits d'union. Ce sera la pyramide, et voici la deuxième série de traits d'union Maintenant, lorsque y vaut un, c'est la première fois que notre boucle boucle. Nous voulons générer quatre tirets sur la gauche, un caractère pour la pyramide, et également quatre tirets sur la droite lorsque Maintenant, notre boucle se répète pour la deuxième fois que nous générons cette ligne. Notre première boucle générera trois traits d'union. Notre deuxième boucle générera trois segments pour la pyramide. Encore une fois, les traits d'union seront les mêmes sur la droite, puis trois, puis sur la troisième ligne Vous pouvez voir où cela mène la pyramide sera cinq et les traits d'union deux, puis la ligne numéro quatre et la ligne numéro Je vais juste le remplir. Vous pouvez maintenant voir quelques chiffres sur le nombre de caractères qui seront imprimés pour chaque itération de la boucle Maintenant, en l'utilisant, vous pouvez déterminer ce que vous devez faire. Tu as plus de clarté dans ta tête. Vous n'avez pas besoin de vous souvenir de ces chiffres. Vous pouvez indiquer que votre cerveau est capable de réfléchir à une solution au problème Essayons de trouver une solution à ce problème. Lorsque l'utilisateur saisit le chiffre cinq, cinq est la taille de notre pyramide. Notre taille variable, qui entre dans notre méthode, sera de cinq la première fois que la boucle sera exécutée. N'oubliez pas que y est notre boucle. La première fois que la boucle est exécutée, y est égal à un. Nous pouvons voir que lorsque y vaut un, le nombre de traits d'union de chaque côté est inférieur d'un à la taille de la pyramide La deuxième fois que la boucle est exécutée, vous pouvez voir que les traits d'union de chaque côté sont inférieurs de deux à la taille de la pyramide Vous pouvez voir une petite règle ici. Vous pouvez voir que lorsque la taille est cinq et que nous soustrayons un de la taille, nous obtenons le nombre de traits d'union de chaque côté Lorsque Y vaut 25, prendre deux est 35, emporter trois est deux. Vous pouvez voir que pour générer le nombre de traits d'union de chaque côté, nous prenons que la taille de la pyramide dans cet exemple est de cinq et nous en soustrayons y. Cela nous donnera le nombre de traits d'union de chaque côté. Voyons comment générer ces boucles de trait d'union. Ce sont les deux boucles qui génèrent les traits d'union à gauche ici et également à droite Nous avons dit que le nombre de traits d'union pour chaque ligne correspond à la taille totale de la pyramide Et on en soustrait y. Nous disons simplement taille moins Y. Pour plus de clarté, nous mettons des crochets autour de ce paramètre, ce qui augmente la lisibilité. Je suis plutôt confiant. Maintenant, pour chaque ligne, nous affichons le nombre correct de traits d' union à gauche et à droite Ce que beaucoup de développeurs ont tendance à faire, c'est d'exécuter l'application tôt. Il y a plusieurs raisons de le faire. Premièrement, vous pouvez voir si votre dernière modification était correcte. Et deuxièmement, vous pouvez simplement regarder l'état actuel de l'application. Au contraire, cela vous donne un peu plus plaisir à voir ce que vous avez déjà fait. Jetons un coup d'œil. Maintenant, nous appelons la méthode, maintenant nous prenons le numéro de l'utilisateur. Nous appelons la méthode, puis cette méthode est exécutée. Jetons un coup d'œil aux résultats obtenus jusqu'à présent. Si je tape le chiffre cinq, vous pouvez maintenant voir que tout est sur une seule ligne. Alors pourquoi ça ? C'est parce qu'après toutes ces trois boucles, nous ne produisons pas réellement une toute nouvelle ligne Il y a aussi un petit problème ici. Chaque fois que nous sortons un personnage, nous produisons une toute nouvelle ligne deux C'est également une erreur. Chaque fois que nous sortons un caractère, nous ne voulons pas écrire une nouvelle ligne, nous voulons juste écrire ce caractère. Nous utilisons donc la console pour le faire lorsque nous voulons réellement une nouvelle ligne. Eh bien, nous allons le faire après toutes ces boucles. Jetons maintenant un coup d' œil à l'application et voyons à quoi elle ressemble. Vous pouvez donc voir maintenant que nous avons un peu la forme d'une rumbus. Cela semble assez intéressant, mais vous pouvez voir que le nombre de traits d'union est correct Nous commençons par 43210. Nous devons maintenant corriger cette section centrale ici, qui est la pyramide. Voyons comment procéder. Je vais retourner dans Excel, je suis de retour dans Excel. Maintenant, ce que je veux faire, c'est découvrir comment générer ces chiffres en utilisant les informations disponibles. Nous avons la taille de la pyramide et nous avons également la valeur de y. À chaque itération de la boucle, nous avons déjà indiqué le nombre de traits d'union pour chaque ligne Cela semble assez simple à faire, mais comment générer ce nombre en utilisant les informations que nous avons en ligne 1 ? Ici, la pyramide est composée d'un caractère, vous pouvez la voir sur la deuxième ligne, la pyramide en compte trois. Vous pouvez voir que sur chaque nouvelle ligne, la pyramide augmente de deux symboles de livres, 13579, ce sont tous des nombres impairs ici 13579, ce sont tous des nombres impairs Comment pouvons-nous générer ces chiffres l'aide des informations dont nous disposons ici ? Pour ceux d'entre vous qui sont bons en mathématiques, c'est probablement assez facile pour vous, mais parfois les développeurs ne sont pas vraiment bons en mathématiques de nos jours. Peut-être que dans les années 70 et 80, lorsque tous les mathématiciens et médecins faisaient un peu de programmation, c'était évident, mais aujourd'hui, c'est de la programmation informatique C'est une compétence un peu distincte, parfois elle ne se traduit pas directement en mathématiques. Mais si vous remarquez ici qu'il y a cette valeur y, prenons le chiffre trois. Par exemple, si on multiplie trois par deux, on obtient six. Ensuite, on en soustrait un, puis on obtient la valeur cinq Encore une fois, peut-être quatre. Par exemple, quatre fois deux font huit. Soustraire un est 75 fois deux est dix, soustraire un est neuf Et je pense que c'est une règle qui peut fonctionner sur tout le terrain, mais nous devrions toujours tester avec 1.0 dans de tels cas. Un fois deux c'est 21 c'est un. Oui, ça a l'air de fonctionner aussi. Je pense que c'est peut-être une règle qui fonctionne. Ce que nous pouvons dire, c'est que p est égal à y multiplié par deux, en retirons un. C'est une règle qui devrait fonctionner pour générer la pyramide en fonction du numéro de ligne lui-même. Il existe peut-être bien d'autres solutions à ce problème, mais celle-ci fonctionnerait certainement pour nous, sur la base de ce que j'ai ici. en revenir à notre logiciel, nous avons ici la valeur de y à chaque itération de la boucle Ce que nous faisons ici, c'est générer la pyramide sur chaque droite lorsque y vaut trois, par exemple. Ensuite, nous voulons générer cinq de ces symboles de livre. Ici, nous avons dit que c'est Y multiplié par deux, puis soustrayez un de cela Cela ressemblerait à ceci. Je pense que cela fonctionnerait, mais pour ajouter un peu de clarté, j'utilise toujours des crochets supplémentaires comme celui-ci. Cela le rend simplement plus lisible afin que nous puissions voir ce qui se passe. Mais vous obtiendrez exactement le même résultat en utilisant cela en raison de la masse des enchères, car la multiplication vient avant la soustraction Mais dans des cas comme celui-ci, je écrirais toujours comme ça. Par exemple, examinons maintenant l'exemple et voyons ce qui se passe. Si nous sortons le chiffre cinq, saisissons le chiffre cinq, vous pouvez voir maintenant que nous obtenons une belle pyramide. C'est plutôt cool, n'est-ce pas ? Est-ce que cela fonctionne pour de plus grands nombres ? Disons 35. Ça a l'air plutôt bien. Oui, on dirait que ça marche. Vous pouvez voir que c'est ainsi que j' aborderais un problème sur un sujet comme celui-ci. Nous avons écrit à peu près 90 % du code en analysant simplement le problème. Nous n'avions pas besoin de vraiment penser à C sharp et à la programmation. Nous avons littéralement examiné la pyramide, disséqué un peu le problème et l'avons décomposée en plus petits morceaux La seule difficulté a été trouver les limites de ces quatre boucles Alors, combien de traits d'union devons-nous dessiner, quelle partie de la pyramide devons-nous tracer sur chaque ligne, et encore une fois, les traits d'union sur la Et aussi une petite complication à propos des nouvelles gammes et d' autres choses de ce genre, ce qui est plutôt normal. Parfois, tout le monde fait des erreurs, c'est normal. Mais vous pouvez voir comment nous avons isolé ces problèmes et utilisé Microsoft Excel pour calculer les chiffres, de sorte que nous n'avons pas vraiment eu à garder toutes ces informations en tête. Nous pouvons simplement aborder le problème ici, décortiquer, analyser tous les chiffres, puis nous devons simplement trouver comment obtenir ces chiffres à partir des informations dont nous disposons, soit la hauteur de la pyramide, soit la valeur de y à chaque itération de la boucle Vous pouvez donc voir comment nous avons résolu le problème sans vraiment y penser. Nous n'avons pas vraiment utilisé la puissance de notre cerveau. Tout ce que nous avions en tête a été transféré dans Excel et nous pouvons en quelque sorte trouver une solution à partir de cela C'est ainsi que j'aborderais une telle situation. Surtout si j'étais vraiment fatiguée ou si j'avais la gueule de bois et que je n'arrivais pas à penser, alors, vous savez, laissez les outils faire le travail à votre place. Pour en revenir à Visual Studio , nous dessinons des pyramides plutôt sympas. Nous pouvons même remplacer le fond par un bel espace blanc vide. Et peut-être que nous pouvons dessiner deux pyramides. Je veux dire, nous l'avons intégré dans une méthode, donc maintenant nous pouvons répéter la méthode beaucoup plus facilement. Et c'est le pouvoir des méthodes. Donc, si je mets maintenant le chiffre cinq, par exemple, nous générons maintenant trois pyramides les unes au-dessus des autres. C'est plutôt cool, n'est-ce pas ? Bref, c'est ainsi que j'aborderais un problème comme celui-ci. Encore une fois, c'est une chose courante que vous pouvez trouver dans les entretiens d'embauche. Mais en réalité, le pouvoir d' un programmeur est de tester la pensée logique. Comment fonctionne ton esprit ? Un bon programmeur n'est pas quelqu'un qui sait mémoriser la syntaxe et régurgiter Un bon programmeur est quelqu'un qui peut penser logiquement, résoudre un problème et trouver une solution appropriée C'est ce qu'est un bon programmeur. J'espère donc que vous avez trouvé cet exercice utile, et je vous remercie de votre attention. 53. 10-2. Solutions, projets multiples et espaces de noms: Dans ce didacticiel, je vais vous montrer comment configurer plusieurs projets dans Visual Studio. Je vais parler un peu de la terminologie telle que les solutions, projets, les assemblages et les espaces de noms. Je peux également vous montrer comment accéder aux fichiers de différents assemblages. Cela sera très utile pour aller de l'avant. Si nous ouvrons Visual Studio, nous pouvons obtenir ce dialogue ici où nous pouvons créer un tout nouveau projet. Ici, nous allons cliquer dessus, puis nous allons simplement créer une application console. Si je clique sur Suivant ici, on me demandera le nom de mon projet. Maintenant que j'ai choisi une application console ici, c'est ce qui représente une interface utilisateur graphique, quelque chose que l'utilisateur pourrait voir. De même, vous pourriez avoir une application Windows Forms, qui est également une application Gooey Mais il s'agit des projets d' interface utilisateur graphique car il comporte une fenêtre que nous pouvons voir lorsque nous nommons ce projet. Par exemple, il est assez courant dans les applications d'avoir ce que l'on appelle une architecture à trois couches dans laquelle un projet représente l'interface. Peut-être que sur un site Web qui pourrait avoir une application de console HTML, cela aurait comme une fenêtre noire et n'importe quelle logique à voir là-dedans. Et puis il y a une couche intermédiaire, parfois appelée couche métier, qui contient tous les calculs en arrière-plan, toute la logique, tout ce trait au cerveau de l'application. Et peut-être que la troisième couche ressemblera une base de données où toutes les données seront concernées. La capacité d'obtenir des données à partir d'une base de données. Vous savez, peut-être qu'il est associé à une base de données Oracle ou à une base de données SQL. Tout a donc à voir avec la couche de données. C'est ce que l' on appelle communément une architecture à trois couches. Lorsque vous créez ce projet en C sharp ici dans Visual Studio, nous créons d' abord le gars ici. Il s'agit de l' application console dans cet exemple. Je vais donc l'appeler comme ça. En général, ce que je fais et ce que font les autres éditeurs de logiciels , c'est que lorsque vous créez le gars, vous pouvez le mettre dans le nom du projet. Si le projet s'appelait application de test par exemple, vous pourriez voir quelque chose comme ceci, comme test app guy. Ou testez un gars. Ou peut-être que le gars teste Ap, quelque chose comme ça. D'après le nom, vous savez instantanément que vous avez affaire à ce type, l'interface utilisateur graphique. Je vais donc juste tester Apoe, par exemple. Vous n'êtes pas obligé de le faire comme ça, mais c'est une bonne pratique et c'est également assez courant. Si vous poursuivez vos efforts, vous verrez cela beaucoup Je vais créer le projet maintenant. Ici, nous avons notre homme. Cela ne fait pas grand-chose. C'est juste une fenêtre noire qui va se fermer instantanément. Mais ce projet, si nous arrivons à droite, représente tout ce qui a trait à notre homme. Tout ce qui est graphique que l'utilisateur peut voir, tout ce qui a trait au gars, tout cela est contenu ici. Vous pouvez voir en haut de la page que nous avons une solution. Maintenant, la solution peut contenir un certain nombre de projets, peut-être 102030, et nous pouvons ajouter différents projets ici Par exemple, créons une couche métier. Et cela contiendra tout le code, toute la logique, tous les calculs, par exemple. Encore une fois, lorsque vous créez une solution, s'il ne s'agit que d'un petit projet de test , par exemple, très petit, peut-être que vous ne faites qu'une maquette rapide, alors avoir une architecture à trois couches est assez ambitieux. Ce n'est peut-être pas nécessaire, mais si vous savez à l'avance qu'il s'agira d'un projet de grande envergure, d'un projet susceptible de faire appel à une base de données ou d'être très complexe. Ensuite, vous devez prendre en compte votre architecture avant commencer à créer un autre projet. Nous allons maintenant créer la couche métier. Donc, si je clique avec le bouton droit sur la solution Ajouter, je peux accéder à un nouveau projet ici. Et au moment de choisir les projets, j'ai déjà mon homme ici, cette application console. Je n'en veux donc pas vraiment un autre, surtout en ce moment, peut-être dans le futur. Cela dépend de mes besoins. Les besoins de chacun sont différents. Mais quelque chose comme une couche métier où vous avez du code et à peu près du code pur. Ensuite, vous avez besoin de ce que l' on appelle une bibliothèque de classes. Si je clique sur Suivant ici, je peux appeler à nouveau la bibliothèque de classes comme je veux. Mais si mon application s'appelle application de test comme ça, nous pourrions avoir quelque chose comme B L une couche métier ou LL une couche logique métier ou quelque chose comme ça. Quelque chose représentant une couche différente de l'application. En général, je préfère Business Layer par exemple. Ce projet contiendrait alors tous les éléments commerciaux, comme l' aspect commercial du système, si vous voyez ici. Nous avons maintenant deux projets. Nous avons notre interface utilisateur graphique. Nous avons maintenant notre couche commerciale ici et elle contiendra tous les calculs et autres choses de ce genre. Enfin, si j'écris, cliquez à nouveau sur la solution. Je pourrais ajouter quelque chose comme une couche de données, peut-être un projet de base de données ou quelque chose comme ça. Il peut également s'agir d'une autre bibliothèque de classes représentant la couche de données. Quelque chose comme ça. Vous pourriez dire Dow pour la couche d'accès aux données ou quelque chose en rapport avec les données. Ou même DB pour base de données. Cela n'a pas vraiment d'importance. Je pourrais appeler ça quelque chose comme ça. Alors ce dernier projet ici, ce troisième, représenterait tout ce qui a trait à lier notre solution à une base de données potentielle, ce soit Oracle, SQL, mon CQL, quelque chose comme ça, peu importe Nous avons maintenant trois projets. Maintenant, architecture Il y a tellement d'architectures disponibles lors de la création de logiciels, comme lors de la construction d'un bâtiment. Il n'y a pas une seule façon de construire un bâtiment. Il y a tellement de façons différentes, mais celle-ci est très populaire. Ce qui se passe, c'est que si vous avez 50 personnes dans votre équipe, vous travaillez pour une entreprise. Certaines personnes connaîtront le HTML par exemple, mais elles ne sauront rien à propos d'une base de données ou de calculs complexes en C Sharp dans le cadre de ce projet. Ce qui se passe, c'est qu'ils ne travailleront que sur ce projet. De même, si vous êtes un utilisateur de base de données, vous ne travaillerez ici que sur ce projet de base de données. Séparer vos solutions par différents projets favorise également travail d'équipe et d' autres choses de ce genre. Seules les personnes connaissant la base de données, par exemple, travailleraient avec ce projet de base de données. C'est un peu le raisonnement qui le sous-tend. Comment puis-je faire parvenir mon projet ici, par exemple ? Ce type, comment puis-je le faire participer à ce projet ? Parce que par défaut, j'ai ajouté trois projets ici sous la solution, mais aucun d'entre eux ne parle entre eux. Comment y parvenir ? Si je vais dans mon interface utilisateur graphique, par exemple, ce projet ici, je passe aux dépendances ici. Maintenant, selon la version de Visual Studio, s'agit de la version la plus récente le moment, elle s' appelle dépendances. Si vous avez une ancienne version, elle peut indiquer des références ou quelque chose comme ça. Si vous cliquez dessus avec le bouton droit de la souris et accédez à Ajouter une référence de projet. Lorsque je fais cela, une fenêtre apparaît. Je peux maintenant voir tous les projets de ma solution, comme indiqué dans ce menu de gauche Ici, je veux vérifier les projets que je veux associer à mon agent, disons que je veux parler à ma couche commerciale où tous les calculs sont effectués. Je vérifie juste ça et j'appuie sur OK. Et maintenant, en interne, mon interface utilisateur graphique peut désormais essentiellement communiquer avec ce projet, la couche métier où se dérouleront tous les calculs. Mettons un échantillon ici pour pouvoir faire quelque chose. Ça ne va pas faire grand-chose. Configurez une méthode très simple ici au sein de ce que l'on appelle la couche métier. Et ce que cela va faire, c'est simplement renvoyer la chaîne « hello ». C'est tout ce qu'il va faire. Je vais l'appeler « bonjour ». Je vais l'appeler Hello Class. Maintenant, dans notre couche commerciale, j'ai un cours appelé hello class. Il a une méthode, et cette méthode ne fait que renvoyer la chaîne hello. Maintenant, si je reviens à mon projet d' interface utilisateur graphique ici, testez l'application guy et je tape, par exemple, hello class. Vous pouvez voir que ce n'est même pas dans cette liste, mais j'ai fait référence au projet à celui-ci. Pourquoi ne puis-je pas y accéder ? Eh bien, c'est là que les espaces de nom entrent en jeu. Si vous avez suivi ces didacticiels jusqu'à présent, vous verrez beaucoup cet espace de noms de mots clés, presque dans tous les fichiers. Et puis il a un nom. En général, le nom de l'espace de noms est automatiquement généré à partir du nom du projet. Par exemple, ce projet s'appelle Test App Guy. Mais si je passe à ma couche commerciale, mon projet d'entreprise que j'ai créé, vous pouvez voir que le nom du projet a été pris ici. Maintenant, nommez l'espace. C'est comme une façon logique d'organiser les choses. Par exemple, nous avons déjà parlé du cours de mathématiques, par exemple, où nous faisons de l'art mathématique, absolue ou de la racine carrée ou quelque chose comme ça. Mais le cours de mathématiques, si je passe le curseur dessus, vous pouvez voir qu'il appartient à un espace de noms appelé system ici Par défaut, lorsque je crée un nouveau projet dans Visual Studio, espaces de nom me sont attribués par défaut. Tous ces espaces de nom ici, ces sept, me sont fournis par défaut. Essentiellement, je peux utiliser n'importe quel code que Microsoft m'a fourni et qui est contenu dans l'un de ces espaces de noms ici, tout comme j'ai un espace de noms ici avec un nom Et j'ai du code ici. Par défaut, je peux utiliser n'importe quel code dans n'importe lequel de ces espaces de nom. Cela ressemble beaucoup à ce que nous avons ici. Ce que je dois faire, eh bien, je dois parler à l'espace de noms dans lequel j' ai défini cette méthode, car ce n'est pas le cas pour le moment. Ici. Vous pouvez voir où nous avons défini la méthode dans un espace de noms appelé test app PL. Si je le copie, je reviens à ma couche de gars Ici, juste au-dessus d'ici, j'utilise un mot spécial appelé using what ? En utilisant does, il vous permet d' utiliser un espace de nom différent. Si je colle simplement cet espace de nom ici, suivi de deux points-virgules, si je tape hello class, vous pouvez maintenant voir que j'y ai accès, essentiellement en utilisant cet espace de nom. J'ai accès à tout ce qui se trouve dans cet espace de noms, dans ce fichier. J'espère que cela a du sens maintenant, car la classe hello est définie en test dans l'espace de noms B L, comme vous pouvez le voir ici, elle se trouve dans l'espace de noms Je peux accéder à toutes ses fonctionnalités. Je vais créer une nouvelle instance de la classe hello ici. Maintenant je peux dire bonjour, te dire bonjour. Et ça me donnera cette ficelle. C'est ainsi que je peux parler à une autre classe dans un espace de noms différent, qui se trouve dans un autre projet. Maintenant, pour plus de clarté, si je passe à ma solution ici, je passe à la couche commerciale de mon application de test ici. Et je vais à un cours ici, par exemple. Vous pouvez dire qu'il possède l'espace de nom par défaut. Si je crée une nouvelle classe, je clique avec le bouton droit de la souris sur Ajouter une nouvelle classe. Je l'appelle comme je veux, peu importe. Vous pouvez le voir à nouveau, il a le même espace de nom car il est extrait du projet. Peu importe le nombre de classes que je crée. Par défaut, le nom du projet sera utilisé pour l'espace de noms. Mais vous pouvez renommer l'espace de noms comme vous le souhaitez Vous pouvez voir que c'est le pouvoir des espaces de noms. Dans la boutique, vous pouvez avoir des espaces de noms imbriqués, par exemple, un espace de noms dans un espace de noms, ce qui est assez courant Vous pouvez voir qu'il y a un espace de noms appelé system à l'intérieur de celui-ci Il y en a une qui s'appelle collections. À l'intérieur, il y en a un appelé générique. Pensez à un espace de noms comme un moyen de regrouper des éléments. Si vous avez quelque chose à l'intérieur d'un projet, qui concerne un seul projet, l'ensemble de votre code, par exemple, dans la couche métier, comme le cœur de l'application, il s'agira d'un seul projet, un assemblage par exemple. Cependant, dans le cadre de ce projet, vous pourriez avoir différentes choses. Par exemple, vous pourriez avoir une partie du projet pour calculer la superficie d' une maison ou autre, mais dans le cadre de ce projet, vous pourriez avoir quelque chose de complètement différent, comme le calcul d'une déclaration de revenus. Mais peut-être que ces deux choses doivent exister dans le même projet pour une raison quelconque. Et dans ce cas, vous les regrouperez logiquement dans un espace de nom peut-être différent Donc, tout ce qui a trait au travail dans la zone d'une maison, vous pouvez appeler cela un espace de nom et l' autre pour faire les déclarations de revenus ou autre. L'exemple peut être n'importe quoi et cela peut être un espace de nom différent. Vous regroupez donc logiquement par activité, fonction ou selon ce que vous décidez lorsque vous pensez à des projets, pensez à l'architecture, par exemple à la façon dont vous structurez votre solution Mais lorsque vous pensez à l'espace de noms, pensez à des éléments plus logiques, comme la façon dont vous regroupez des éléments de code similaires Et c'est en quelque sorte la différence dans ce cas. Je vais donc juste vous montrer une dernière chose concernant les projets multiples, les assemblages et autres choses de ce genre. Maintenant, c'est un sujet assez compliqué, un sujet assez vaste en fait. Mais ce que je vous montre est suffisant pour suivre le reste de ces tutoriels. Mais non seulement cela, mais lorsque vous lancez vos propres solutions et projets, vous avez une idée générale de la façon dont vous êtes censé structurer les choses. Et aussi comment organiser votre code, ce qui est très important au fur et à mesure que vos projets prennent de l' ampleur. Maintenant, si nous venons ici, nous avons notre solution ici avec nos trois projets en dessous. Maintenant, chacun d'entre eux est représenté comme un assemblage. C'est un mot que vous allez beaucoup entendre, mais lorsque les gens parlent d'assemblages et de modificateur d'accès interne, il est interne à l'assemblage, qui est généralement représenté par un projet. Un projet par assemblage. Maintenant, si je passe à ce bouton de jeu vert ici, lorsque je clique dessus, notre solution est compilée, tous nos projets sont compilés et un assemblage est créé pour chacun de nos projets. Donc, si je vais dans mon système de fichiers maintenant, j'utilise maintenant un système de fenêtres pour le projet Guy ici. Il crée un fichier EXE ici. Encore une fois, quelques fichiers différents avec ça. Mais vous pouvez également voir qu'il crée en fait un fichier DLL ici pour chacun de nos projets. Maintenant, ce sont ce que l' on appelle des assemblages ici, parce que nous avons trois projets dans ce cas, nous avons également trois assemblages ici. Vous pouvez voir ce qui se passe dans les coulisses et comment cela est représenté dans le monde réel. Lorsque vous offrez ce logiciel à vos amis ou que vous le regroupez dans un fichier de configuration, vous pouvez voir comment ces projets sont représentés sous forme de fichiers binaires, généralement un pour chaque projet. Une chose que je mentionnerai est que l'utilisation mot clé ici est quelque peu facultative si je décide de le supprimer Par exemple, vous pouvez voir cela ne fonctionnera plus car il ne peut pas localiser l'espace de noms lequel cette classe est contenue. Ce que nous pouvons faire dans ce cas, c'est simplement le qualifier avec l'espace de nom. Chaque fois que j'utilise la classe Hello, je dois indiquer au système où elle se trouve, exemple dans quel espace de noms elle se trouve ? Dans ce cas, je peux le qualifier avec l' espace de nom avant le nom de la classe. Mais si je continue à utiliser cette classe dans ce fichier peut-être 1020 fois, je vais avoir beaucoup de code redondant ici Donc, plutôt que de le faire, je peux tous les supprimer et simplement utiliser l'espace de nom en haut du fichier. Et puis je n'ai plus besoin de le qualifier à chaque fois que je l'utilise. C'est donc un avantage d'utiliser l' espace de noms ici, NC Sharp 54. 11-1. Points d'arrêt et pas de code: Débogage, débogage en C Sharp. Qu'est-ce que le débogage Si vous avez suivi mon tutoriel jusqu'à présent, nous avons travaillé avec le langage C Sharp, nous avons fait plein de choses différentes Orientation de l'objet, boucles, calculs, méthodes. Mais au cours de ces exercices, par exemple, et en travaillant avec le langage, le fait est que les humains sont des humains. Ils vont commettre des erreurs, soient intentionnelles ou non, ou qu'il s'agisse simplement d'un accident total Ces choses-là arrivent. C'est là qu'intervient le débogage. À présent, le terme « débuggage » est un terme vague. Le terme « débugging » est utilisé dans deux sens différents. Nous pouvons dire, d'accord, je vais faire un peu de débogage, et c'est le processus qui consiste à essayer de trouver des bogues Peut-être que votre logiciel ne contient aucun bogue, mais vous allez essayer d'en trouver juste pour vous assurer qu'il fonctionne correctement. C'est tout à fait normal. Vous pouvez également utiliser le terme de débogage lorsque votre logiciel rencontre un problème et que vous essayez de le localiser Vous diriez donc que je vais essayer de déboguer mon logiciel car il y a une erreur Je ne sais pas où il se trouve, mais je dois essayer de le trouver. Il est donc utilisé dans deux sens ici. Maintenant, comme je l'ai dit, le fait est que personne n'est parfait. Si tout le monde était parfait, les éditeurs de logiciels n' engageraient même pas d'équipes de test pour effectuer les tests. Vous n'auriez pas ce qu' on appelle des tests unitaires. Vous n'aurez pas besoin de tester votre code. Mais le fait est que nous ne sommes pas parfaits. C'est pourquoi nous devons connaître débogage et essayer de trouver des erreurs dans notre logiciel Jusqu'à présent, dans cette série de didacticiels, nous avons utilisé Visual Studio. Maintenant, Visual Studio est génial. Il contient de nombreux outils et fonctionnalités, et nous en avons à peine gratté la surface, pour être honnête Il possède un compilateur qui compile notre code. Il possède l'IDE dans lequel nous pouvons réellement taper pour créer des solutions de projets. Il possède cette fonction de saisie semi-automatique, également connue sous le nom d'Intellisense Donc, beaucoup de choses différentes, mais il possède également ce qu'on appelle un débogueur Un débogueur est donc un logiciel, un programme totalement distinct, écrit par Microsoft Et le travail du débogueur est de s' associer à un autre logiciel C'est ce qu'on appelle joindre le débogueur. Alors, à quel logiciel ce débogueur s'associe-t-il ? Eh bien, c'est votre code, votre logiciel. Chaque fois que vous appuyez sur le bouton de lecture vert, votre logiciel compile en arrière-plan Si vous utilisez Windows, par exemple, il compile dans un EX, par exemple Le débogueur peut alors s'attacher à ce fichier EXE dans ce cas, mais pas seulement à votre logiciel Il peut s'associer à un autre processus d'exécution exécuté par votre système. C'est très puissant. Quel est donc l'avantage de ce débogueur qui s'attache à votre logiciel ? Quel en est le but ? Pourquoi ferait-il cela ? Eh bien, lorsqu'un débogueur se connecte à votre logiciel, il vous permet d' exercer un certain niveau de contrôle pendant que votre code est Et il peut examiner des segments de code particuliers lorsque des problèmes peuvent survenir pendant l'exécution de votre logiciel. Imaginez que vous puissiez suspendre votre logiciel à tout moment. Supposons que votre logiciel se charge, il fonctionne en boucle. Par exemple, peut-être une boucle à quatre, et vous pouvez simplement arrêter l'exécution au milieu de la boucle Supposons que vous ayez une boucle à quatre et que cela compte jusqu'à dix. Vous pouvez arrêter votre logiciel à un moment donné, par exemple lorsqu'il est simplement compté jusqu'à quatre. Ainsi, pendant que le logiciel est en cours d'exécution, vous pouvez accéder à votre code et tout inspecter. Vous pouvez voir les valeurs des variables. Vous pouvez même contrôler l'exécution. Donc, faites manuellement cette boucle avant faire deux itérations supplémentaires, par exemple Et tu peux le faire toi-même. Avez-vous déjà vu ces films de super-héros où le gars est très rapide et où le monde entier est gelé ? Mais comme il est si rapide, il peut interagir avec les gens en temps réel. Imaginez que cela ressemble à un débogueur. Le monde vaque à ses occupations. Mais cette entité ultrarapide, ce héros super rapide, peut en quelque sorte voler à la vitesse de la lumière, modifier et contrôler les choses C'est en quelque sorte ainsi que fonctionne un débogueur. C'est assez puissant et très amusant à utiliser, pour être honnête. Et le processus qui consiste à suspendre votre application pendant son exécution à l'aide du débogueur s' appelle passer en mode pause. Et quand j'ai dit que vous pouviez réellement contrôler l'exécution. Par exemple, si votre logiciel est en cours d'exécution et qu'il est sur le point d'exécuter une méthode, vous pouvez ignorer complètement cette méthode en la passant par-dessus Le contrôle du flux de votre logiciel pendant son exécution est appelé « étape de code ». Le débogueur est en fait un logiciel assez puissant , et 99,999 % des développeurs utiliseraient un débogueur pour créer une sorte Jetons donc un coup d' œil à un exemple de cela. Maintenant, comment entrer dans ce monde où nous sommes un super héros rapide Et nous pouvons suspendre le logiciel et changer les choses, modifier les valeurs des variables, ignorer les méthodes, etc. Comment s'y prend-on ? Eh bien, jetons un coup d'œil. Donc, si vous avez suivi nos autres tutoriels jusqu'à présent, lorsque nous écrivons du code, nous appuyons sur ce bouton vert de lecture ici. Lorsque nous appuyons sur le bouton vert de lecture, notre logiciel s'exécute. Et lorsque nous voulons le tuer ou y mettre fin, soit nous barrons la fenêtre ici, soit nous appuyons sur le bouton rouge d' arrêt ici. C'est donc ce que nous avons fait jusqu'à présent. Si vous allez à gauche de ce bouton de jeu vert, vous remarquerez une liste déroulante ici. Par défaut, il devrait indiquer D bug, mais en dessous, il y a également une version. Maintenant, ces deux points sont très importants. Si nous avons sélectionné des bogues dans cette liste, chaque fois que nous appuyons sur ce bouton de lecture vert, le débogueur est également exécuté et il s'attache également à notre logiciel Pour les curieux, si vous sélectionnez une version dans cette liste, nous l'utilisons généralement lorsque nous voulons donner le logiciel à quelqu'un d'autre car il ne contient aucune information de débogage Mais pour l'instant, parlons du debug ici. C'est ce qu'on appelle maintenant un mode de libération. heure actuelle, nous voulons déboguer notre programme, trouver des erreurs et faire un travail de détective Généralement, lorsque nous développons un logiciel en tant que développeur et que nous trouvons des erreurs et que nous développons notre solution, nous utilisons ce mode de version ici, bogue. Et c'est pourquoi c'est la valeur par défaut. Donc, comme je l'ai déjà dit, lorsque nous exécutons l' application ici et notre logiciel s'exécute en arrière-plan, le débogueur, le débogueur Visual Studio s' est attaché Et je peux vous le prouver si j'ouvre le Gestionnaire des tâches. Voici mon gestionnaire de tâches, voici toutes les applications que j'exécute. Voici Visual Studio, mais en dessous vous pouvez voir la console du débogueur Visual Studio Cela fonctionne en arrière-plan et est en fait attaché à notre logiciel. Mais jusqu'à présent , nous ne l'avons pas vraiment utilisé dans nos précédents tutoriels, mais dans ce didacticiel et dans les prochains, nous allons l'utiliser beaucoup. Jetons maintenant un coup d'œil au débogueur de Visual Studio. Voyons comment faire un peu de débogage ici. J'ai un exemple d'application. Lorsque cette méthode principale s'exécute. Ici, il entre dans une boucle de fil sans fin. L'application ne s'arrêtera jamais. Chaque fois que cette boucle de fil fait une boucle, nous demandons à l'utilisateur d' entrer un jour de la semaine. Nous prenons leur réponse, stockons dans une variable, puis nous la transmettons à cette méthode ici, en fonction du jour de la semaine qu'ils saisissent. Nous avons une instruction switch qui imprime un message personnalisé en fonction du jour de la semaine saisi. C'est très simple, chaque fois qu'un message est affiché, nous saisissons simplement une ligne vide, puis revenons en boucle pour leur demander un autre jour de la semaine C'est une application assez simple avec cette application. J'ai un petit problème quand je tape mercredi. Cela ne me donne pas le résultat réel que je souhaite. Quand je tape le mercredi, je veux qu'il affiche les mercredis ou les mythes, ce qui n'est pas le cas actuellement Par exemple, si je tape mardi, j'obtiens une réponse pour mardi. Mais pour le mercredi, vous pouvez voir que cela m'indique que j'ai saisi un jour invalide. Maintenant, je comprends qu'il s'agit d'un logiciel très simple, mais imaginez que ce logiciel soit très compliqué. Vous avez peut-être 50 fichiers. Vous pouvez avoir des méthodes, des méthodes, des méthodes appel, des méthodes à l'intérieur de boucles. Vous pouvez donc voir que cela peut devenir très compliqué. Voyons donc comment nous pouvons déboguer une application comme celle-ci présent, grâce à nos talents de détective, nous savons que le mardi fonctionne. Par conséquent, le code entre dans cette méthode. L'instruction Switch est lancée et nous aurons une réponse pour mardi. Cependant, le mercredi ne fonctionne pas. Il y a donc un problème avec ce code à ce stade. C'est du moins ce que je pense. Il semble donc que lorsque je tape mercredi, il affiche ce type de section par défaut ici Pourquoi fait-il cela ? Ce que je pourrais faire dans ce cas, c'est ajouter ce qu' on appelle un point de rupture. Si vous passez sur le côté gauche , il y a une barre grise. Quand je vais n'importe où dans cette barre grise, vous pouvez y voir un cercle gris. Si je clique avec le bouton gauche, cela ajoute un point rouge. Vous pouvez donc voir ici que cela s'appelle. Qu'est-ce que définir un point de rupture ? Pourquoi est-ce appelé point de rupture ? Eh bien, lorsque je lance le logiciel ici et que je le tape n'importe quel jour de la semaine, vous pouvez voir l' exécution du code s'arrêter pour vous souvenir du moment où je vous ai expliqué ce qu'était un hamburger, et que j'ai dit que c'est comme un super héros qui peut modifier en temps réel, vous savez, comme la vitesse de la lumière Il s'agit de l'inaction du débogueur. Maintenant, le débogueur s'est attaché à notre logiciel en définissant ce que l'on appelle un point de rupture, ces points rouges Ici, nous pouvons en définir autant que nous le souhaitons. Chaque fois que le code atteint l'un de ces points rouges, le logiciel se bloque. Cela va s'arrêter. Rien de plus ne peut être fait. Si j'essaie d'ouvrir mon logiciel, je ne peux pas du tout interagir avec celui-ci. C'est complètement gelé. Et nous avons un contrôle total au niveau du code. Cette pièce jaune, c'est ce sur quoi elle est figée. Et c'est notre premier point de rupture. Rien d'autre ne peut donc arriver. C'est figé dans le temps. Donc, ce que nous pouvons faire pendant que tout est arrêté ici, est inspecter les choses. Écoutez, si je passe la souris dessus, je peux voir la valeur de notre variable ici Je peux voir à quel point cela vaut d'être transmis ici. Donc c'est plutôt cool, n'est-ce pas ? C'est comme interagir avec le monde alors que celui-ci est figé. Tu sais, ressens le pouvoir. C'est donc le pouvoir d'un point de rupture. Cela casse le logiciel. Et je ne veux pas dire casser comme casser une tasse en verre ou casser un vase en verre. Je veux dire, des interrupteurs en pause, comme un arrêt. Arrêtez l'exécution. Voilà ce qu'est un point d'arrêt. La prochaine chose dont je veux parler est ce que l'on appelle le code step. Qu'est-ce que le code step ? À l'heure actuelle, notre logiciel est figé dans le temps. Il est gelé sur cette ligne juste ici. L'instruction switch n'a pas encore été exécutée. Il est jaune, ce qui signifie qu'il est sur le point d'être exécuté, mais pas encore. Ce que nous pouvons faire, exécuter manuellement la ligne de code suivante. C'est ce qu'on appelle le step, et nous pouvons le faire manuellement. Si nous arrivons ici, vous verrez toutes ces icônes ici. Ici, il est écrit « entrez dans », un pas de plus », un pas en dehors ». Et ce pas en arrière. Il y a donc plein de boutons de pas différents ici. Mais qu'est-ce que le step ? Eh bien, par exemple, celui-ci ici, passez à autre chose. Vous voyez que le raccourci clavier ici est dix. Si j'appuie sur dix, cela va passer outre à cette déclaration. Cela signifie que le code va s' exécuter jusqu'à la ligne de code suivante, ou jusqu'au bloc de code suivant dans une instruction switch. Voici notre contribution, qui est à peu près une chaîne de guirlandes Ce qui devrait arriver, c'est que cette ligne de code serait exécutée parce qu' aucun jour de la semaine ne correspond à notre saisie. Si j'appuie sur F dix, ce qui correspond à un pas, vous pouvez voir le code passer à cette ligne ici. Nous avons maintenant exécuté le début de l'instruction switch, et le logiciel est à nouveau figé dans le temps. Sur cette ligne, vous pouvez voir que nous n'avons pas de point de rupture sur cette ligne, mais cela n'a pas d'importance car nous l'avons franchie manuellement. Si nous voulons que le logiciel continue à s'exécuter, nous devons appuyer sur le bouton de lecture, par exemple. Ensuite, le logiciel continuerait à fonctionner jusqu'à ce qu'il atteigne l'un de ces points d'arrêt rouges Mais lorsque nous procédons pas à pas de code étape par étape dans ce genre de choses, nous exécutons manuellement une ligne de code à la fois, ou un bloc de code à la fois, comme une instruction switch, par exemple. C'est donc le pouvoir du step, qui consiste simplement à exécuter manuellement des segments de votre code en séquence , comme il serait normalement exécuté. Maintenant, le logiciel est figé sur cette ligne ici. Vous avez saisi un jour non valide. Si j'appuie à nouveau sur dix, la fenêtre de notre console affichera cette ligne. Si j'ouvre la fenêtre de la console, vous pouvez voir que cette ligne a maintenant été exécutée, mais encore une fois, le logiciel est figé dans le temps. Encore une fois, sur ce symbole de rupture, j'appuie à nouveau sur F dix, et maintenant nous sommes sur le point d'écrire à nouveau cette ligne sur la console F dix, et maintenant la méthode est exécutée. C'est plutôt cool, n'est-ce pas ? Lorsque vous travaillez en C Sharp dans Visual Studio , vous devez contrôler manuellement le code, exécuter manuellement des morceaux de code. C'est ce qu'est le codage. Cela nous permet d' exécuter manuellement des lignes de code. Et nous pouvons le faire nous-mêmes. Et nous pouvons le faire en définissant des points de rupture pour arrêter initialement le code. Ensuite, nous pouvons utiliser ce que l'on appelle commandes étape par étape pour entrer, sortir et tout ce genre de choses de ce genre. Mais quelle est la différence entre step into, step out, step over ? Quelles sont ces choses ? Eh bien, considérez cet exemple ici. Nous avons lancé l'application, et j'appelle cette méthode cinq fois de suite sans autre raison que pour vous montrer la différence. Si nous exécutons step into which is 11, alors nous allons passer à cette méthode. Si j'appuie sur F 11, vous pouvez voir que la prochaine ligne de code à exécuter est l'accolade bouclée ouverte juste ici, suivie de l'instruction switch Je suis entré dans une méthode, je suis intervenu ici. Ce que nous pouvons également faire, c'est passer outre à la méthode. Ignorez tout cela complètement. Peut-être savons-nous que cette méthode est parfaite, il n'y a rien de mal à cela. Nous pouvons donc passer en revue toute cette méthode. Et puis la prochaine ligne à exécuter sera celle-ci ici. Parce que nous avons des étapes sur l'ensemble de la méthode, c'est ce qui fait la différence entre step into et step over. Nous pouvons simplement ignorer une section entière du code. Vous l'avez peut-être deviné. Qu'est-ce que Step Out ? Eh bien, nous sommes dans une méthode en ce moment. Je peux cliquer sur Step Out Shift 11 et nous pouvons complètement sortir de la méthode. Et nous le faisons lorsque nous adoptons le reste des méthodes. Très bien. Nous voulons en quelque sorte sortir d'ici et revenir là où nous étions avant , puis passer à autre chose. Voilà donc la différence entre ces commandes d'étape. En général, il s'agit simplement d'entrer dans quelque chose comme une méthode, une classe ou quelque chose comme ça, ou une propriété, ou nous pouvons le dépasser complètement. Alors ignorez-le et continuez avec le reste. Et si nous nous trouvons dans une méthode et que vous savez, tout semble plutôt bon, alors nous pouvons nous en sortir. C'est ce qu'on appelle des commandes par étapes. Et le processus de déplacement de l'exécution des codes est appelé étape ou étape de code. C'est donc ce qui fait la différence avec ceux qui sont là. Maintenant, j'ai expliqué les points d'arrêt. Pas de code, pas à pas, commandes. Essayons de trouver notre problème ici. Cela peut sembler évident, mais souvenez-vous que nous avons dit que le message de mercredi n'était pas correct. Alors pourquoi ça ? Définissons donc un point de rupture cette instruction switch ici, car nous savons que le problème est probablement à cette instruction switch. Je vais donc lancer l'application maintenant, et je vais taper Wednesday. Je vais appuyer sur Entrée, et nous sommes sur le point de lancer cette instruction Switch. Voici notre variable ici. Je peux passer le curseur sur les entrées, et je peux voir, regarder mercredi Maintenant, ce qui se passe, c'est que si je passe ici, vous pouvez voir que cela correspond à cette case par défaut. Aucun de ces cas ne correspond donc à mercredi, mais ce qui semble étrange parce que j'ai mercredi ici en ce moment, mercredi. Donc, si je survole cette variable, mercredi, oh, je vois, regardez, le y est en majuscule juste là. C'est en majuscules. C'est probablement pourquoi maintenant j'ai changé ce y en minuscules. Je passe le curseur sur cette variable ici. Il semble que cela corresponde correctement. Cela devrait donc fonctionner. Maintenant, je peux redémarrer l'application. Vous voyez cette icône ici à côté du bouton Stop. Ça dit « redémarrer ». Ce que je pourrais aussi faire, c'est arrêter le programme ou le rayer, puis le relancer. Ce bouton de redémarrage, ici, fait redémarrer le code R, mais laisse le débogueur fonctionner en arrière-plan Si vous cliquez sur Redémarrer, surtout si vous avez un gros logiciel, le redémarrage est légèrement plus rapide . C'est la différence entre le bouton de redémarrage et le bouton d' arrêt de la lecture. Une chose que nous pouvons également faire, par exemple, est de déplacer manuellement l'exécution du code. Qu'est-ce que ça veut dire, bordel ? En ce moment, nous exécutons cette ligne de code. Il est sur le point d'être exécuté. Il suffit de le franchir, et maintenant nous sommes sur le point d' exécuter cette ligne ici. Essentiellement, l'exécution de cette instruction switch est terminée. Ce que nous pouvons faire, c'est passer notre souris sur cette flèche jaune juste ici Maintenez le bouton gauche enfoncé, et nous pouvons déplacer l'exécution du code jusqu'au début de l'instruction switch, comme si elle n'avait jamais été exécutée au départ. C'est plutôt cool, n'est-ce pas ? Imaginez que vous faisiez glisser la souris ici comme si vous utilisiez une commande pas à pas, comme « step over » ou « into Mais cela vous permet de prendre du recul, pas seulement d'une ligne, mais de plusieurs lignes. Il s'agit donc d'un raccourci pour ces commandes d'étape. Mais cela vous permet de le faire en gros morceaux, par exemple. Nous sommes sur le point de réexécuter l'instruction switch, mais nous avons en fait modifié le code ici et nous n'avons même pas arrêté notre logiciel. Cela se fait en temps réel. C'est plutôt cool, n'est-ce pas ? Maintenant, si je passe au-dessus en utilisant dix, vous pouvez voir que cette ligne est maintenant sur la bonne ligne. Les mercredis sont simples, donc on dirait que nous avons réglé le problème. C'était juste, c'était juste ce y majuscule mercredi. Maintenant, je peux simplement appuyer sur F cinq, qui est l'abréviation de ce bouton de lecture vert. Alors maintenant, je pense que le problème est résolu. Je ne veux plus faire de débogage. Je peux retirer mes points de rupture si je le souhaite, puis je peux simplement appuyer sur ce bouton de lecture vert pour permettre au logiciel de continuer normalement. Alors maintenant, on parle du mercredi là-bas, ce qui est parfait. C'est exactement ce que je veux. Si je le répète, on obtient exactement le même résultat. Il semble donc que nous ayons résolu le problème avec notre logiciel. C'était juste une différence de caractère. Il s'agit peut-être d'un changement mineur. Mais même une différence d'un caractère peut entraîner, exemple, des fusées Space X au sol, sans jamais atteindre l'orbite. Il est donc très important que tout soit vérifié dans les moindres détails. Pour ce faire, un débogueur est un outil très utile pour accomplir de telles choses Je vais vous présenter un autre exemple et quelques autres outils de débogage qui pourraient vous être utiles Ils sont exécutés pour cliquer et exécutés vers le curseur. Jetons donc un coup d' œil à cet exemple ici. Si vous avez suivi les tutoriels précédents, vous vous souvenez probablement de cet exemple. Essentiellement, on demande un numéro à cet exemple. Vous tapez le chiffre 25, puis il dessine une pyramide de 25 lignes de haut. Par exemple, parce que j'en ai mis 25, il y a 25 lignes de haut. Mais vous pouvez voir qu'il y a un problème avec l'arrière-plan de cette pyramide. Ce côté droit dure trop longtemps. Cela devrait ressembler au côté gauche ici. Après chaque ligne, vous pouvez voir la pyramide s'élargir, mais l'arrière-plan se rétrécit comme ça Mais ce comportement n'est pas imité du côté droit Il y a un petit problème avec ça. Jetons un coup d'œil à ce qui se passe ici. Voici l'exemple. Ici, nous demandons l'utilisateur quelle hauteur il souhaite que la pyramide soit. Nous en faisons une méthode. Nous déléguons toute la logique du dessin de la pyramide dans cette seule méthode Nous avons ici nos quatre boucles principales qui tracent chaque ligne de la pyramide à tour de rôle. Ensuite, nous avons 34 boucles, une pour faire les traits d'union à gauche, une pour dessiner la pyramide et une pour faire les traits d'union Nous savons que nous avons un problème avec les traits d'union sur la droite. C'est probablement un bon endroit pour définir notre point d'arrêt et voir ce qui se passe ici Lorsque nous exécutons le logiciel, nous demandons un numéro à l'utilisateur. Commençons par un faible chiffre. faibles nombres sont plus faciles à corriger car ils ne sont pas nombreux Je vais taper le chiffre cinq. Notre point d'arrêt a été atteint ici. Pour le moment, H n'est pas déclaré. Appuyons sur dix pour passer à la vitesse supérieure. Maintenant, nous avons initialisé l' en-tête de nos quatre boucles. heure actuelle, nous sommes sur le point de faire la première itération de la boucle H est un parce que c'est sa valeur initiale ici. Ensuite, H va continuer à courir jusqu'à ce qu'il soit inférieur ou égal à ce qui semble être cinq. Et à chaque itération, nous augmentons d'une unité. Pour la première ligne, H va continuer cinq fois parce que c'est la taille ici. Si je passe dessus, nous produisons un trait d'union, puis deux tirets, trois ou cinq Alors c'est fait. La toute première ligne d'une pyramide , haute de cinq unités, produit cinq traits d'union sur la Est-ce que c'est vrai ? Est-ce que c'est vrai ? Non, car sur la première ligne, il devrait en afficher quatre. Cela génère trop de traits d'union ici. Pourquoi est-ce le cas ? Cela génère évidemment trop de traits d'union, mais ceux de gauche en génèrent la bonne quantité Vous pouvez donc voir ici que le trait d'union doit s'arrêter lorsqu'il est de taille moins y. C'est la formule que nous avions ici Nous l'avons évidemment fait pour cette boucle de trait d'union ici, mais nous avons oublié de reproduire la même fonctionnalité pour les tirets de droite en utilisant un point Vous pouvez voir que nous pouvons examiner la valeur de H pendant que le logiciel est en cours d'exécution. Faisons-le maintenant. Vous pouvez voir que nous pouvons examiner les valeurs de H. Nous pouvons examiner les valeurs de taille, nous pouvons examiner les valeurs de y. Nous pouvons même examiner les valeurs ici, les valeurs entrées dans la méthode en utilisant H. Nous pouvons examiner les valeurs de taille, nous pouvons examiner les valeurs de y. Nous pouvons même examiner les valeurs ici, les valeurs entrées dans la méthode en utilisant les commandes step over ou into, nous pouvons réellement contrôler l' exécution du logiciel. C'est plutôt cool, n'est-ce pas ? Disons que nous avons trouvé la solution ici, que nous avons trouvé le problème. Maintenant, j'ai déjà mentionné quelques points à propos de run to cursor et run to click. Qu'est-ce qu'ils sont ? Eh bien, courez vers le curseur et exécutez pour cliquer sur les commandes de raccourci. Tu te souviens quand j'ai parlé de faire glisser cette flèche jaune ici ? Juste ici pour que nous puissions contrôler l'exécution ? Exécutez manuellement pour cliquer et exécuter raccourcis du curseur afin de contrôler le flux de code. Comme le step de code. Si je place mon curseur ici, par exemple, cliquez avec le bouton droit de la souris, puis que je choisis Exécuter vers le curseur, cliquez dessus et l'exécution passe à l' endroit où se trouvait le curseur de ma souris. C'est un peu un raccourci et c'est très utile. Un autre est exécuté pour cliquer. Vous pouvez voir qu'à chaque fois que je clique sur une nouvelle ligne, ce mystérieux petit bouton de jeu vert apparaît. Mais vous pouvez le voir ici, celui-ci juste ici. Je clique sur cette ligne, elle apparaît juste ici, comme un fantôme vert. C'est ce qu'on appelle « run to click ». Si je clique sur ce petit bouton vert ici, l'exécution du code va passer à cette ligne. C'est donc à peu près la même chose que de cliquer sur cette ligne avec le bouton droit de la souris et de choisir Exécuter vers le curseur. C'est donc juste un petit raccourci pratique. Vous pouvez donc voir que courir pour cliquer et exécuter vers le curseur sont deux petits raccourcis pratiques. Si cette section de code se répète plusieurs fois, je peux cliquer dessus par exemple, et l'exécution du code se poursuivra jusqu'à ce qu'il atteigne cette ligne Ce ne sont que de jolis petits raccourcis par étapes de code. Celui-ci est exécuté pour cliquer et celui pour cliquer avec le bouton droit de la souris, vous pouvez exécuter pour coder le curseur, mais il existe également un raccourci pour cela, savoir le contrôle F ten. Plus vous utiliserez Visual Studio, plus vous apprendrez ces raccourcis. Mais tous les développeurs que je connais savent entrer et sortir, ce qui est F 10.11. Et ces deux-là sont vraiment utiles pour lire le code étape par étape Nous allons maintenant exécuter l'application et il semble que notre problème avec les traits d'union ait été résolu C'était juste un problème avec les quatre dernières boucles ici. Et c'est la limite supérieure. Ainsi, lorsque vous débugez du code en général, vous devez vous poser quelques questions Si une erreur s'est produite, quelle était l'instruction ou l'expression que le programme exécutait au moment de l'erreur ? Sur quelle ligne de code votre programme a-t-il échoué ? Le programme a-t-il échoué ? Et vous aviez ce genre de ligne surlignée qui indiquait qu'il y avait une erreur. C'était quelle ligne ? Et lorsque votre programme a échoué, quelles étaient les valeurs des variables, comme les paramètres, les champs locaux, les objets éventuels ? Quelles étaient ces valeurs lorsque l'erreur s'est produite ? Quelle était la séquence des instructions exécutées au moment de l'erreur ? Connaissiez-vous une méthode ? D'une méthode, par exemple ? Alors, où étiez-vous ? Qu'est-ce qui a été exécuté au préalable ? Et je pense que j'ai à peu près couvert celui-ci. Quel a été le résultat de l'échec de la ligne de code ? Ou peut-être le résultat de la ligne de code avant l'erreur ? Vous devez donc tenir compte de toutes ces choses. Vous ne pouvez pas simplement placer des points d'arrêt n'importe où et espérer trouver une erreur Vous devez en quelque sorte vous poser ces questions. Ciblez en quelque sorte l'erreur à peu près là où elle pourrait se trouver, dans quelle classe elle pourrait se trouver, dans quelle méthode elle pourrait se trouver. Ensuite, une fois que vous l'avez isolé selon une méthode particulière, vous pouvez commencer à tracer des points d'arrêt et à l' isoler un peu points d'arrêt et à l' isoler un peu Pour résumer, voici ce qu'est le débogage. C'est le processus qui consiste à rechercher les erreurs, mais si vous en avez une, c'est le processus qui consiste en quelque sorte à isoler l'erreur C'est ce qu'est un débogueur. Il s'agit donc d'un débogueur de Visual Studio. Et vous pouvez l'utiliser lorsque vous configurez votre mode de publication sur Debug Et lorsque vous débugez, vous pouvez placer des éléments tels que des points d'arrêt Et c'est là que l'exécution du code s'arrêtera. Lorsque l'exécution du code s'arrête, on parle de mode pause. Vous entrez en mode pause et c'est à ce moment qu'un point arrêt a été atteint pour contrôler le flux d'exécution. Utilisez Step in pour sortir, louer, cliquer sur le locataire, le curseur ou même faire glisser la souris le long de cette barre de points de rupture C'est ce que l'on appelle le code step. Ce sont toutes les terminologies liées au débogage dans Visual Studio Vous serez peut-être surpris, mais nous n'avons abordé que la surface du débogage J'espère que ce tutoriel vous a aidé. Merci d'avoir regardé. 55. 11-2. Fenêtre immédiate: Dans ce tutoriel, nous allons parler de la fenêtre immédiate. Il s'agit maintenant d'un utilitaire de débogage extrêmement utile Si vous n'avez pas vu mon dernier tutoriel sur le débogage, les points d'arrêt, les étapes de code, je vous recommande vivement regarder avant de regarder ce didacticiel, la fenêtre immédiate, de quoi s'agit-il ? Si nous descendons ici, vous pouvez voir ce petit onglet appelé Fenêtre immédiate. Peut-être l'avez-vous déjà vu, peut-être vous demandez-vous de quoi il s'agit. Si vous ne voyez pas cet onglet ici, alors si nous arrivons en haut, nous pouvons accéder à ce menu de débogage ici C'est maintenant là que se trouvent tous les utilitaires et fonctionnalités de débogage . Si vous vous posez la question, allez sur Windows, puis sur Immediate. Et quand vous faites cela, nous revenons ici et ce petit onglet devrait apparaître juste ici. Maintenant, la fenêtre immédiate peut être utilisée au moment de la conception ou de l'exécution, alors qu'est-ce que cela signifie ? Eh bien, c'est au moment de la conception que nous sommes en quelque sorte en train de développer. Nous n'avons même pas encore appuyé sur le bouton vert de lecture. Nous n'avons rien compilé. Nous ne gérons rien. Mais ce que nous pouvons faire, c'est travailler avec notre logiciel au moment de la conception, sorte que le logiciel ne fonctionne même pas. Jetons donc un coup d'œil à cet exemple maintenant afin que je puisse vous montrer ce que je veux dire par là. Si vous avez suivi nos tutoriels précédents, nous avons créé un exemple de calculateur dans lequel nous demandons à l'utilisateur un premier chiffre, un deuxième chiffre, puis un opérateur. Et puis, dans une méthode ici, par exemple, elle prend ces nombres et un opérateur, par exemple 54, puis peut-être plus. Ensuite, si l' opérateur est un plus, il les additionne et affiche simplement le résultat, qui serait neuf. Dans ce cas, ce que nous pouvons faire, c'est tester cette méthode depuis la fenêtre immédiate. C'est fou, non ? Le logiciel ne fonctionne même pas, il ne fonctionne même pas. Comment s'y prend-on ? Prenons cette méthode ici. Calculez, par exemple. Je vais donc le copier. Nous allons passer à cette fenêtre immédiate. Maintenant, tout ce qui apparaît dans la fenêtre immédiate commence par un point d'interrogation qui indique à peu près , d' accord, je veux exécuter une commande. Je veux donc exécuter cette méthode. Donc, ce que je vais faire, c'est appeler cette méthode. Je vais l'appeler par cinq, et il faut un caractère, et se souvenir des caractères entre guillemets simples. Et nous allons faire un avantage en travaillant dans l' immédiat. Le point-virgule est facultatif. Nous pouvons le dire, nous n'y sommes pas obligés, cela n'a pas vraiment d'importance. Maintenant, regarde ce qui se passe quand je touche Er. Il exécute en fait notre logiciel, compile et l'exécute, puis nous donne le résultat de cette méthode Vous pouvez voir qu'il l' a fait au moment de la conception. Mon logiciel ne fonctionnait même pas , il m'a donné la valeur neuf. C'est un très bon moyen de tester des éléments tels que des méthodes, d'évaluer des expressions au moment de la conception, mais aussi au moment de l'exécution. Il peut également le faire pendant que le logiciel est en cours d'exécution. C'est plutôt intelligent, n'est-ce pas ? Si je mets un point de rupture, peut-être ici par exemple, effaçons la fenêtre immédiate, nous pouvons écrire, cliquer dessus et cliquer sur Effacer. Tout cela ne fera que nous ouvrir la fenêtre. Alors maintenant, ici, j' ai un point de rupture sur le calcul d'un double résultat égal à un calcul. Avant même d'appeler la méthode, j'arrête le programme, donc rien d'autre ne va continuer Je lance l'application en cliquant sur le bouton vert de lecture ou en appuyant sur cinq. Ça n'a pas d'importance. Maintenant, nous demandons le premier chiffre cinq, puis quatre, puis je veux les additionner. Maintenant, le programme a cessé de s'exécuter. Si je viens ici, dans le coin inférieur, j'ai cette fenêtre immédiate ici. Je peux donc faire plein de choses ici. Je peux réexécuter cette méthode. Par exemple, pendant que le code est en cours d'exécution, une fonctionnalité utile est que pendant l'exécution du code, nous avons cet Intellisense, l' Il nous fournit en fait toutes les variables du champ d'application, comme le numéro un. Deuxièmement, nous pouvons lui transmettre des informations personnalisées si nous le voulons. Si je dis 54 ans et plus, comme nous l'avons fait auparavant, alors j'appuie sur Entrée, nous pouvons réellement obtenir le résultat. Mais vous pouvez voir ici que rien ne s'est vraiment passé ici. Nous pouvons toujours poursuivre ce calcul. C'est plutôt cool, n'est-ce pas ? Ce que je peux également faire, c'est utiliser des variables existantes. En ce moment, j'ai le numéro un, le numéro un. Si je vais ici et que je souligne cette valeur, vous pouvez voir que l'utilisateur a donné le chiffre cinq et le numéro deux qu'il a donné quatre. Et l'opérateur qu'ils ont utilisé a un avantage juste là. Ce que nous pouvons réellement faire, c'est utiliser ces variables. Nous pouvons réellement voir le résultat avant même que la méthode ne soit exécutée. Eh bien, peut-être que je veux les multiplier. Vous pouvez donc voir ici que cinq multiplié par quatre est 20. Vous pouvez donc voir que la fenêtre immédiate peut réellement intercepter diverses choses Évaluez les expressions, exécutez la méthode, plein de choses comme ça. Tout cela alors que le code est en mode pause. Cette méthode n'a même pas encore été exécutée, par exemple. Maintenant, il y a un petit détail là-dedans. Dans cette fenêtre juste en bas, j'ai déjà appelé la méthode de calcul deux fois. Mais imaginez que si le calcul faisait autre chose, peut-être qu'il comptait quelque chose en arrière-plan. Chaque fois que je lance calculate, il tient un compte, un total cumulé du nombre de fois que je l'ai appelé Maintenant, l'exécution de cette méthode dans la fenêtre immédiate affecterait les résultats. C'est comme si cette méthode était actuellement en cours d' exécution, ce qui pourrait entraîner divers problèmes. Donc, en fonction de ce que fait votre code, si vous vous trompez dans la fenêtre immédiate, cela peut affecter les résultats ici. Cela dépend vraiment de ce que fait votre code. Pour quelque chose comme calculer, eh bien, il ne stocke pas vraiment d'informations. Ça ne compte rien. Il ne conserve pas le total cumulé du nombre de fois qu'il a été appelé. Il est donc assez sûr de courir dans la fenêtre immédiate. Cependant, dans certains cas, cela serait dangereux, par exemple pour ces autres raisons. C'est juste quelque chose qui mérite d'être noté. Permettez-moi donc de vous le démontrer. Maintenant, juste pour illustrer ce dont je parle. Supposons que cette méthode de calcul enregistre le nombre de fois qu'elle a été appelée Mais nous utilisons ce décompte courant à des fins importantes. Peut-être que quelque chose d'autre en dépend. Ce champ va simplement enregistrer le nombre de fois que la méthode de calcul est appelée. Lorsque la méthode de calcul est appelée, je vais simplement incrémenter ce champ local d' Lorsque la méthode de calcul est appelée, un à chaque Donc, si je lance l'application maintenant, je vais juste définir un point d' arrêt ici afin que nous puissions suspendre l'exécution du logiciel. Je vais taper quelques exemples de chiffres, comme cinq plus quatre. Ensuite, je vais passer à la fenêtre immédiate. Cela passe le curseur au-dessus de ce champ privé ici. Nombre de fois, vous pouvez voir que la valeur est actuellement nulle. Mais si j'exécute cette méthode dans la fenêtre immédiate, cela peut être exécuté trois fois. Au fait, en appuyant sur la flèche vers le haut du clavier, je peux consulter les informations que j'ai saisies précédemment ici Donc c'est plutôt cool, n'est-ce pas ? J'ai donc exécuté la méthode de calcul trois fois, mais uniquement depuis la fenêtre immédiate. Si je viens ici et que je passe le curseur sur ma variable privée ici, vous pouvez voir qu'elle a la valeur de trois éléments de votre code sont affectés par tout ce que vous faites dans la fenêtre située juste en bas C'est donc très important et c'est quelque chose dont vous devez être conscient. Encore une fois, évidemment, tout se réinitialise lorsque vous exécutez votre application Mais en ce qui concerne le débogage, il convient de le noter Je viens donc de parler du fait que l' utilisation de la fenêtre immédiate, par exemple pour appeler des méthodes, peut changer des choses dans votre code. Maintenant, cela peut être un comportement souhaité, peut-être que vous voulez le faire et c'est parfaitement bien. Mais il existe des situations, comme dans notre exemple précédent, où nous incrémentons une variable, par exemple Mais nous en avons besoin ici et nous ne voulons pas que quoi que ce soit change dans notre fenêtre immédiate. Mais nous voulons tout de même exécuter la méthode depuis la fenêtre immédiate. Eh bien, il y a quelque chose que nous pouvons réellement faire pour résoudre ce problème dans la fenêtre immédiate où j'appelle la méthode, peu importe ce que vous indiquez ici, qu'il s'agisse d'appeler une méthode, d' évaluer une expression, découvrir la valeur d'une variable, vous pouvez simplement la suffixer avec une petite commande appelée S E qui signifie « aucun effet secondaire Vous pouvez voir quand je tape que Visual Studio nous donne de bonnes indications pour le moment. Si je viens ici, vous pouvez voir notre variable ici, le nombre de fois est zéro. Je redescends dans la fenêtre immédiate et j'appuie sur Entrée. Vous pouvez donc voir que Calculate a réellement analysé les chiffres. Il a additionné ces chiffres, mais j'ai spécifié cet indicateur d' absence d'effets secondaires. Si je reviens ici et que je repense plusieurs fois, la valeur de zéro est conservée en spécifiant SE, cela signifie qu'aucun effet secondaire ne se produira si vous appelez cette méthode depuis la fenêtre immédiate C'est plutôt cool, n'est-ce pas ? C'est l'une des fonctionnalités que vous pouvez en faire. Nous avons donc appelé méthodes avec modifications, nous avons appelé méthodes sans modifications. Eh bien, que pouvons-nous faire d'autre dans l'immédiat ? Eh bien, nous pouvons voir les valeurs des variables. Donc, par exemple, le numéro un. Qu'est-ce que c'est ? Oh, le numéro un c'est cinq. C'est plutôt cool, n'est-ce pas ? Préfixez-le donc toujours par un point d'interrogation. Et évidemment, il ne s'agit que de variables de portée. Ainsi, par exemple, si ces variables n'ont pas de valeur, elles n'ont pas encore été atteintes ou si elles n'ont pas été initialisées, il est évident que vous ne pouvez pas lire leurs valeurs Il ne s'agit donc que de ce que l' on appelle la portée, quoi nous avons réellement accès. Nous pouvons également évaluer des expressions, par exemple cinq plus sept. Cela nous donnera le résultat et nous pouvons le faire avec des variables, donc le numéro un divisé par le numéro deux. C'est plutôt cool, surtout lorsque vous débugez, vous avez saisi quelques numéros d' échantillon, mais vous pouvez arrêter l'exécution du code et jouer avec celui-ci pendant l'exécution, plutôt que de redémarrer l'application, d' essayer quelques numéros, de la redémarrer à nouveau, d' essayer Vous pouvez voir comment la fenêtre immédiate accélère ce problème. Vous pouvez simplement saisir ce que vous voulez et peut-être essayez-vous de localiser une erreur ou un problème. Il vous donne un moyen très rapide, facile et dynamique d' essayer de localiser ces problèmes et erreurs. C'est pourquoi la fenêtre immédiate est plutôt cool dans ce sens. Mais non seulement nous pouvons simplement appeler des méthodes et examiner les valeurs, nous pouvons également attribuer des valeurs. Si nous examinons la valeur du numéro un que l'utilisateur a saisie est cinq et qu'il saisit le numéro deux , soit six. Et l'opérateur était un avantage, donc nous allons en avoir 11. Ce que nous pouvons faire, c'est modifier les valeurs des variables. Plutôt que d'ajouter cinq à six et d'obtenir 11, ils disent que le numéro un est égal à 11. Maintenant, le numéro un est égal à 11. Faisons en sorte que le chiffre deux soit égal à 12 par exemple. Et nous laisserons l' opérateur comme avantage. Nous sommes maintenant passés à ces deux variables. Venons ici maintenant. Si nous survolons ces variables, vous pouvez voir que le numéro un est maintenant 11 et le numéro deux est maintenant 12 Nous avons modifié les valeurs de ces variables en mode pause alors que le logiciel fonctionnait à la vitesse de la lumière Comme nous en parlions précédemment, nous avons en fait modifié les choses au moment de l'exécution. C'est fou, n' est-ce pas ? C'est incroyable. Maintenant, si j'appuie sur cinq et continue à exécuter le logiciel, vous pouvez voir que le résultat est 23. L'utilisateur est entré dans la version 5.6 mais nous y sommes allés, modifié certaines choses, changé celui-ci à 11 et celui-ci à 12. Vous pouvez donc voir que le résultat reflète le changement que nous avons fait dans la fenêtre immédiate. Donc c'est plutôt cool, n'est-ce pas ? Imaginez donc que la fenêtre immédiate ressemble un petit bloc-notes dans lequel vous pouvez jouer , changer des choses et appeler des choses C'est le pouvoir de la fenêtre immédiate dans Visual Studio lorsque vous travaillez avec C shop. 56. 11-3. Windows et automatiques: Poursuivant notre sujet sur le débogage, je vais parler de la fenêtre locale et la fenêtre automatique. Qu'est-ce qu'ils sont ? Eh bien, les fenêtres locales et automatiques ne sont disponibles que pendant une session de débogage Nous devons passer en mode débogage et jeter un œil à ces fenêtres, puis je vais vous montrer ce qu'elles ont à vous offrir Ce que je vais faire maintenant, c'est ajouter un point d'arrêt. Voici mon application de calcul simple dans laquelle j'additionne, soustrais ou multiplie des nombres ensemble. Il y a tellement de choses différentes ici. Je vais juste définir un point d'arrêt ici sans raison particulière Ensuite, je vais lancer l'application en mode debug parce que nous voulons faire un peu de débogage, le logiciel est en cours d'exécution, il me demande deux chiffres Je vais juste y mettre quelques exemples de données. Maintenant, le code est en pause, son exécution est terminée et notre point d'arrêt est atteint Maintenant, le logiciel est figé dans le temps et nous pouvons en faire ce que nous voulons. Si nous descendons ici dans le coin inférieur gauche, dans mon cas, vous pouvez voir que nous avons quelques onglets ici, différents onglets. L'un s'appelle Locals et l'autre s'appelle Autos. Juste ici. Si vous ne voyez aucun de ces éléments, accédez au menu de débogage, puis accédez à Windows Et puis il y a quelques options appelées autos et locaux À présent, ces options de menu ne s'afficheront peut-être pas sauf si vous êtes dans une session de débogage Assurez-vous donc que vous êtes en train déboguer et que ceux-ci devraient apparaître Vous pouvez également utiliser ces raccourcis clavier, une fois que ces fenêtres sont visibles ici. Ces fenêtres offrent un aperçu en temps réel des variables alors que nous regardions la fenêtre précédente, où nous pouvions examiner les valeurs des variables avec le point d'interrogation. Avant d'imaginer qu'il s'agit une interface utilisateur graphique pour la fenêtre immédiate en termes de lecture de variables et d'objets, etc. Quoi qu'il en soit, vous pouvez voir que j'ai suspendu l'exécution du code dans cette méthode de calcul Ici, nous avons déjà des valeurs pour num un, num deux et aussi pour l'opérateur. Notre résultat est actuellement nul car nous n' avons pas défini de valeurs. Donc, si nous regardons dans cette fenêtre locale, nous pouvons voir toutes ces valeurs pour ces variables dans une fenêtre simple. Nous pouvons donc voir clairement ce que l'utilisateur nous a donné et quel pourrait être le résultat. De plus, si nous double-cliquons sur la valeur ici, nous pouvons réellement modifier ces informations en temps réel, comme auparavant dans la fenêtre immédiate, nous pouvons modifier ces valeurs. Je passe au résultat, je peux même modifier le résultat avant même qu'il ne soit initialisé Et en plus de modifier l'opérateur, par exemple, cela vous donne non seulement une vue en lecture seule, vous pouvez également modifier ces variables et les modifications seront reflétées lors de votre session de débogage Donc c'est plutôt cool, n'est-ce pas ? Nous avons donc examiné la fenêtre des paramètres locaux où nous pouvons voir nos variables ici et également modifier certaines valeurs. Ils sont désormais disponibles dans le cadre actuel. Cela signifie donc que j'ai défini un point de rupture ici. Nous sommes dans cette méthode, c'est le champ d'application actuel. Nous pouvons accéder à ces variables ici, mais nous ne pouvons rien lire en dehors de cette méthode. Ce ne sont que des choses de portée locale. Qu'est-ce qui est local pour nous ici ? C'est ce qui est reflété dans l'onglet local ici. Parlons maintenant de la fenêtre automatique et de la différence entre la fenêtre automatique et la fenêtre locale Leur comportement est assez similaire . Vous pouvez modifier les valeurs des variables et d'autres choses de ce genre. Vous pouvez visualiser la valeur des variables et des objets, mais pourquoi sont-ils différents ? La fenêtre automatique ici affiche des informations sur la ligne en cours Quand je dis la ligne actuelle, le point de rupture actuel, vous voyez que le logiciel est en pause ici, indiqué par cette partie surlignée en jaune Nous pouvons voir des variables et des objets sur cette ligne actuelle. Ici, nous avons le résultat. Non seulement cela, nous pouvons également consulter les informations de la ligne précédente. Maintenant, nous pouvons voir un nombre de fois, et si je le dépasse en utilisant dix. L'exécution du code passe donc à la ligne suivante, vous pouvez voir que les informations sont modifiées dans notre fenêtre automatique. fait, la principale différence entre les voitures et les voitures locales est que les voitures vous indiquent la ligne actuelle et celle qui la précède et locales vous donnent tout ce qui se trouve dans le périmètre actuel Vous pouvez voir que la fenêtre des locaux n' inclut pas les horaires car nous l'avons définie ici. Vous pouvez donc voir qu'il s'agit d'un champ privé statique de notre classe de programme, il n'apparaît donc pas dans la fenêtre locale. Pour vous, les locaux ne sont que des choses locales. Les éléments locaux dans le scope et les automobiles sont la ligne actuelle et celle qui la précède C'est là la principale différence. Mais je n'ai pas encore discuté du fait que les fenêtres locales et fenêtres automatiques peuvent évaluer les expressions. Si je vais ici, par exemple, où il est écrit « résultat », je peux faire ce que nous avons fait juste avant , lorsque nous avons évalué certaines choses. Je pourrais dire que le résultat est cinq plus quatre, donc vous pouvez voir que le résultat est neuf. Je peux également utiliser des variables existantes. Numéro un, par exemple, plus 567 et cela sera évalué Vous pouvez donc également évaluer les expressions à la fois dans les fenêtres locales et dans les fenêtres automatiques. J'ai configuré ici un exemple d'application qui utilise des objets plus complexes. J'ai une classe de jeu vidéo qui est transmise au constructeur J'ai une liste d'utilisateurs, et j'ajoute trois objets utilisateur à cette liste, et je crée également une liste d'entiers Il y a donc des choses assez compliquées ici. J'ai mis un point d'arrêt à la toute fin. Nous allons donc entrer dans une session de débogage, puis notre point d'arrêt sera atteint, puis nous allons regarder la fenêtre locale pour voir à quoi cela pourrait ressembler Je vais juste étendre cela un peu pour que nous puissions y voir un peu mieux. Vous pouvez le voir ici, c'est à peu près tout ici. Maintenant, j'ai ces flèches. Regardez, car ces jeux sont des objets plus compliqués. Je peux juste cliquer sur cette flèche. Je peux en fait voir toutes les propriétés et diverses choses à l'intérieur d'ici. Maintenant, ce petit a un cadenas dessus, ce qui signifie que c'est un terrain privé ici Mais il y a une petite clé à molette dessus, ce qui signifie que c'est une propriété Je peux modifier les valeurs contenues ici, afin que vous puissiez voir que je peux utiliser un visualiseur de texte pour les visualiser, afin que je puisse regarder les valeurs du titre Si je double-clique sur la valeur, je peux modifier différentes choses ici. Je pourrais dire que c'est pour un Macintosh, comme avant lorsque nous avions variables simples, des types de valeurs simples Je pourrais modifier les valeurs. Mais même avec des objets complexes comme celui-ci, je peux également modifier les valeurs et visualiser leur hiérarchie . Pour celui-ci, ici, la liste des utilisateurs, je peux l'étendre. Ensuite, je peux élargir le nombre de membres qui s'y trouvent et voir différents noms, âges et autres choses du genre. C'est donc très utile et très puissant. Au cours d'une session de débogage, vous pouvez voir l'état de tous vos objets, qu' il s'agisse de types de valeurs simples ou complexes, ou dans une seule fenêtre graphique ici C'est vraiment incroyable. Et si nous examinons l'onglet autos, j'ai dit que l'onglet automatique affiche des informations sur le point d'arrêt actuel ainsi que sur la ligne précédemment exécutée Dans ce cas, nous avons ajouté un point d'arrêt sur cette ligne rouge. La dernière déclaration qui a été émise était cette ligne ici. Par conséquent, cet objet est mis à disposition dans notre fenêtre automatique. Si vous avez un logiciel très volumineux, avec peut-être des centaines ou des milliers d' objets et de variables dans le champ d'application actuel, vous pouvez également les rechercher. La façon dont cela fonctionne est donc très utile. Et vous pouvez spécifier une profondeur de recherche, ce qui signifie simplement combien de flèches peuvent afficher les résultats de votre recherche. Vous pouvez donc voir qu'il existe également de nombreuses options de profondeur. Mais c'est vraiment le principe sous-tend les locaux et les vitres automatiques. Il vous permet de visualiser et de modifier les variables. Mais contrairement à la fenêtre qui se trouve juste ici, elle vous offre une interface utilisateur graphique agréable avec laquelle vous pouvez travailler. Et vous donne également l'état de ces objets, ces champs privés, ces propriétés publiques. C'est donc vraiment très utile à cet égard. 57. 11-4. Regarder Windows et Quick Watch: Je vais maintenant parler du visionnage, et cela est encore une fois lié au débogage dans Visual Studio Qu'est-ce que regarder en particulier ? Je vais parler de Quick Watch and Watch Windows. Alors, quels sont-ils ? Si vous regardez mon autre tutoriel sur Windows local et automatique, il fonctionne un peu de la même manière La seule différence avec une fenêtre de surveillance, c'est que nous pouvons choisir ce que nous voulons y ajouter. Mais ce n'est pas tout, nous pouvons évaluer les expressions. Alors, qu'est-ce que tout cela signifie ? Allons y jeter un œil. Donc, en ce moment, j'ai un exemple d'application, notre petite application de calcul. Si vous avez suivi nos autres tutoriels, je viens d'ajouter un point de rupture aléatoire ici. Je suis en mode debug, j'entre dans une session de debug Le débogueur est rattaché à notre logiciel. Il demande deux chiffres et un opérateur, cinq plus six. Maintenant que notre point de rupture est atteint, le logiciel est gelé. Nous pouvons examiner les variables dès maintenant. Nous arrivons ici, nous avons notre fenêtre locale familière, où nous pouvons regarder la valeur des variables actuelles dans la portée actuelle. Le numéro un est cinq, le numéro deux est six, l'opérateur est plus et le résultat est 11. Il s'agit des valeurs de toutes les variables de la portée actuelle. Maintenant, regarde la fenêtre. Si nous venons ici pour déboguer puis que nous passons à la fenêtre, vous pouvez voir qu'il y a la montre 123.4, cela signifie que nous pouvons avoir jusqu'à quatre fenêtres de surveillance, quatre sessions Parlons de ce qu'est réellement une session de visionnage. Je vais cliquer sur Watch One. Et si nous venons ici, vous verrez qu'un onglet Watch One a été créé à côté des locaux, des voitures, et maintenant nous avons un onglet Watch one Et vous pouvez voir ici qu'il est écrit « Ajouter un article à surveiller ». Qu'est-ce que cela signifie ? Eh bien, on peut tout regarder. Nous voulons à peu près aimer les variables, les objets. Par exemple, si je viens ici pour accéder au code, nous avons ces variables ici. Le numéro un, c'est le numéro deux, c'est six. Si je clique avec le bouton droit sur le numéro un, je peux descendre dans ce menu et cliquer sur Ajouter une montre. Je vais faire exactement la même chose pour le numéro deux. Cliquez avec le bouton droit sur Ajouter une montre. Si nous arrivons à la fenêtre de surveillance d'ici, nous pouvons voir qu'elle fonctionne à peu près comme la fenêtre de notre local. Nous avons les variables que nous avons ajoutées, nous avons les valeurs, et nous pouvons également modifier les valeurs si nous le voulons. Vous vous demandez peut-être pourquoi je n'utilise pas simplement la fenêtre locale ? Il fait exactement la même chose. peu près, la principale différence entre la fenêtre de surveillance et la fenêtre locale est que vous pouvez ajouter ce que vous voulez et vous pouvez également ajouter des expressions. Par exemple, je pourrais dire numéro un plus numéro deux, puis appuyer sur Entrée. J'ai ajouté une expression personnalisée ici. Maintenant, pendant toute la durée de ma session de débogage, je sais que la valeur de num un plus num deux, ou j'ai mis le numéro un plus le numéro deux Si je peux apprendre à taper, c'est 11. Vous pouvez voir que je peux mettre des expressions ici. Je pourrais dire le numéro un multiplié par le résultat. Je peux mettre diverses choses personnalisées ici. C'est à peu près l'une des principales différences entre la fenêtre de surveillance et la fenêtre locale. Quelles étaient ces fenêtres de montre 1234 ? Si nous revenons ici pour déboguer à nouveau, alors Windows, puis regardez et cliquez sur Watch pour revenir ici Maintenant que nous avons un autre onglet de surveillance , nous pouvons ajouter d'autres variables ici. Maintenant, ces fenêtres supplémentaires ne sont pratiquement utiles que lorsque vous avez une application très volumineuse. Vous souhaitez isoler certaines variables des autres variables afin qu'elles soient mieux organisées et que vous ne vous y trompiez pas. Si vous travaillez sur une application de calcul, vous pouvez placer toutes vos variables surveillées dans cette fenêtre de surveillance. Peut-être que l' application de calcul possède une autre fonctionnalité qui gère quelque chose de totalement différent. Ensuite, vous mettez les variables de votre montre ici. Vous organisez vos variables et expressions. Vous pouvez avoir jusqu'à quatre fenêtres de surveillance si vous le souhaitez. C'est l'un des avantages et des pouvoirs de la fenêtre de montre. Non seulement vous pouvez afficher et modifier des variables comme les fenêtres locales, mais vous pouvez également y ajouter des expressions. C'est plutôt cool. Vous n'êtes pas limité aux variables de base. Vous pouvez même appeler des méthodes. Par exemple, j'ai une méthode appelée calculer. Ensuite, je peux calculer, disons quatre plus huit par exemple. Ensuite, je peux le mettre là-dedans et cela sera également évalué. Les expressions ne sont pas simplement liées à de simples variables, mais nous pouvons également y placer des appels de méthode complets. C'est vraiment puissant et très utile, en particulier lors du débogage d'applications assez volumineuses Et l'une des choses que j'ai mentionnées au début de ce didacticiel était Quick Watch. Qu'est-ce que Quick Watch ? Imaginez que vous souhaitiez simplement observer une variable simple très rapidement. Supposons que vous souhaitiez simplement vérifier la valeur d' une variable très rapidement. C'est à peu près le seul objectif de Quick Watch. Si j'écris « clic numéro un » par exemple, puis que je clique sur « Quick Watch », ou sur « shift F neuf », cette fenêtre apparaît. Et lorsque cette fenêtre apparaît, vous ne pouvez pas continuer le débogage Vous. Je suis presque coincé ici. Ici, je regarde rapidement la variable numéro un, je peux changer sa valeur, je peux réévaluer ce que je veux. Et je peux également modifier ou saisir n'importe quelle autre expression. Je pourrais donc dire « calculer ». Et il y a aussi la saisie semi-automatique ici. Donc, si je veux dire cinq plus quatre et appuyer sur Entrée, je peux faire des expressions rapides à la volée, mais vous obtenez ce genre de dialogue ennuyeux. Et pour être honnête, je préfère simplement utiliser la fenêtre de la montre, car elle fait tout ce que fait la montre rapide. Mais je le souligne simplement parce que je sais que certaines personnes préfèrent l'utiliser Personnellement, je ne sais pas pourquoi. Mais il est là si vous en avez besoin. C'est donc essentiellement le message que j'essaie de faire passer. Mais la fenêtre de la montre fait tout ce que fait Quick Watch. Voilà donc la puissance des fenêtres de montre de C Sharp. 58. 12-1. Le modificateur d'accès protégé: Je voudrais parler du dernier modificateur d'accès dont nous n'avons pas encore parlé, et qui est protégé. Nous avons parlé de public, de privé, interne, mais nous allons maintenant parler de protection. Désormais, protégé est un mot clé généralement utilisé lorsque vous héritez de classes en C Sharp Donc, si vous n'avez pas vu le didacticiel que j'ai créé sur l'héritage et pendant que nous y sommes, si vous n'avez pas vu le didacticiel que j'ai réalisé sur configuration de plusieurs projets dans Visual Studio, je vous recommande vivement de les consulter d'abord. Nous avons ici un exemple très simple. J'ai un cours principal ici. Il met simplement en place quatre objets de jeu vidéo ici. Si nous examinons le cours de jeu vidéo ici, il ne se passe pas grand-chose. Il possède un champ privé et un constructeur et il hérite d'une classe principale basée sur le jeu ici Et il appelle le constructeur du jeu à partir d'ici. C'est très simple, rien que nous n'ayons vu auparavant. Si nous examinons la classe de base, elle comporte trois champs privés. Il a un constructeur, un exemple de méthode publique et quelques exemples de propriétés publiques ici Ici, il y a beaucoup de choses publiques qui se passent ici. Maintenant, le mot clé protégé s'applique également à des méthodes comme celle-ci et aux propriétés. Si un élément est marqué comme protégé, il n'est accessible qu'à la classe en cours, par exemple, jeu et à tout ce qui en découle, à tous ses enfants Pensez-y. Si vous êtes comme une mère de famille, vous ne souhaitez partager que des objets protégés avec vos enfants ou vos petits-enfants, par exemple. Alors pensez-y comme ça, c'est protégé en ce moment. Il s'agit d'une méthode publique. Ici. Tout ce qu'il fait, c'est obtenir le nom et joindre quelques chaînes et l'éditeur, pour le moment, est public. Nous pouvons donc y accéder de n'importe où. Nous pouvons y accéder depuis notre programme principal. Nous pouvons y accéder depuis un jeu vidéo, sans aucun problème. Ce que je vais faire, c'est le protéger, afin que vous puissiez voir qu'il y a le mot clé protégé. Maintenant je l'ai fait. Si j'instancie cette classe ici, jouez à partir de la classe principale Maintenant que la classe principale n'est pas un enfant de cette classe, elle ne le sera pas. Laissez-moi le faire, laissez-moi vous le prouver. Maintenant, vous pouvez voir ici que lorsque j' essaie d'accéder à la méthode, elle ne figure même pas du tout dans cette liste. Et regardez ce qui se passe si j'essaie quand même d'y accéder, en ignorant la saisie semi-automatique de Visual Studios Si je le survole, cela indique qu'il est inaccessible en raison de son niveau de protection Et c'est parce qu' il est protégé. Il n'est donc disponible qu'à partir de la classe actuelle ou des classes enfants de cette classe. Par exemple, le jeu vidéo est un cours réservé aux enfants parce que nous en héritons. Si nous disons simplement base par exemple, accédons à la classe de base qui est le jeu. Maintenant, nous pouvons voir cette méthode, elle est dans la liste, et lorsque nous essayons d'y accéder, il n' y a aucune erreur. C'est la puissance du mot clé protégé en C sharp. Mais il existe quelques combinaisons qui peuvent en fait être associées à la protection interne, et aussi à la protection privée, et aussi à la protection privée protection privée et à la protection interne. Voici quelques combinaisons que nous pouvons utiliser lorsqu'il s'agit du modificateur d'accès protégé. Nous pouvons donc essentiellement doubler les modificateurs d'accès, mais uniquement lorsque vous utilisez protected Vous pouvez voir ici que nous pouvons l'utiliser en trois combinaisons à lui tout seul, ce dont nous avons déjà parlé. Il est disponible dans la même classe. Les méthodes et les propriétés sont disponibles dans la même classe ou dans l'un de ses enfants. Nous en avons discuté ensuite, le privé protégé. Si un élément est marqué comme protégé ou privé, d' une méthode ou d'une propriété, il est alors accessible dans le même assemblage, mais également à partir de la même classe dérivée. Si notre cours de jeu ici concerne le même projet, le même assemblage que notre enfant, ce serait un jeu vidéo. Si elles existent dans le même projet, le même assemblage, nous pouvons utiliser ces méthodes. Cependant, si ce fichier de jeu se trouve dans un autre projet, nous ne pouvons pas accéder aux méthodes et aux propriétés de cette classe enfant qui est protégée par un système privé. Permettez-moi donc de vous en montrer un exemple. Je vais maintenant marquer Publisher. Il s'agit d'une boutique ici. Éditeur, je vais le commercialiser en tant que société privée protégée. Maintenant, si cette classe existe en dehors de l'assembly appelant, quel que soit l'endroit où nous voulons l'utiliser, elle ne fonctionnera pas. Jetons un coup d'œil à un exemple de ce fonctionnement. On peut dire éditeur. Nous pouvons y accéder, pas de problème. Si je dis simplement string something equals publisher, il n'y a aucun problème car nous pouvons y accéder. Maintenant, permettez-moi de déplacer ce cours ici. Classe publique, principale, en dehors de l'assemblée en cours. Si vous avez vu mon tutoriel sur plusieurs projets, vous saurez probablement comment procéder. Si nous arrivons ici sur le côté droit, nous obtenons notre classe de jeu. La classe des parents, je vais juste le glisser-déposer dans le deuxième projet que j'ai configuré. Le principe est que je n'en veux plus dans ce projet maintenant, je vais le supprimer. Maintenant, le jeu se joue dans un projet totalement différent ici. Maintenant, le jeu est dans un assemblage totalement différent ici. Nous pouvons revenir à notre cours de jeu vidéo ici, qui se trouve dans l'autre assemblée. Allez ici maintenant, vous pouvez voir qu'une erreur s'est produite. Il peut donc toujours trouver du jeu parce que nous référons aux autres projets, afin qu'il sache où il se trouve. Vous pouvez voir que nous en héritons. Cependant, une ligne rouge apparaît maintenant. Et si vous passez la souris dessus, cela indique que l'éditeur est inaccessible en raison de son niveau de protection C'est parce que nous en avons fait une protection privée. Si quelque chose est protégé en mode privé, il doit se trouver dans le même assemblage, donc dans le même projet. Et il doit s'agir d'un descendant de cette classe protégée en privé. Maintenant que nous comprenons le terme « privé protégé », le même assemblage et un enfant, il est très facile d'expliquer ce qu'est un élément interne protégé. Qu'il peut s'agir d'un n'importe quel descendant de la classe, mais qu'il peut se trouver dans n'importe quel autre assemblage. Peu importe où se trouve la classe de base, par exemple. Cela pourrait être dans le cadre d'un projet totalement différent. Mais tant qu'il est protégé en interne, nous devrions pouvoir y accéder. heure actuelle, cette erreur est due au niveau de protection, car le jeu vidéo et le jeu sont dans des assemblages différents. Je reviens au jeu, je crée maintenant cette propriété ici, protégée, interne ou interne protégée. Je l'ai donc configuré, je reviens au jeu vidéo, et maintenant vous pouvez voir que l' erreur a disparu. C'est donc la différence entre une protection privée et une protection interne. Cela signifie simplement que la classe de base doit être dans le même assemblage ou ne pas être dans le même assemblage. Ce sont donc les trois types de modificateurs d'accès lorsqu'il s'agit de protected, donc de la classe de base et de ses enfants. Ensuite, nous pouvons le doubler avec private ou internal selon que la classe de base se trouve dans le même assemblage ou dans un assemblage différent. Il s'agit donc du modificateur d'accès protégé de la boutique. 59. 12-2. Le mot-clé statique: Je vais maintenant parler du mot clé static. Vous l'avez peut-être vu si vous avez suivi nos autres tutoriels. Ce petit mot clé ici appelé statique, qu' est-ce que cela signifie ? À quoi ça sert ? Et pourquoi devrions-nous l'utiliser ? Jetons un coup d'œil à cet exemple ici. Je définis simplement quatre objets de jeu vidéo ici et j'appelle le constructeur avec trois paramètres Si je regarde le cours de jeu vidéo, il ne comporte que trois champs privés. Voici le constructeur qui définit les champs privés. J'ai juste un exemple de méthode ici qui renvoie le titre. Et juste un exemple de propriété qui l'éditeur de devenir très basique. Si j'ai un cours comme celui-ci, par exemple, comment pourrais-je comptabiliser le nombre de jeux vidéo que j'ai dans ma collection ? Ce n'est qu'un exemple de ce que je pourrais faire chaque fois que j'instancie le cours de jeu vidéo Je pourrais suivre un compteur. Ce compteur peut compter le nombre de jeux vidéo que je possède Dans ma collection, j' initialise un compteur à zéro. Chaque fois que je crée un jeu vidéo, je peux augmenter le compteur d'un Je pourrais faire quelque chose comme ça, par exemple. Cela fonctionnerait parfaitement bien. Mais ça n'a pas l'air très élégant, n'est-ce pas ? Non seulement cela, mais il ne suit pas vraiment très bien les principes de l'abstraction. Nous aimerions que ce compteur soit peut-être caché dans le cours de jeu vidéo, par exemple. Comment y parviendrions-nous ? Comment pourrions-nous faire cela si nous installions un compteur dans ce cours de jeu vidéo, par exemple ici. Ensuite, dans le constructeur de cette classe, j'incrémente le compteur d' Cependant, le problème est que ce compteur appartiendra à chaque instance. Donc, si je vais ici et que je pars du premier jeu, je peux accéder au compteur, mais il n'aura qu' une valeur de un car le compteur appartient à chaque instance distincte. Alors, comment puis-je avoir un compteur global, quelque chose dans ce jeu vidéo qui enregistre le nombre d'instances de cette classe que nous créons C'est là qu'intervient le mot clé static. Lorsque nous utilisons le mot-clé static, nous pouvons l'utiliser sur des constructeurs, nous pouvons l'utiliser sur des champs, nous pouvons l'utiliser sur des méthodes et nous pouvons même l'utiliser sur l'ensemble de la classe Par exemple, si je définis ce champ de compteur comme statique, il sera partagé entre toutes les instances créées à partir de cette classe. C'est un champ au niveau de la classe. Tout ce qui contient de la statique dans la classe appartiendra au niveau de la classe et non au niveau de l' instance comme ici. Par exemple. Jetons un coup d'œil à un exemple de cela. Chaque fois que je crée un nouveau jeu vidéo ici, je veux qu'il y ait un compteur incrémenté d'une unité dans mon constructeur qu'il y ait un compteur incrémenté d'une unité Cela permettra de comptabiliser le nombre de jeux vidéo de notre collection Par exemple, ce que je pourrais faire, je peux simplement créer une ligne d'exemple ici qui écrit la console le nombre de jeux vidéo nous avons dans notre collection. Chaque fois que je construis un nouvel objet de la classe de jeu vidéo, j'incrémente le compteur, qui est statique, il revient au niveau de la classe d'un à chaque Ensuite, j'affiche un message dans la fenêtre de la console qui indique simplement le nombre de jeux que j'ai dans ma collection lorsque j'exécute ce programme À chaque fois. Ceci est construit ici parce que nous créons une nouvelle instance, le compteur va s' incrémenter d'un à chaque fois Voyons cela. Maintenant, vous pouvez voir qu' il augmente d'une unité chaque fois ce compteur est partagé par toutes ces instances Ici, le fonctionnement du mot clé statique est assez intelligent. Ce que nous pouvons également faire, par exemple, c'est également avoir une méthode statique. Par exemple, je peux créer une méthode statique qui obtient le résultat de mon compteur. Jetons un coup d'œil à ça. Je vais plutôt supprimer cette ligne ici. Pour l'instant, je vais créer une méthode statique. Ce que fait cette méthode, elle renvoie simplement le compteur. Et c'est une méthode au niveau de la classe, ce qui signifie que nous y accédons à partir de la classe et non d'une instance. Jetons un coup d' œil à cela maintenant. Si je passe au programme principal ici, si je passe au premier jeu, par exemple, le jeu 1 est maintenant une instance. Cette méthode n' apparaîtra pas dans cette liste. Vous pouvez voir qu'il n'y a pas de méthode get counter ici. C'est parce que c'est un niveau de classe. Dans ce cas, je devrais taper le nom de la classe. Ensuite, une fois que j'ai mis un point après le nom de la classe, voici tous les membres de la classe ici. Vous pouvez donc voir ici cette méthode appelée get counter. Il s'agit d'un niveau de classe, pas d'un niveau d'instance. Et maintenant, nous pouvons obtenir le nombre de jeux vidéo de notre collection, comme ça. Si nous voulons l'afficher sur la console, nous pouvons simplement copier cette méthode ici, mettre ici, puis supprimer le point-virgule. Je vais maintenant lancer l'application. Vous pouvez voir que nous avons un résultat similaire. Il s'agit juste d'obtenir le total général du nombre de jeux vidéo de ma collection. Et j'apprécie d'avoir mal orthographié collection, mais personne n'est parfait C'est un exemple de méthode statique et également de champ statique dans C Sharp. Peut-être que ce mot clé statique que nous avons vu dans tous nos didacticiels jusqu'à présent commence à avoir du sens. Maintenant, notre classe principale ici s'appelle programme. Par défaut, il existe une méthode appelée main qui est statique. Cette méthode principale est une méthode au niveau de la classe. Par défaut, c'est la première méthode exécutée lors de l'exécution du programme. Si je crée une nouvelle méthode ici, par exemple, je viens de créer une méthode comme celle-ci. J'essaie d'appeler cette méthode depuis main. Il s'agit d'une méthode statique. Il ne s'agit pas d'une méthode statique. Regardez ce qui se passe. Vous pouvez donc voir qu'il y a une ligne rouge ici. Si je survole cela, cela indique que la référence à l'objet est requise pour le test du champ non statique ou du programme de propriétés C'est parce que nous appelons une méthode non statique à partir d'une méthode statique qui n'est pas autorisée. Si quelque chose n'est pas statique , il s'agit d'une méthode au niveau de l'instance. Parce que nous sommes dans une méthode statique. Ici, il n'y a aucune instance sur laquelle opérer, nous n'avons pas créé d'instance, nous ne sommes pas dans une méthode d'instance. Cela n'a rien à voir avec les instances qui se passent ici. Nous sommes dans une méthode statique, mais nous essayons d'appeler une méthode au niveau de l'instance. Ça ne marchera pas. Dans de tels cas, vous devrez créer une instance. Ce n'est qu'un exemple. Quoi qu'il en soit, je ne vous recommanderais pas de créer une instance de la classe de programme, mais cela ne fait que faciliter mon explication ici. Une fois que j'ai placé l'instance avant cette méthode au niveau de l'instance, vous pouvez voir que l'erreur a été résolue car tout ce qui n'est pas statique doit appartenir à une instance, c'est un niveau d'instance. Ce que nous pourrions également faire à la place c'est simplement simuler cette méthode comme statique. De cette façon, nous appelons un test de méthode statique à partir d'une autre méthode statique, c'est parfaitement bien. Une autre chose que nous pouvons faire avec le mot clé static est de marquer une classe entière comme statique. Ce que nous faisons, nous prenons le mot-clé static et le plaçons à côté de la définition de classe juste en haut ici. Lorsque vous faites cela, tout ce qui se trouve dans la classe doit également être statique. Parce que si vous définissez cela au niveau de la classe, cela implique que tout ce qui s'y trouve doit être statique. C'est pourquoi toutes ces erreurs apparaissent ici. Mais la principale chose importante à propos du marquage statique d'une classe est que nous ne pouvons pas créer d'instances de classes statiques. Ils sont abstraits et scellés implicitement. Si vous vous souvenez d'une classe abstraite, vous ne pouvez pas en créer une instance. Et si vous vous souvenez d'une classe scellée, vous ne pouvez pas en hériter C'est donc implicite, c'est pourquoi nous avons toutes ces erreurs ici lors de la création d'une nouvelle instance, nous ne pouvons donc plus le faire. Voyons comment transformer cette classe en une classe purement statique. Attachez-le et attachez-le. Allons-y Tous ces champs privés doivent être statiques. Maintenant, notre constructeur est dans une classe statique, il doit être statique Mais les constructeurs statiques ne peuvent pas avoir de modificateurs d'accès. Nous ne pouvons pas y avoir de public. De plus, il ne peut pas avoir de paramètres. Supprimons également ces deux éléments. Ce mot clé n'est pas pertinent car il ne concerne que les instances qui doivent également disparaître. Maintenant, toutes nos méthodes et propriétés doivent également être statiques, et cela devrait suffire. Voici un exemple de classe statique. Maintenant, vous vous demandez peut-être, eh bien, si je ne peux pas instancier cette classe, comment s'appelle ce constructeur, par exemple, que se passe-t-il Eh bien, par défaut, lorsque vous exécutez l'application et accédez à cette classe, ce constructeur est exécuté une fois par l' environnement d'exécution Cela sera exécuté automatiquement une fois. Tout ce qui se trouve dans le constructeur, le constructeur statique doit initialiser toutes les variables ou tout ce que vous voulez faire C'est le but d' un constructeur statique dans une classe statique Maintenant, si nous revenons à notre fichier principal ici, vous pouvez voir que nous ne pouvons pas créer d' instances de la classe statique. Nous ne pouvons accéder aux choses qu'au niveau de la classe. Maintenant, j'ai tout marqué comme statique, les propriétés, les méthodes, c'est ainsi nous nous référons à peu près à la classe. Nous avons mis le nom de la classe comme précédemment, puis un point. Ensuite, nous pouvons accéder à diverses choses ici. Et maintenant, comme il n'y a aucune instance pour cette classe, tous ces membres n'existeront une seule fois, car c'est le but de la statique. Nous pouvons définir un éditeur et y accéder. De plus, nous pouvons compter notre nombre de jeux vidéo comme nous le faisions auparavant. Ce n'est pas un problème. Juste pour prouver que le constructeur n'est exécuté qu'une seule fois, consultez cette méthode ici où j'obtiens le compteur du nombre de jeux vidéo que j'ai Je vais juste dupliquer cette méthode, elle sera donc appelée deux fois. Je vais mettre deux points d'arrêt ici. Le code s'arrête lorsque cette ligne est atteinte , puis va entrer dans le constructeur et y placer un point de rupture Je vais maintenant lancer l'application, afin que vous puissiez voir ce qui se passe. Maintenant, le constructeur n'a pas exécuté, mais la rupture se trouve sur cette ligne ici Jeu vidéo Dot Get Counter. Si je passe dessus, vous pouvez voir que le constructeur ici est appelé Si je passe dessus, on obtient le compteur, on passe à la ligne suivante. Si je passe par-dessus, vous verrez que rien ne se passera. Le constructeur n'est appelé qu'une seule fois sur cette première ligne ici, et il est ignoré lors des appels suivants à toutes les méthodes existant au niveau de la classe J'espère que cela avait du sens. C'est beaucoup à assimiler, mais c'est le but des mots clés statiques de mettre à peu près tout ce que vous voulez au niveau de la classe. Dans ce cas, le concept d'instances est pratiquement ignoré à cet égard. Je vous ai donné un exemple de la façon dont les constructeurs statiques fonctionnent également Le constructeur est appelé automatiquement dès que vous touchez une méthode ou un membre, puis il est ignoré pour les appels suivants Après cela, j'espère que cela vous aidera. C'est le pouvoir du mot clé statique dans la boutique. 60. 13-1. Le mot-clé en lecture seule: Dans ce didacticiel, nous allons examiner le mot clé en lecture seule dans C Sharp. Maintenant, à quoi sert le mot clé en lecture seule ? Eh bien, le mot clé en lecture seule est ce que l'on appelle un type de données immuable. Qu'est-ce que cela signifie ? Cela signifie qu'une fois qu'une valeur est définie dans une variable ou un champ, par exemple, vous ne pouvez pas modifier cette valeur une fois qu'elle a été définie. Qu'est-ce que tout cela signifie et quelles sont les autres conditions impliquées dans ce processus ? Jetons un coup d' œil à un petit exemple. Ici, j'ai une classe appelée Dog Dog qui a un constructeur qui prend un argument appelé breed, qui est la race du chien Comme un terrier ou un chihuahua par exemple. J'ai deux champs privés ici, la race, et un autre qui représente juste un identifiant unique pour chaque chien que nous construisons. Et puis j'ai une propriété publique qui obtient et définit la race du chien en fonction des connaissances que nous avons acquises jusqu'à présent. Si nous voulons que les utilisateurs puissent dire, obtenir la valeur de la race, mais pas définir la valeur, nous voulons la rendre en lecture seule. Si nous avons une propriété comme celle-ci, par exemple, qui expose ce champ privé ici, nous supprimerions simplement cette clause set ici Lorsque nous essayons de mettre des informations dans la race, ce ne sont pas des lettres. Donc, si je fais de l'élevage de chiens et que j'essaie ensuite de leur donner une valeur, peu importe ce que nous mettons ici. Nous avons une erreur. Si nous y réfléchissons, cela indique qu'il ne peut pas être attribué à, il est en lecture seule C'est un exemple de la façon de créer, disons, une propriété lue uniquement en C Sharp. Mais attendez. Au début du didacticiel, vous avez parlé de champs variables et d' autres choses de ce genre. Comment puis-je le faire en utilisant le mot clé en lecture seule ? Eh bien, jetons un coup d'œil. Revenons au cours sur les chiens. Maintenant, je vais utiliser le mot clé en lecture seule. Je vais annuler ces modifications et remettre cette clause définie ici. Nous sommes donc en train de définir la valeur, mais maintenant je vais marquer ce champ comme lu. Ce n'est qu'une fois que je l'ai fait que vous pouvez voir qu'une erreur s'est produite ici. Cela ne me permet plus d'utiliser la clause set. Si je passe dessus, cela indique qu'un champ en lecture seule ne peut pas être attribué, alors il y a une petite condition ici, sauf que dans un constructeur, nous pouvons l'attribuer dans un constructeur comme ici et sauf qu'il ne s'agit que d' un setter du type dans lequel le champ est défini ou d'un initialiseur cela indique qu'un champ en lecture seule ne peut pas être attribué, alors il y a une petite condition ici, sauf que dans un constructeur, nous pouvons l'attribuer dans un constructeur comme ici et sauf qu'il ne s'agit que d' un ici et sauf qu'il ne setter du type dans lequel le champ est défini ou Qu'est-ce que tout cela signifie ? Cela signifie essentiellement que lorsque vous utilisez le mot clé en lecture seule, vous ne pouvez le définir qu'une seule fois. Par exemple, nous pourrions le définir ici et l'initialiser ici Disons simplement que chaque nouveau chien est un chihuahua, par exemple. Ce n'est pas du tout un problème. En fait, nous le définissons, mais nous le faisons lorsque nous le déclarons. Nous déclarons la variable ici, mais nous l'initialisons également pour ce qui est autorisé L'autre chose que nous pouvons également faire est de le placer dans un constructeur comme inside dog Et nous pouvons le faire plusieurs fois. Tant que c'est dans un constructeur, ça va. Nous pouvons le faire 1 000 fois si nous le voulons, mais nous ne pouvons pas définir cela dans, par exemple, cette propriété ici. Nous ne pouvons pas dire, par exemple, créer une toute nouvelle méthode et la définir ici. Ça ne va pas marcher. Vous voyez le point ici. Même si nous y accédons en dehors de notre classe, je le mets en minuscules. Maintenant, pour accéder au champ, vous pouvez voir qu'il ne peut pas être attribué à l'acceptation d'un constructeur C'est donc la puissance du mot clé en lecture seule. Et il y a plusieurs raisons pour lesquelles vous voudrez peut-être les utiliser lorsque vous travaillez avec des types de données immuables tels que le mot clé en lecture seule Vous voulez les utiliser pour des choses que vous voudrez peut-être configurer une fois, mais vous ne voudriez jamais en modifier la valeur. En effet, par exemple, si je génère un identifiant de chien unique, par exemple, je ne le fais qu'une seule fois, mais je ne veux pas que cet identifiant change car chaque chien possède un identifiant unique qui lui est associé. Si je commence à modifier les identifiants des chiens, alors par exemple, si nous avons un logiciel qui permet de suivre les chiens, vous connaissez les chiens qui portent le collier. Et si le chien se perd, il pourra scanner le collier ou la puce électronique Ensuite, il utilise l'identifiant qui en résulte pour référencer peut-être une base de données et découvrir qui est le propriétaire du chien. Peut-être que si vous ne le faites pas uniquement en lecture, nous aurons peut-être une propriété ou quelqu'un appelant cette application pourrait accidentellement modifier l'identifiant, ce qui pourrait être désastreux. C'est pourquoi les types de données immuables sont généralement utilisés. Nous voulons empêcher les autres développeurs, voire les utilisateurs du logiciel, de modifier ces valeurs. Mais pour quelque chose comme un identifiant, dans le cadre duquel nous générons un identifiant unique pour chaque chien de notre système, il est très important que les champs comme ceux-ci soient en lecture seule. Ce que vous voulez faire dépend donc entièrement de votre système . Mais c'est vraiment une bonne pratique de dire que si vous avez des variables ou des champs que vous ne souhaitez pas que les utilisateurs modifient, veillez à soient toujours en lecture seule, par exemple. C'est donc une façon de résoudre ce problème. Une autre condition concerne le mot clé en lecture seule, par exemple, il ne peut être utilisé que sur des champs. Maintenant, n'oubliez pas que les champs sont définis dans les classes, juste en dessous de la déclaration de classe. Si je vais dans mon programme principal A ici et que je l'utilise dans une méthode. Si je le définis dans une méthode, en supprimant évidemment le privé, vous pouvez voir qu'il y a un problème. Si je le survole, cela indique que le modificateur en lecture seule n'est pas valide pour cet article Cela signifie essentiellement, d'accord, vous ne pouvez pas utiliser le mot clé read uniquement dans une méthode, mais nous pouvons l'utiliser au niveau de la classe. Par exemple, nous pouvons l'utiliser ici et cela ne pose aucun problème. Cela fonctionnera très bien. Mais nous ne pouvons pas utiliser ces méthodes internes. Il existe un autre mot-clé que nous pourrions peut-être utiliser pour cela, et c'est le mot-clé constant dont nous parlerons également. La dernière chose dont je veux parler avec la lecture seule est de savoir quand nous pouvons définir la valeur. Nous pouvons définir la valeur au moment de la compilation, ce qui signifie que nous pouvons lui donner une valeur dans notre mode de développement lorsque le logiciel compile, c'est à ce moment-là que la vérification est effectuée Je peux donner une valeur au rouge, ici, je peux dire Chihuahua et il n'y a C'est au moment de la compilation. Encore une fois, dans le constructeur, nous définissons cette valeur Cependant, nous pouvons également modifier la valeur au moment de l'exécution lorsque le logiciel est exécuté. Cependant, nous pouvons également initialiser un champ en lecture seule pendant exécution lorsque notre logiciel est réellement en cours d'exécution Lorsque nous construisons cet objet chien ici, le constructeur est appelé puis cette ligne de code est exécutée Et cela se produit pendant exécution lorsque notre logiciel est en cours d'exécution. Si je lance le logiciel, vous pouvez voir qu'il définit cette valeur dans le constructeur Il n'y a aucune erreur et ce n'est pas un problème. Nous pouvons définir un champ en lecture seule au moment de la compilation et au moment de l'exécution, à deux endroits différents. Mais c'est le mot clé en lecture seule dans C Sharp et c'est pourquoi vous devriez l'utiliser et comment vous pouvez l'utiliser. 61. 13-2. Le mot-clé: Je vais parler du mot-clé constant en C sharp. Ça ressemble à ça. Qu'est-ce que c'est ? Eh bien, le mot-clé constant est un autre type de données immuable Si vous avez regardé mon tutoriel sur le mot clé en lecture seule, il sera beaucoup plus facile de comprendre le mot clé constant . Dans ce didacticiel, je vais expliquer le mot clé constant, mais aussi démontrer les différences entre constant et lecture seule, car beaucoup de gens se demandent lesquels utiliser et quand. Jetons un coup d'œil au mot-clé constant. Maintenant, je vais utiliser l'exemple précédent. Cela permettra de mieux illustrer la différence. Voici donc mon cours de chien pour tous ceux qui n'ont pas regardé le dernier tutoriel. J'ai deux champs ici, un constructeur qui les configure et une propriété juste ici qui obtient simplement la valeur de la race C'est donc un simple cours pour chiens. Ce que je vais faire, c'est modifier ce champ privé ici, qui est actuellement en lecture seule, et le transformer en constante. Ensuite, je vais démontrer le comportement et les différences dans ce cas. Rappelez-vous donc qu'avec un champ en lecture seule ici, nous pouvons réellement définir la valeur à partir d'un constructeur et nous pouvons également l'initialiser Permettez-moi de transformer cela en une constante maintenant. Vous pouvez maintenant voir qu'une erreur est apparue. Si je survole l' erreur ici, cela signifie qu'un type Guid ne peut pas être déclaré en tant que constante Certains types de données ne peuvent pas être constants. C'est un petit problème. OK, faisons de notre identifiant un entier. Au lieu de cela, nous aurons un système qui génère un entier unique pour chaque chien unique. OK, pas de problème. Nous utiliserons un autre type de données. Maintenant, il y a un autre problème. Si je passe la souris dessus , vous pouvez voir qu'un champ constant nécessite la fourniture d'une valeur En gros, cela signifie que lorsque vous déclarez une constante comme nous le faisons ici, vous devez l'initialiser, vous devez lui donner une valeur sur une seule ligne ici Sinon, ce n'est pas possible. Lorsque nous déclarons une constante, nous devons lui donner une valeur. Disons simplement 456, par exemple. Maintenant, il y a un autre problème ici. Si je m'y attarde, vous pouvez voir que le message d'erreur n'est pas très clair Mais en gros, une fois que vous avez déclaré une constante et que vous y avez initialisé une valeur, vous ne pouvez plus modifier ce champ ou cette variable depuis n'importe quel autre endroit. Pas dans un constructeur. Vous ne pouvez pas le modifier à partir d'une propriété. Vous ne pouvez pas modifier cette valeur depuis l' extérieur de la classe. Une fois qu'une constante a été définie et initialisée, ce que vous devez faire tous les deux sur une seule ligne, vous ne pouvez pas modifier cette valeur Imaginez donc que le mot clé constant ressemble davantage à une lecture seule plus puissante avec beaucoup plus de limitations en termes de modification de vos données. C'est une vraie différence ici pour quelque chose comme la génération d'un identifiant unique pour un chien, lu uniquement comme bon mot clé pour cela, car nous pouvons l'initialiser depuis le constructeur Cependant, générer un identifiant unique pour un chien avec un mot clé constant serait une très mauvaise façon de gérer cette situation, serait une très mauvaise façon de gérer car const ne serait pas un bon moyen de le représenter Vous vous demandez peut-être, à quoi puis-je utiliser const ? Quel est un bon exemple d' utilisation de ce mot clé constant ? Cela semble assez limitatif et il semble que je ne puisse pas vraiment en faire grand-chose. Supposons, par exemple, que nous travaillions avec moi. Quand je parle de tarte, je ne parle pas d'une tarte aux pommes. Je veux dire pie R squared 3,1 419. Je pense que Pie est accessible dans la classe de mathématiques statiques. Nous avons déjà examiné la classe de mathématiques statiques lorsque nous travaillions avec des nombres. Et il y a plein de choses que tu peux faire ici. Mais vous pouvez voir qu' il y en a une qui s'appelle Pie. Si je passe la souris dessus, vous pouvez voir que pie est une constante, 3,1 4159 J'étais proche, j'étais proche. La tarte est une constante. Et c'est parce que la tarte ne change pas. Pie vaut toujours 3,14 159265. C'est juste cette valeur. Il n'y a aucune raison pour que je puisse imaginer où nous voudrions modifier la valeur de pi, car pi est ce qu'il est. Pi est pi. C'est la relation entre le rayon et la circonférence. Maintenant, je ne suis pas mathématicien, mais j'espère avoir fait comprendre que vous n' aurez jamais besoin de modifier pi parce que c'est une valeur définie C'est un très bon exemple d'utilisation d'une constante. Dans ce cas, pi est constant. Vous ne modifiez pas pi. C'est ce que c'est. Et lorsque vous essayez, vous pouvez voir qu'il y a un problème ici. Pi est donc un très bon exemple d' utilisation d'une constante, car cette valeur, une fois définie, n' est jamais modifiée et il y en a beaucoup. Regarde, il y a une épingle et une serviette. Je n'ai jamais entendu parler de serviette, mais oh, c'est lié à l'éclat. OK. Ici, un lointain souvenir d'une toute première leçon de mathématiques. Vous pouvez donc voir que c'est l' intérêt d'utiliser une constante. C'est là que vous ne voudriez jamais modifier la valeur. Et une fois défini, il est désormais défini comme constant Vous le définissez au moment de la compilation, pas au moment de l'exécution. Lorsque votre application fonctionne en mode constant, les variables ou les champs ont besoin de valeurs. Vous pouvez supprimer la valeur, exécuter l'application et attribuer pendant que le logiciel est en cours d'exécution. Cela ne se produit qu' au moment de la compilation. Autre chose avec la constante, contrairement à la lecture seule, vous l'utilisez sur les champs privés des classes, comme nous l'avons expliqué précédemment. Cependant, avec Constant, nous pouvons les utiliser comme champs privés de la classe, mais nous pouvons également les utiliser dans des méthodes. Par exemple, je peux simplement déclarer une variable ici, je l'appelle ID, je lui donne la valeur, puis je peux l' utiliser dans le reste de ma méthode ici. Je pourrais aussi le passer à une autre méthode, ce n'est pas un problème. Variables constantes, vous pouvez définir, déclarer et initialiser, puis les transmettre à des méthodes, ce n'est pas du tout un problème Cependant, si cela était en lecture seule comme nous l'avons montré précédemment, ce n'est pas possible car la lecture seule est limitée aux champs privés. Une autre chose que je vais mentionner à propos du mot clé constant est qu'il est implicitement statique par défaut En gros, cela signifie qu'il est statique par défaut. Si vous regardez mon précédent tutoriel où nous avons parlé du mot clé static, vous vous souviendrez que static est un niveau de classe C'est ici que nous créons une nouvelle instance de chien. Ensuite, en utilisant l'instance que nous avons créée, nous pouvons accéder au niveau de l'instance, champs, aux méthodes et aux propriétés. Mais lorsque nous accédons à des éléments au niveau de la classe, nous utilisons le nom de la classe, puis nous accédons à tout au niveau de la classe. Au niveau de la classe, les choses sont statiques, tout comme la constante ici. Ce que je vais faire, c'est rendre public cet identifiant constant. Cela signifie que nous pouvons y accéder en dehors de la classe. Je rentre dehors , je mets un point. Vous pouvez maintenant voir que l'identifiant est ici. Cela est dû au fait que les champs marqués comme constants sont implicitement statiques, statiques Si j'utilise DG l'instance au niveau de l'instance, vous voyez que l'ID n'est pas là. Il n'est pas du tout ici. Mais au niveau de la classe, c'est ici que ça vit. Cela est dû au fait que tout ce qui est défini comme une constante est implicitement statique Il est disponible au niveau de la classe. Vous pouvez voir que ce n'est pas du tout statique, c'est juste constant. C'est parce que cela a une valeur et ne serait pas définie. Nous ne pouvons pas le modifier. Pourquoi voudrions-nous que chaque instance ait une zone en mémoire où cet identifiant est défini ? Cela n'a pas vraiment de sens. Si vous avez 1 000 chiens dans votre système, une partie de votre mémoire devra être disponible pour ajouter cet identifiant constant pour chaque chien dans votre logiciel. Maintenant, cela n'a aucun sens, car une fois que c'est réglé, c'est réglé, c'est tout. Il est donc vraiment logique de le mettre à disposition de la classe. Donc, si nous avons 1 000 instances de chiens dans notre système, nous n'avons pas 1 000 copies d' une variable qui ne peut pas être modifiée. C'est donc la raison de cela et cela a du sens quand on y pense de cette façon. C'est vraiment un problème avec les champs constants, c'est qu'ils se situent au niveau de la classe J'espère que dans ce didacticiel, j'ai mis en évidence ce que fait le mot clé constant, ce qu'il signifie et, plus important encore, la différence entre les constantes et la lecture seule en C sharp. 62. 14-1. Mémoire de pile et de tas: Lorsque vous développez des applications avec C Sharp et Visual Studio, vous créez des éléments tels que des variables telles que des entiers, boolènes, peut-être des instances de classes, objets, de tableaux, etc. Il est important de comprendre ce qui se passe avec ceux qui se trouvent dans la mémoire de l'ordinateur. Et si je te disais ça ? En fonction du type de données que vous avez choisi pour vos variables, vous déterminez où et comment celles-ci sont stockées en mémoire. Qu'est-ce que je veux dire par là ? Si vous utilisez une variable entière, une variable bolen ou un double par exemple, elles sont stockées et accessibles manière très différente selon les types de données Et quand je parle de différents types de données, je veux dire des choses comme des chaînes, des tableaux et des objets personnalisés Mais pourquoi est-ce important ? Eh bien, il y a plusieurs raisons pour lesquelles vous voudrez peut-être en savoir plus sur la mémoire en pile et en tas Premièrement, pour ce qui est des performances, votre application peut s'exécuter et fonctionner beaucoup plus rapidement lorsque vous comprenez ces concepts. Mais ce n'est pas tout, mais que si je vous disais que, par exemple, si vous transmettez un objet à une méthode, vous risquez de perdre des données ou de remplacer des données existantes Qu'en penserais-tu ? Voici deux des nombreuses raisons d'en apprendre davantage sur la mémoire en pile et en tas, et c'est l'objectif de ce didacticiel pour le moment Par expérience, et croyez-moi, votre développeur moyen n' aura pas beaucoup de connaissances sur ce qui se passe en mémoire avec ces variables. Cependant, le simple fait d'avoir un tout petit peu de connaissances ce sujet vous permettra de vous démarquer des autres. Parlons donc un instant de la mémoire de pile. L'architecture de la mémoire en pile ressemble un peu à une pile de pizzas ou quelque chose comme ça. Vous continuez à ajouter des pizzas à la pile, les unes sur les autres, puis vous les retirez de manière séquentielle Ainsi, vous ne pouvez pas accéder à la première pizza en premier, puis à la suivante, par exemple, à des pizzas commandées au hasard. Il doit être ajouté à la pile. Il est donc ajouté à la pile de pizzas ou retiré par le haut. Voici donc comment fonctionne la mémoire en pile. C'est séquentiel, donc vous ajoutez objets en haut et vous en retirez par le haut, nous gardons les objets de courte durée sur la pile Maintenant, qu'est-ce qu'un objet de courte durée de vie ? Eh bien, on les appelle généralement types de valeurs. Des choses comme les entiers, Boo penche des caractères, des flottants , des doubles, des choses simples et rapides considérées comme peu choses simples et rapides considérées comme types de données simples comme ceux-ci, pas des objets tels que des objets complexes. Et lorsque nous stockons des éléments dans la mémoire de pile, ils sont récupérés rapidement. Il s'agit d'une zone de mémoire très rapide, du simple fait de son architecture séquentielle. Maintenant, la zone de mémoire en tas est très différente. Imaginez cette pile de pizzas, mais au lieu d'une belle pile organisée, jetez-les toutes par terre, façon à ce qu'il y ait des pizzas partout dans la mémoire. Il n' y aura pas d'ordre des articles dans la mémoire en soi Cependant, en raison de la disposition naturelle des éléments de la mémoire en tas, la récupération est plus lente car le processus d' accès aux données est plus compliqué Par conséquent, elle est considérée comme plus lente que la mémoire en pile. En général, vous conservez des objets à longue durée sur le tas, c'est-à-dire des objets complexes, mais aussi des objets qui seront disposition pendant une longue période, de vie sur le tas, c'est-à-dire des objets complexes, mais aussi des objets qui seront mis à disposition pendant une longue période, pendant une longue période d' exécution de votre application, alors que les éléments de la pile considérés comme éphémères Peut-être un calcul rapide comme quatre plus quatre, par exemple, quels types de données et d'éléments sont stockés dans la zone de mémoire ? Ce sont des choses comme des objets, des cours. Lorsque nous instancions une classe, les chaînes, les chaînes peuvent être d'énormes éléments, des tableaux, tout ce qui est global, disponible dans le monde entier dans l'ensemble de votre application Par exemple, même si un entier simple est considéré comme un type de valeur. Cependant, si vous l'avez rendu global comme statique ou quelque chose comme ça, et qu'il est mis à la disposition de toutes les classes du système, alors c'est là que les règles changent. Cela serait stocké dans la zone de mémoire parce qu'il doit être disponible pour les éléments du tas plus longtemps et donc avoir une longue durée de Des éléments tels que les chaînes, les classes, comme tous les types de référence, sont considérés comme des types de référence, c'est le mot clé. Vous entendrez peut-être beaucoup de choses à l' avenir lorsque vous créerez un nouveau type de référence qui sera stocké dans la zone de mémoire Ce qui se passe également, c'est que ce que on appelle un pointeur est créé sur la pile. Le pointeur sur la pile pointe donc vers une zone de la mémoire où se trouvent les données de votre objet. Lorsque vous créez un type de référence tel qu'un tableau, par exemple, un pointeur est ajouté à la pile et l'essentiel de l' opération est ajouté au tas L'information sur la pile indique à peu près : d' accord, vous pouvez la trouver ici même à cet emplacement de mémoire sur le tas C'est la seule chose qui est ajoutée à la pile lorsque vous créez un type de référence, comme quelque chose de compliqué, comme un tableau, par exemple. C'est de là que vient le type de référence du nom , car nous faisons référence à la pile où se trouve le scanner de données C'est pourquoi des éléments tels que les entiers, les boulen, les shahs et types simples sont appelés types de valeur car la valeur est directement stockée dans la zone de pile de la Maintenant, je sais que c'est beaucoup de choses à comprendre et à assimiler, mais ne vous inquiétez pas de comprendre tout ce que j'ai décrit dans ce didacticiel. Le principal point à retenir est de savoir et de comprendre que certains types de données sont stockés dans la zone de pile de la mémoire Et la zone de stockage de la mémoire possède ses propres caractéristiques et avantages, et d'autres types de données sont stockés sur le tas, encore une fois, avec leurs propres caractéristiques et d'autres choses du genre Dans les prochains didacticiels, je vais utiliser quelques exemples afin que vous puissiez mieux comprendre cela. Ne vous inquiétez donc pas de tout comprendre pour le moment, mais pour l'instant, je vais parler de ce que l'on appelle un stack overflow Vous avez peut-être entendu parler du site Web Stack Overflow, ou peut-être avez-vous déjà entendu le terme Peu importe que vous en ayez entendu parler ou non, mais ce que nous allons faire, c'est provoquer intentionnellement un débordement de pile dans C Sharp Et je pense que ce sera un exemple assez amusant à simuler, car je peux vous montrer que taille de la mémoire de pile est limitée. Et c'est pourquoi de gros objets compliqués sont stockés sur le tas Essayons donc de déborder la zone de mémoire de la pile. Maintenant, avec un exemple rapide. Je suis ici dans Visual Studio. Maintenant, j'ai une application très simple de la méthode principale. Nous appelons ici une méthode de débordement. Et la méthode overflow consiste simplement écrire bonjour dans la fenêtre de la console. Il ne se passe donc pas grand-chose ici. Désormais, un moyen simple de provoquer un débordement de pile consiste à faire appel à une méthode elle-même. Vous vous posez peut-être la question suivante : comment cela provoque-t-il un débordement de pile Je ne définis aucun entier, aucun booléen, quoi que ce soit de ce genre Qu'est-ce qui fait réellement déborder la pile ? Eh bien, lorsque vous appelez une méthode, la référence de méthode est également ajoutée à la pile. Il s'agit d'un autre exemple de mémoire en pile. Nous pouvons donc également obtenir un débordement de pile comme celui-ci. De même, nous pouvons créer quelques millions de variables, les entiers, peut-être que cela fonctionnerait aussi. Il existe peut-être de nombreuses façons d'y parvenir, mais voici un exemple rapide d' une méthode très simple. Je vais donc lancer l'application maintenant et nous allons voir ce qui se passe. Je lance l'application, elle plante quasiment. Dans Visual Studio, il est indiqué qu'il s'agit d'une exception Stack Overflow. Quand je regarde la fenêtre de console ici, vous pouvez voir qu'il est indiqué que le débordement de pile s'est répété 24 109 fois avant que la pile soit complètement pleine et qu'elle Si nous examinons ce schéma ici, vous pouvez voir comment la mémoire en pile et en tas augmente, mais la mémoire de la pile est limitée Le but de la mémoire de pile est de stocker des valeurs réelles pour des types de données tels que les entiers Il en stockera en fait, par exemple, 15 sur la pile, plutôt que si nous avons un gros type de référence, comme un tableau, cela soit stocké sur le tas car ils peuvent devenir très, très grands Cependant, compte tenu de la surface de stockage, elle est limitée. C'est limité. Vous ne pouvez mettre qu'une quantité limitée d'informations ici. Et comme vous pouvez le voir ici, nous pouvons enregistrer une référence à notre appel de méthode 24 109 fois C'est donc à quel point c'est limité et c'est pourquoi tout n'est pas stocké sur la pile. Oui, la pile est rapide, mais son espace est limité. Le tas est plus lent, mais il est beaucoup plus gros Vous voyez donc les avantages et les inconvénients de chacun, et c'est pourquoi les deux existent et pourquoi il est important de comprendre les deux. Je voudrais donc parler d'une dernière chose, à savoir la pile d'appels. Qu'est-ce que la pile d'appels ? Si je reviens dans Visual Studio ici et que je fais défiler la page vers le bas, vous verrez qu'il y a une petite fenêtre appelée stack. Si vous ne voyez pas cette fenêtre, montez en haut, allez sur bug, puis sur Windows, puis sur Call Stack. Et cela devrait apparaître en bas à droite. Ce que fait la pile d'appels, elle vous donne une représentation visuelle de vos appels de méthode, par exemple. Vous pouvez donc voir ici que nous avons commencé par la méthode principale. Ici, nous avons appelé overflow, et nous l'avons répété 24 106 fois avant de finalement aboutir à un Cela vous donne une belle représentation visuelle de vos appels de méthode. Et vous pouvez voir que l'architecture ici ressemble à peu près à l'exemple de pizza dont je parlais tout à l'heure, le premier appel étant la pizza du bas. Et ceux-ci sont ajoutés lentement à la pile. Mais si je parle de la pile d'appels en ce moment, c'est parce que, développeurs débutants, puis-je me tromper un peu entre mémoire de pile et la pile d'appels ? La pile d'appels vous donne une belle représentation visuelle de vos appels de méthode. Mais ce n'est pas de la mémoire empilée. Ce n'est pas ce que l'on voit dans la pile de mémoire. La pile d'appels ne vous montre pas vos variables, vos assignations et autres choses de ce genre. Cela ne vous donne comme les appels de méthode que lorsqu'ils sont vaguement liés, la pile d'appels n'est pas une pile de mémoire Je peux maintenant illustrer cela avec un meilleur exemple de pile d'appels. Regardez cet exemple ici. C'est très simple. La méthode principale appelle ici la première méthode. La première méthode appelle la méthode 22, appel 33 appelle la quatrième. Enfin, dans quatre, nous disons simplement bonjour à la fenêtre de la console. C'est très simple, mais cet exemple vous montrera comment fonctionne la pile d'appels et comment ces références de méthodes sont ajoutées à la mémoire de la pile. En gros, l'architecture stack, l'architecture pizza. Regardons un exemple. heure actuelle, j'ai ajouté un point de rupture ici sur la toute première ligne. Nous allons donc passer en mode pause dès que cela sera atteint. Je vais donc compiler et exécuter l'application maintenant, maintenant nous sommes en mode pause. Si j' ouvre simplement cette fenêtre avec la pile d'appels, vous pouvez voir qu'un élément principal a été ajouté à la pile d'appels. Je vais maintenant entrer dans le vif du sujet en appuyant sur 11 sur le clavier. Maintenant, vous pouvez voir que je suis dans la première méthode. Cela a maintenant été ajouté à la pile d'appels ici. C'est notre première pizza. C'est notre deuxième pizza. Maintenant, je vais appuyer à nouveau sur F 11. Maintenant, nous avons notre troisième pizza sur le dessus. Je vais m'y attarder à nouveau. Nous avons notre quatrième pizza. Vous pouvez voir comment cela fonctionne. La pile d'appels vous donne donc une belle représentation visuelle de l'endroit où vous vous trouvez dans votre application lors d'une session de débogage Il est également semi-interactif. Vous pouvez double-cliquer dessus et vous pouvez voir où vous vous trouvez, d' où cette méthode a été appelée, ce qui est très utile lorsque vous avez plusieurs fichiers, solutions, projets, etc. Il peut vous rediriger directement vers l'endroit d'où il a été appelé. Mais il s'agit d'une représentation similaire au fonctionnement de la mémoire en pile. Nous avons notre première valeur ici, puis elles sont empilées, puis elles sont affichées dans un ordre comme celui-ci Ils ne sont pas accessibles au hasard. C'est donc comme le premier entré, premier sorti, selon la terminologie utilisée, la mémoire de pile et la pile d'appels utilisent l'architecture de pile. Et bien qu'ils soient apparentés, ce n'est pas exactement la même chose. J'espère que cela a du sens. Maintenant, si je passe à la méthode quatre, vous pouvez voir que c'est la dernière ajoutée à la pile d'appels. Et puis je passe dessus, et maintenant vous pouvez voir qu'ils sortent lentement de la pile La troisième méthode sera la prochaine à apparaître parce que nous venons juste de sortir de là. Puis deux, puis un. Nous revenons maintenant à la méthode principale. Vous pouvez voir que c'est le dernier élément restant dans la pile d'appels. C'est donc ce qu'est la pile principale, et c'est également ce qu'est l'architecture de la pile. Et vous verrez l'architecture de pile dans de nombreux langages de programmation différents, mais elle ne se limite pas non plus à la programmation. Une dernière chose dont je vais parler est un mot clé que vous entendrez peut-être à l'avenir, appelé collecte des ordures. Alors, qu'est-ce que le ramassage des ordures ? Eh bien, lorsque j'ai parlé création de types de référence, par exemple, éléments stockés dans la zone de mémoire, comme des classes, des instances de classes, des chaînes, des tableaux, etc. J'ai également dit qu'un pointeur est créé sur la pile et qu'il pointe vers les informations sur le tas C'est comme un pointeur. Ce qui peut arriver, c' est que le pointeur est retiré de la zone de pile de la mémoire, mais que les données réelles restent sur le tas Maintenant, notre application n'a plus aucune idée de l'endroit où se trouvent ces informations. Peut-être qu'il n'a même plus besoin de ces données. Mais il pourrait toujours exister dans la zone de mémoire. Mais comme le pointeur ne pointe plus vers lui dans la zone de pile de la mémoire, ces données sur le tas sont inutiles. Il ne peut pas être utilisé, il est introuvable. Cela peut simplement remplir votre mémoire jusqu' à ce qu' il n'en reste plus aucun. C'est un gros problème. C'est ce que l'on appelle généralement une fuite de mémoire. Il y a donc ce que l' on appelle le ramassage des ordures qui passe en quelque sorte par le tas Zone de mémoire, détermine s' il y a un pointeur pointant vers elle sur la pile, et si ce n'est pas le cas, elle la supprime, elle libère de la mémoire Et c'est ce que fait le ramassage des ordures. Et dans un langage comme C shop, vous n'avez pas à vous soucier de la collecte des ordures. Mais j'ai pensé que ce serait une anecdote intéressante à vous raconter Mais si vous travaillez avec d'autres langages, par exemple C plus, vous devez vous soucier de la collecte des déchets. C'est peut-être quelque chose à considérer, mais c'est bon à savoir. Et lorsque votre application se ferme ou s'arrête, la mémoire est généralement libérée. 63. 14-2. Paramètres de méthode - Vérification par valeur: Avant de regarder ce tutoriel, je vous recommande vivement de regarder le précédent tutoriel sur la mémoire en pile et en tas Sinon, cela n'aura peut-être aucun sens à moins que vous ne soyez familiarisé avec la mémoire en pile et en tas Jetons maintenant un coup d' œil à cet exemple. Ici, nous examinons une méthode qui passe maintenant des paramètres à une méthode. Ensuite, nous allons modifier certaines valeurs. Il suffit de prendre cet exemple ici. C'est très simple. Dans la méthode principale de l'application, je définis ici deux variables de type valeur. Maintenant, ils sont stockés dans la pile, la zone de mémoire de la pile, ce sont des types de valeurs. Ensuite, je publie les valeurs de ces variables dans la fenêtre de la console J'appelle ensuite une méthode appelée reset. Et je transmets ces deux variables de type valeur dans cette méthode ici, je réinitialise ces variables qui sont passées à zéro, puis je les affiche dans je réinitialise ces variables qui sont passées à zéro, puis je les affiche dans la fenêtre de la console Une fois la méthode terminée, le contrôle d'exécution est retransmis ici. Ensuite, je vais à nouveau afficher les valeurs de ces variables. Ensuite, je laisse la fenêtre de la console ouverte. Question, quel en serait le résultat selon vous ? Eh bien, regardons ce qu'est réellement le résultat. Je vais lancer le programme maintenant. La valeur de num un est la valeur de num deux est quatre. Ensuite, la valeur à l'intérieur de la méthode est zéro parce que nous les réinitialisons Et puis, après l'exécution de la méthode 6.4, est-ce ce à quoi vous vous attendiez ? Peut-être, mais regardez maintenant cet autre exemple. Jetons un coup d'œil à cet exemple ici. C'est très similaire à l'exemple précédent, mais au lieu d'utiliser un type de valeur simple tel qu'un entier, nous utilisons un type de référence. Et les types de référence, comme nous en avons parlé précédemment, sont stockés dans la zone de stockage de la mémoire, et un pointeur vers ces données est stocké sur la pile Ce que nous faisons, c'est instancier un objet de jeu vidéo Si je vais au cours de jeu vidéo, vous verrez que c'est assez simple. Il possède un champ privé appelé titre et une propriété publique appelée titre, qui contrôle l'obtention et le paramétrage de ce champ ici. C'est très simple. Nous définissons ici le titre du jeu vidéo, World of Warcraft, puis nous l'affichons dans la fenêtre Nous obtenons le titre avant qu'une méthode ne soit appelée. Nous sommes en train de changer le titre ici. Dans cette méthode, il prend un objet de jeu vidéo , puis nous le publions dans la fenêtre Nous l'affichons dans la fenêtre de la méthode. Mais avant de changer le titre du jeu selon cette méthode, nous allons changer le titre du jeu pour changer quelque chose de différent. Ensuite, une fois l'exécution de la méthode terminée, nous publions à nouveau le titre du jeu Que pensez-vous qu'il va se passer cette fois-ci ? Bien, regardons le résultat. Si je lance l'application, vous pouvez voir ici le titre du jeu avant que la méthode ne soit World of Warcraft Le titre du jeu inclus dans cette méthode est World of Warcraft. N'oubliez pas que dans la méthode, c'est avant que le changement n'ait eu lieu, mais une fois que l'exécution de la méthode est terminée, nous revenons dans le Maine et nous le publions. Ici, cependant, vous pouvez voir qu'il conserve la valeur à laquelle nous l'avons changé dans la méthode. Pourquoi est-ce le cas ? Pourquoi ces modifications sont-elles maintenues à cause des modifications apportées aux méthodes pour les types de référence mais pas pour les types de valeur Qu'est-ce qui se passe ici ? Eh bien, permettez-moi de vous expliquer. Je reviens maintenant à l'exemple précédent où nous avions deux types de valeurs simples ici, deux entiers, et nous les avons transmis dans une méthode ici Désormais, en C Sharp, lorsque vous transmettez des objets, qu' il s'agisse de types de valeur ou types de référence en tant que paramètres à des méthodes, ceux-ci sont transmis par défaut en tant que valeur. Ils sont transmis par valeur, sauf indication contraire, ils doivent être transmis par référence. Nous parlerons du passage par référence plus tard. Mais considérez la valeur par défaut qui est transmise par valeur ici. Que signifie le passage par valeur ? Eh bien, par défaut, lorsque vous appelez une méthode et que vous transmettez ces deux paramètres ici, une copie, une copie de ces données est créée. Ici, nous avons une valeur de six dans le numéro un et une valeur de quatre dans le numéro deux. Nous appelons cette méthode ici. Dans cette méthode, elle reçoit une copie de ces variables. Cela ne pointe pas vers la même zone que la mémoire de ceux-ci. Ils sont littéralement copiés. Ensuite, la méthode fonctionne réellement avec une copie dupliquée de ces variables. C'est ce que cela signifie lorsqu' on le transmet par valeur. Tout travail que nous effectuons dans cette méthode ici est effectué avec une copie de ces variables. Et lorsque l' exécution de la méthode est terminée et que le contrôle est rétabli ici, nous perdons tout ce qu'il contient car il s'agit d'une copie dupliquée et elle n' existe que dans la méthode. Une fois la méthode terminée, nous n'en avons aucune connaissance, sauf si nous renvoyons spécifiquement quelque chose d'ici. C'est un exemple de transmission d'un type de valeur dans une méthode et celui-ci est transmis par valeur, cela n'affecte rien en dehors de la méthode. Revenons à notre autre exemple où nous avons changé le nom de l'objet du jeu vidéo. Si je transmets les données par valeur, pourquoi cette modification persiste-t-elle en dehors de la méthode Cela n'a sûrement aucun sens. Eh bien, c'est parce que nous transmettons un type de référence par valeur. Comme je l'ai dit, lorsque vous transmettez des paramètres aux méthodes par défaut, c'est par valeur. Cependant, nous transmettons un type de référence. Souvenez-vous avant de parler des types de référence, qui sont des objets complexes. Ils peuvent être des tableaux, des listes, tout ce genre de choses Et cela est stocké dans la zone de pile de la mémoire, mais comme je l'ai dit, il y a un pointeur stocké dans la zone de pile de mémoire qui pointe vers ces données dans le tas Lorsque cette méthode est appelée, oui, elle est copiée dans la méthode, mais la mémoire en tas n' est pas copiée Seul le pointeur de la pile est copié. Maintenant, cela semble vraiment contre-intuitif car, oui, nous transmettons cet objet de référence par valeur. Cependant, comme il s'agit d'un objet de référence, nous ne faisons que copier le pointeur dans cette méthode. Nous travaillons ici avec une copie du pointeur qui est stockée dans la mémoire de la pile. Cependant, il pointe toujours vers la même zone de mémoire sur le tas Dans cette méthode principale, nous pointons vers la zone de mémoire située sur le tas, mais également vers l'intérieur de cette méthode Même si nous travaillons avec une copie du pointeur sur la pile, celui-ci pointe toujours vers cette zone de mémoire du tas C'est pourquoi le titre change toujours , car même si nous travaillons avec une copie du pointeur, celui-ci pointe toujours vers la même zone de mémoire. C'est pourquoi le titre change toujours dans la méthode. Et nous pouvons voir ici qu'une fois la méthode appelée, les modifications persistaient après l'exécution de la méthode Ici, je suis consciente que c' est beaucoup de choses à assimiler, mais si vous regardez le didacticiel précédent et celui-ci encore quelques fois, vous le comprendrez et vous l'obtiendrez. Je vous promets que lorsque je dis qu' une copie du pointeur est transmise à cette méthode ici, par exemple, si je travaille maintenant avec cette copie du pointeur. Donc, dans ce jeu, je peux initialiser un nouvel objet, une nouvelle instance Ce que cela fait, cela alloue une nouvelle zone de mémoire. Ici, je travaille avec la copie du pointeur ici, mais je dis, d'accord, maintenant créez un nouvel objet sur cette copie du pointeur. Donc, ce que cela va faire, c'est fonctionner avec une copie entièrement nouvelle des données et les mettre sur le tas Ce que nous faisons ici, une fois que la méthode a été appelée, nous publions le titre du jeu ici En fait, mettons-le ici. Nous avons maintenant une nouvelle instance de jeu. Nous définissons le titre de cette nouvelle instance sur Changed, puis nous le publions Et nous sommes toujours en train de publier le titre après la méthode ici Que croyez-vous qu'il va se passer maintenant ? Eh bien, jetons un coup d'œil. Exécutons le programme. Vous pouvez voir maintenant que quelque chose légèrement différent s'est produit. Nous avons notre titre original au début ici. Ensuite, dans la méthode, elle a été modifiée. Cependant, après la méthode, il a conservé son titre d'origine d'avant. Pourquoi est-ce ce qui se passe ici ? Comme je l'ai mentionné, il s'agit d'un type de référence. Par défaut, il est transmis par valeur dans la méthode. Nous avons une copie de ce pointeur de types de référence, qui se trouve dans la mémoire de pile. Nous lui attribuons maintenant un nouvel emplacement de mémoire et nous configurons ce nouvel emplacement pour qu'il change. Cependant, en dehors de la méthode, celui-ci n'a aucune connaissance de ce nouvel emplacement de mémoire. Cela se produit uniquement dans le cadre de la méthode. Seule cette méthode permet de connaître cette nouvelle zone de cette nouvelle zone de mémoire sur le tas et de savoir que nous la pointons Cependant, cette modification n'est pas conservée en dehors de la méthode plutôt que de fonctionner avec une copie existante du pointeur, ce qui affectera à nouveau le tas Tout comme à la sortie d'ici, nous allouons une nouvelle zone de mémoire sur le tas et nous pointons notre copie du pointeur vers celle-ci, et c'est pourquoi cela Jetons un coup d'œil à un autre exemple ici. Encore une fois, cela aura à peu près le même résultat que notre type de référence précédent, qui était une instance d'un objet de jeu vidéo. Mais nous avons ici un autre type de référence, une liste. Encore une fois, cela peut être n'importe quel type de référence, cela peut être un tableau, cela peut être un dictionnaire, cela peut être beaucoup de choses différentes. Ceci, encore une fois, est stocké dans la mémoire de tas. Une liste de quatre entiers, nous produisons le nombre de la liste, puis nous passons la liste à cette méthode Maintenant, par défaut, il est transmis en tant que valeur, mais il s'agit d'un type de référence. Une copie du pointeur est copiée dans la méthode. La méthode peut maintenant fonctionner avec une copie du pointeur qui pointe facilement vers la même zone que celle-ci sur le tas de mémoire. En dehors de la méthode. Nous ajoutons ensuite deux nombres à la liste, puis nous produisons le nombre de listes Une fois la méthode terminée, nous affichons à nouveau le nombre de listes Quels seront, selon vous, les résultats ? Eh bien, jetons un coup d'œil. Vous pouvez voir le décompte de 466. C'est parce que la méthode consiste à ajouter deux nombres. Et une fois que nous serons là, il pointe vers la même zone de mémoire, il conservera ce nombre Maintenant, dans la méthode, si je modifie légèrement la liste ici. Maintenant, dans la méthode, cette liste est à nouveau transmise en tant que valeur. Mais c'est une copie du pointeur. copiant le pointeur et en le pointant maintenant vers une toute nouvelle zone de mémoire, puis en ajoutant deux chiffres à cette toute nouvelle liste Quel en sera le résultat, selon vous ? Lancez maintenant le programme. Vous pouvez voir que nous en avons quatre ou quatre. Vous pouvez voir que notre liste initiale en compte quatre. C'est exact. Dans le cadre de cette méthode, nous créons une toute nouvelle liste. Il n'y a que deux chiffres à l'intérieur. C'est de là que viennent les deux. Maintenant que la méthode est terminée, nous avons toujours accès à cette zone d'origine. Dans la mémoire en tas, il produit les quatre. Vous pouvez donc voir qu'il fonctionne avec tous les types de types de référence. Et c'est le comportement par défaut des méthodes dans C Sharp. Je vais donc boucler la boucle maintenant. Au début du didacticiel précédent, j'ai demandé pourquoi dois-je me renseigner sur la mémoire en pile et en tas Pourquoi est-ce important ? Eh bien, vous pouvez voir que si vous n'avez aucune connaissance de la mémoire en pile et en tas, des variables de type valeur et des variables de type référence, des choses inattendues peuvent se produire Les imprévus constituent un gros problème dans les logiciels pour des raisons évidentes. C'est pourquoi c'est important, et en voici un exemple concret. 64. 14-3. Paramètres de méthode - Recouvrement par référence (Le mot-clé de ref): La référence, mot clé transmettant les paramètres de la méthode par référence. Si vous n'avez pas regardé mes deux tutoriels précédents sur ce sujet, dans lesquels nous parlions de mémoire en pile et en tas mais aussi de transmission par valeur, je vous recommande vivement regarder avant de poursuivre ce didacticiel, car ils sont liés aux concepts décrits dans ce didacticiel Dans le didacticiel précédent, nous avons expliqué comment différents types d'objets sont transmis en tant que paramètres à des méthodes. Par défaut, ils sont transmis par valeur, ce qui signifie qu'une copie de la valeur réelle ou une copie du pointeur est créée et que la méthode fonctionne avec la copie. Je vais maintenant parler du passage par référence. Désormais, le passage par référence n'est pas un comportement par défaut et cela implique de parler d'un tout nouveau mot-clé appelé mot-clé ref. Alors, comment est-ce que cela fonctionne ? À titre de petit rappel, nous allons configurer deux entiers et afficher leurs valeurs. Ensuite, dans cette méthode, nous les transmettons en tant que paramètres, les valeurs à zéro, remettons les valeurs à zéro, puis nous produisons à nouveau les variables Ensuite, lorsque la méthode est terminée, nous produisons la valeur des variables d'origine Et vous pouvez voir que nous les transmettons par valeur. La méthode ne fonctionne qu' avec une copie de ceux-ci. Par conséquent, les données ne sont jamais modifiées une fois la méthode terminée. Maintenant, ce que je vais faire, c'est modifier légèrement cela. Je vais transmettre ces types de valeurs. N'oubliez pas que le type de valeur est un entier, un booléen ou un type simple stocké sur la pile Je vais maintenant les passer par référence. Pour transmettre quelque chose par référence, il suffit de préfixer les variables ici avec le mot clé ref dans les paramètres de la méthode Ici, nous faisons la même chose, nous ajoutons simplement le mot clé ref. À votre avis, quel sera le résultat ? Eh bien, jetons un coup d'œil. Vous pouvez donc voir qu'il présente le comportement du type de référence du didacticiel précédent Vous vous souvenez quand nous avons modifié la valeur d' un type de référence et qu'il s'en est souvenu après l'appel de la méthode ? Eh bien, c'est ce qu' on appelle transmettre un type de valeur par référence. Et nous pouvons le faire en ajoutant le mot clé F ici. Quel en est l'avantage ? Eh bien, passer un type de valeur dans une méthode ne crée plus de copie de la valeur, donc aucune copie n'est créée. C'est à peu près dire «   OK, hey method ». Je vais vous transmettre ces deux variables ici, ce sont des types de valeurs, mais je veux que vous vous transmettiez leur référence en mémoire. Je veux que tu travailles avec eux. Et quoi que vous leur fassiez, les changements seront reflétés. Il s'agit donc de transmettre une référence à la zone de la mémoire de pile pour ces types de valeurs, et maintenant ils sont transmis comme référence. Nous pouvons les utiliser directement dans la méthode, et toutes les modifications que nous y apportons seront conservées une fois l'exécution de la méthode terminée Vous pouvez donc voir ici que je viens de les modifier, maintenant le changement est maintenu. Vous pouvez donc voir maintenant que nous comprenons le comportement par défaut du dernier tutoriel qui consiste à passer par valeur. Il est plus facile de comprendre l'autre terminologie transmise par référence, l'utilisation du mot clé Ref. D'accord, nous avons examiné la possibilité de transmettre types de valeurs tels que des entiers par valeur Nous avons examiné la transmission types de référence tels que des objets complexes par valeur. Nous avons maintenant examiné la transmission des types de valeurs par référence. Et maintenant, pour terminer la quadrilogie, nous allons examiner le passage types de référence par Voici l'exemple. Nous avons ici la liste des nombres entiers que nous avons déjà examinés Nous n'avons que quatre chiffres là-dedans. Ensuite, dans cette méthode, nous ajoutons deux nombres à la liste. Et puis, à l'extérieur, nous ne faisons que publier le nombre de personnes figurant sur la liste en cours de route Nous l'avons déjà examiné et vous pouvez voir que voici le résultat ici, car par défaut, nous transmettons une copie du pointeur, mais il pointe vers la même zone dans la mémoire de tas Vous pouvez donc voir les modifications persister une fois l'exécution de cette méthode terminée Mais souvenez-vous lorsque nous avons parlé du fait que nous pouvons réellement configurer un nouvel emplacement dans la mémoire, prendre une copie de notre pointeur et lui donner un tout nouvel emplacement, ce qui change le résultat Vous pouvez voir ici que le changement n' est pas maintenu dans ce cas Je vais maintenant le qualifier avec le mot clé ref. Je l'ajoute ici lorsque nous appelons la méthode. Et je l'ajoute ici dans les paramètres. Que pensez-vous qu'il va se passer maintenant ? Eh bien, jetons un coup d'œil. Je vais lancer l'application. Vous pouvez voir maintenant que le changement a été effectivement conservé une fois l'exécution de la méthode terminée Pourquoi est-ce ce qui se passe ici ? Eh bien, vous l'avez peut-être déjà deviné. Lorsque nous transmettons quelque chose par référence en utilisant le mot-clé reference, comme nous en avons parlé précédemment, ne créant plus de copie, nous ne créons même plus de copie du pointeur. Nous passons à peu près le pointeur dans mémoire de pile vers ces données dans la mémoire de tas Nous passons le pointeur lui-même à la méthode. La méthode fonctionne désormais directement avec le pointeur d'origine vers ces informations. Nous sommes en train de configurer un tout nouvel objet ici, une nouvelle liste. Mais nous ne travaillons pas avec une copie du pointeur, c'est le pointeur d'origine. Nous sommes en train de créer une toute nouvelle liste en haut de la liste d'origine, puis d'y ajouter deux chiffres. Si nous exécutons l'application maintenant, comme nous l'avons vu précédemment, vous pouvez voir ici qu'elle est persistante C'est ce qui fait la différence ici. Lorsque nous utilisons le mot clé ref, nous ne copions plus rien. Nous ne copions pas les types de valeurs, mais nous ne copions pas non plus les pointeurs lorsque nous utilisons des types de référence Pourquoi est-ce utile ? Eh bien, nos méthodes peuvent alors fonctionner avec nos données d'origine, qu' il s'agisse de types de valeurs ou de types de référence, et les modifications peuvent être conservées une fois l'exécution de la méthode terminée C'est le pouvoir du mot clé ref dans la boutique. Ceci complète cette série de trois didacticiels sur la pile, la mémoire en tas et les types de référence et de valeur dans C shop 65. 15. Le mot-clé struct: Dans ce tutoriel, je vais parler des structures en C. Les structures Sharp utilisent le mot clé struct, mais que sont-elles et comment fonctionnent-elles ? Eh bien, les structures sont très similaires aux classes, et ce didacticiel suppose que vous en savez un peu plus sur le fonctionnement des classes, fonctionnement de l'héritage, peut-être sur les interfaces, ainsi type valeur et référence variables de type valeur et référence, ainsi que sur le mot clé en lecture seule. J'ai déjà fait des tutoriels sur tous ces sujets. Si vous avez tout regardé jusqu'à présent, vous aurez parfaitement compris ce didacticiel et vous serez prêt à démarrer. Qu'est-ce qu'une structure ? Jetons un coup d'œil à cet exemple. Ici, j'ai une classe carrée, jetons-y un œil maintenant. Il possède ici deux champs privés, la largeur et la hauteur du carré. Il possède un constructeur qui définit ces champs. Il propose ici un exemple de méthode qui calcule simplement la surface en fonction de celles-ci Et aussi deux propriétés publiques qui exposent la largeur et la hauteur. C'est donc très simple. Donc, ce que je fais ici, j'instancie un nouvel objet et je publie quelques exemples dans la fenêtre Si je lance l'application maintenant, un carré de hauteur quatre et largeur cinq a une surface de 20. Donc ça ne fait pas grand-chose. Permettez-moi donc de vous présenter une structure maintenant et ce qu'elle est. Passons donc à la classe carrée ici. Et je vais juste modifier ce mot clé de classe et je vais mettre une structure comme ça. Donc, si vous regardez mon tutoriel sur les interfaces et énumérations où nous créons une toute nouvelle classe et modifions simplement le mot-clé de classe C'est assez similaire à cet égard. Maintenant, nous avons une structure. Ce carré est désormais une structure. Ce n'est plus un cours. Mais vous pouvez voir qu'il n'y a aucune erreur ici. Il n'y a pas de lignes ondulées rouges. Comment se fait-il que je viens de modifier toute cette classe et il n'y a aucune erreur. L'application fonctionne-t-elle même ? Eh bien, on dirait qu'il fonctionne. Et nous avons exactement la même réponse : que se passe-t-il ici ? C'est là que les structures et classes confondent les nouveaux développeurs ou les développeurs qui ne comprennent pas vraiment les types de valeur et les types de référence. Les structures et les classes peuvent sembler très similaires dans leur comportement. Vous pouvez le voir ici, j'ai créé une structure, elle a des champs privés, elle a un constructeur, elle a des méthodes, des propriétés Quelle est la différence entre une structure et une classe ? Puis-je simplement utiliser des structures maintenant au lieu de classes ou dois-je ignorer complètement les structures et n'utiliser que des classes ? Eh bien, la réponse est que vous pouvez utiliser les deux. L'une des principales différences entre les structures et classes est que les structures sont des types de valeurs. Maintenant, comment est-ce que cela fonctionne ? Eh bien, nous avons déjà dit que les classes sont des types de référence. Si je le remets ici, Square est désormais une classe. Je ne fais que décommenter cette méthode ici. Maintenant, cette méthode, je transmets le carré, qui est maintenant une classe, à cette méthode. Et je suis en train de modifier certaines propriétés ici. J'en ai déjà parlé. Lorsque vous transmettez un type de référence comme celui-ci ici, s'agit d'un type de référence, il se trouve dans la zone de mémoire d'une méthode, puis il est transmis par référence Cela signifie que la méthode peut accéder à la mémoire du tas. Elle fonctionne avec l'objet d'origine lorsque la méthode est terminée. Ici, nous avons toujours accès aux modifications apportées depuis cette méthode si j'exécute cette application, nous allons maintenant voir ces modifications reflétées dans le résultat ici. Jetons un coup d'œil à ça. Vous pouvez voir ici 2 020 400 dollars pour la région Il s'agit d'une variable de type référence ici. Il vit sur le tas. Maintenant, retransformons cela en structure et voyons ce qui se passe. Il s'agit maintenant d'une structure que j'ai mentionnée précédemment. Les structures sont des types de valeurs et non des types de référence. Ces modifications ne seront pas reflétées dans le résultat. C'est parce que la méthode fonctionne avec une copie du type de valeur. Tout ce qui a changé ici se reflète simplement sur la copie. Les modifications ne seront pas maintenues. Nous allons voir la version 5.4 comme nous l'avons fait précédemment. Comme vous pouvez le voir, l'une des principales différences entre les classes et les structures est que les classes sont des types de référence et que les structures sont des types de valeurs. C'est l'une des principales caractéristiques des structures. Examinons d'autres différences entre les structures et les classes, car elles sont assez similaires et semblent fonctionner de la même manière. Parlons des différences. Je pense que cela vous permettra de mieux comprendre ce que peuvent faire les structures, leurs avantages et leurs inconvénients. Avec les structures, nous ne pouvons pas utiliser de classes d'héritage, par exemple, nous pouvons hériter d'une classe de base Mais lorsque nous essayons de le faire avec des structures, et que nous les survolons, leur forme dans la liste d'interfaces n'est pas une interface Qu'est-ce que cela signifie ? C'est assez énigmatique, n'est-ce pas ? En effet, avec les structures, vous pouvez réellement implémenter des interfaces. Vous pouvez travailler avec des interfaces, ce n'est pas un problème. Cette erreur ici, c'est attendre une interface car c'est peu près la seule chose que vous pouvez faire à cet égard avec une structure. Mais lorsque j'essaie d' hériter d'une classe, d' une classe de base, cela ne me permet pas de le faire parce que ce n'est pas possible Tout le concept d' héritage n' existe pas avec les structures. C'est l'un des avantages d'une classe par rapport à une structure. Nous ne pouvons pas hériter d'une classe de base, mais la structure elle-même ne peut pas non plus être une classe abstraite ou une classe de base Cela signifie que nous ne pouvons pas avoir méthodes virtuelles, par exemple. Vous pouvez voir ici que lorsque j'ai essayé de le faire, ce est même pas valide, c'est parce que c'est à l'intérieur d'une structure. Nous ne pouvons donc pas utiliser le mot clé virtual, ce qui signifie que nous ne pouvons pas le remplacer, ce qui signifie que nous ne pouvons pas adopter de comportement polymorphe Et n'oubliez pas que c'est le concept de remplacement de la méthode. Par exemple, nous ne pouvons pas utiliser le virtuel, nous ne pouvons pas utiliser l'abstrait. Nous ne pouvons donc pas vraiment utiliser quoi que ce soit en ce qui concerne l'héritage ou quoi que ce soit de ce genre. Avec les structures, il existe des types beaucoup plus simples que des classes, alors pensez-y de cette façon. Une structure est plus simple qu'une classe. Parlons peut-être de l' avantage d'une structure ici, ou peut-être de la raison pour laquelle nous en utiliserions une. Pourquoi même s'embêter ? Pourquoi ne pas simplement utiliser des cours pour tout ? Eh bien, les structures n'ont pas une empreinte mémoire importante comme le ferait un objet de type référence. Par exemple, j'ai un objet de jeu vidéo ici, un cours de jeu vidéo. À l'intérieur, il contient des champs privés liés à d'autres types de référence, comme une classe de jeu, une liste d'entiers, des chaînes, une énumération C'est un encombrement assez lourd et cela se répercute sur le tas C'est pourquoi nous ne le mettons pas sur la pile. Mais si vous utilisez, par exemple, une structure pour une classe très simple, par exemple cette classe carrée ici, elle n'a que des types de valeurs simples, comme quelques doubles. Même s'il contenait des booléens et des entiers, des choses comme ça, il fonctionnera beaucoup plus rapidement que allocations et les allocations sur le Ainsi, lorsque vous travaillez dans la zone de pile de la mémoire avec des types de valeurs simples et même des structures, cela fonctionnera beaucoup plus rapidement. Et les allocations, encore une fois, sont beaucoup plus rapides et moins coûteuses C'est donc un avantage de l'utilisation d'une structure. Vous pouvez donc penser, d'accord, si j'ai un type de référence dans un type de valeur ? Par exemple, une liste d' entiers est une variable de type référence Ensuite, je mets cela dans ma structure, qui est un type de valeur. Oui, c'est possible. Vous pouvez voir qu'il n'y a aucune erreur. L'application va s'exécuter, mais cela est considéré comme une mauvaise pratique. Tu ne devrais pas faire ça. Cela va en quelque sorte à l'encontre de l'utilité d'utiliser une structure au départ, ce qui me ramène à mon point suivant N'utilisez une structure que si vous disposez d'un conteneur pour les types de valeurs simples. Par exemple, ce carré ici. Sa largeur est double. Sa hauteur est double. S'il a une couleur, vous pourriez peut-être la représenter par un entier. Et cet entier peut faire référence à une couleur. Par exemple, le blanc peut être zéro, noir peut être un, le rouge peut être deux. Ils fonctionnent avec des types de valeurs simples. Ici, une structure dans cette instance serait parfaite car elle est elle-même un type de valeur. Mais j'utilise également des types de valeurs dans. Je n'ai jamais l'intention d' utiliser l'héritage, je n'ai jamais l'intention d' utiliser le polymorphisme Je ne prévois jamais d'autres structures ou choses en héritant Une structure serait donc un bon choix pour cela. C'est simple, c'est rapide, ça utilise des types de valeurs. Je ne veux jamais m'étendre sur le sujet de l'héritage. Si toutes ces cases sont cochées, utilisez une structure. Mais dès que nous commençons à penser à des choses comme, d'accord, je pense que ce carré devrait hériter d'une forme de classe de base Et peut-être que la couleur pourrait être une énumération, peut-être qu'elle aurait une liste de pixels et des choses comme ça Et nous commençons à introduire l'héritage lourds et les champs de type référence ici, alors non, nous ne voulons pas de structure, nous voulons utiliser une classe. Donc, en résumé, utilisez une structure si vous avez un objet bon marché, mais utilisez une classe si vous souhaitez le développer et utiliser des objets de type référence lourds C'est essentiellement la différence et c'est pourquoi vous devriez utiliser l'un et pas l'autre. L'un des principaux avantages de has par rapport au type valeur est donc has par rapport au type valeur que vous pouvez marquer l'ensemble de la structure comme étant en lecture seule. Maintenant, si vous regardez mes tutoriels sur Read Only, vous comprendrez à quoi ça sert. Il s'agit d'un type de données immuable. Une fois que vous avez défini une valeur, vous ne pouvez pas la modifier. Et il y a de nombreuses raisons à cela. Si j'essaie de marquer l'ensemble de ce cours comme étant en lecture seule, je suis d'accord avec cela, vous pouvez dire que ce n'est pas valide pour cet article Mais si je crée une structure en lecture seule comme celle-ci par exemple, il n'y a aucun problème. De toute évidence, cela pose quelques problèmes. Vous pouvez donc voir que les champs d' instance de structure en lecture seule doivent être en lecture seule. Ils doivent également être lus uniquement. L'autre point, bien sûr, que nous ne pouvons pas utiliser le modificateur set si les choses sont en lecture seule. Nous devons soit initialiser dans la déclaration du champ ici, donc nous l'initialisons ici, soit dans le constructeur Si vous regardez mon Tuchoil en lecture seule, vous vous en souviendrez et vous le comprendrez, mais j'ai pensé que je devais simplement le mentionner Avec les structures, vous pouvez marquer l'ensemble de la structure comme étant en lecture seule. Ce que vous ne pouvez pas vraiment faire sur une classe utilisant ce mot clé. Et vous verrez peut-être aller l'avant avec vos projets de programmation, vous verrez que c'est également une pratique assez courante lorsque vous travaillez avec des structures. C'est une chose puissante que vous pouvez également faire lorsque vous travaillez avec des structures. Mais je pense que le principal point à retenir est de ne pas avoir peur d'utiliser des structures et d'expérimenter, mais de ne les utiliser que pour de simples contenants Donc, des choses comme des carrés où vous avez des types de valeurs simples. Dès que vous commencez à parler de types de référence très chargés, utilisez dans ce cas une classe. Mais les structures sont très utiles pour travailler, comme applications rapides ou des choses simples comme celles-ci J'espère que ce tutoriel vous a aidé. 66. 16-1. Type de données de l'objet - Boxe et Unboxing: Dans ce didacticiel, nous allons parler du type de données de l'objet. Et ça ressemble à ça. Vous avez peut-être rencontré le type de données de l'objet lors de l'écriture sur la console. Par exemple, lorsque nous écrivons sur la console, il existe de nombreuses surcharges de méthodes différentes que nous pouvons utiliser ici Mais vous pouvez voir que l'un des paramètres ici est l'objet par exemple. C'est quoi ça ? Comment fonctionne-t-il ? Eh bien, voyons quel est le type de données de l'objet. Si vous avez regardé mes tutoriels sur l'héritage ainsi que sur les types de valeurs et les types de référence, il vous sera très facile de comprendre le type de données de l'objet . Désormais, le type d'objet est la classe de base ultime pour tous les types de données, tous les types définis par l'utilisateur, qu'il s'agisse de créer des instances d'objets, types de référence tels que des tableaux , ou des types de valeurs simples tels que des entiers, bolènes, des caractères, etc. C'est la classe de base ultime pour tous ces types. Il s'agit d'un type de référence, ce qui signifie qu'il est stocké dans la zone de mémoire De plus, c'est comme une ancienne technologie. Maintenant, un produit appelé générique est apparu. Et en général, les génériques constituent une meilleure pratique, même si vous rencontrez toujours le type de données objet de nos jours Et l'utilisation du type de données d'objet peut présenter certains problèmes dont nous parlerons également. Il s'agit du processus de boxe et de déballage. Regardons maintenant un exemple Quand je viens de dire que le type de données d'objet est le type de base ultime, qu'est-ce que cela signifie ? Rappelez-vous quand j'ai parlé d'interfaces et que nous pouvons transmettre l' interface en méthodes, puis lorsque nous implémentons l'interface, nous pouvons transmettre nos objets. Si nous avons plusieurs classes étendant la même interface, nous pouvons simplement transmettre ces objets librement. Ceci est assez similaire au fonctionnement de la classe basée sur les objets. Ne vous inquiétez pas si vous n'avez pas regardé ces didacticiels sur les classes et interfaces abstraites. Je vais l'expliquer tout de suite. Ici, nous appelons simplement une méthode et nous passons une chaîne. Ça dit juste « Bonjour tout le monde ». Le paramètre est une chaîne. qui est génial parce que nous passons une chaîne puis nous la sortons dans la fenêtre Une application très simple. Maintenant, imaginez ça. Je vais remplacer cette chaîne le mot-clé object, juste comme ça. Lancez maintenant l'application. Encore une fois, vous pouvez constater que nous avons exactement le même résultat. Pourquoi cela se produit-il ? Eh bien, c'est simplement parce qu'une chaîne comme celle-ci satisfait, c'est une relation Et c'est un objet au même titre qu'une instance de classe. Par exemple, un cours de jeu vidéo, un cours sur les chiens, un cours sur les animaux. Il y a aussi des classes, mais ce sont aussi des objets. Ce mot clé d'objet peut représenter à peu près tous les types de données du système. Des boules, des chaînes et même des entiers. Par exemple, 3456. Le résultat sera le même et la compilation du projet ne posera aucun problème Ici, nous avons un entier, 3456, nous en avons déjà parlé Des entiers simples, des chaînes, des caractères, des boolènes, ce sont tous Ils vivent sur la pile, dans la zone de mémoire de la pile. Cependant, les objets sont des types de référence, ils sont stockés sur le tas Ce qui se passe ici, c'est une conversion implicite qui se produit ici. Cet entier que nous transmettons est en train d'être converti en un type d'objet. Ce processus s'appelle la boxe. Si nous reconvertissons ensuite cette valeur d'objet en un entier, cela s'appelle le déballage Si tu ne me crois pas, je te le prouverai. Maintenant, si vous travaillez avec un type d' objet tel que value ici, il propose quelques méthodes que nous pouvons utiliser, l'une d'entre elles étant appelée get type. Ce que cela fera, il obtiendra le type sous-jacent de cette valeur d'objet ici. En ce moment, nous passons un entier ici. Si je lance le programme, vous pouvez voir qu'il produit le type sous-jacent de l'objet, qui est un int 32, un entier de 32 bits De même, si je passe une chaîne, que je dis bonjour, alors nous allons obtenir une chaîne par exemple. Vous pouvez voir qu'il s'agit du type sous-jacent de l'objet ici, et nous pouvons l'obtenir en utilisant la méthode get type ici. Parlons de boxe et de déballage dès maintenant. Parlons d'abord de la boxe. Qu'est-ce que la boxe ? Nous avons ici un entier appelé numb, et nous l' initialisons à 1234 Maintenant, nous mettons cet entier dans une boîte, où le nom boxing. Nous disons essentiellement, d'accord, je veux créer un tout nouvel objet. N'oubliez pas qu'il s'agit de la classe de base ultime pour tous les types. Je veux lui donner la valeur de num. Maintenant, OBJ doit être égal à 1234. Maintenant, je veux changer la valeur de ce nombre ici à 100. Pensez-vous que cette valeur va changer avec elle ? Ce que je fais, je produis deux des valeurs ici Si nous exécutons l'application, la valeur de num est 100, ce qui est vrai car nous l'avons modifiée. Mais vous pouvez voir que cela ne se reflète pas dans la valeur de notre objet ici. Qu'est-ce qui se passe ici ? Je pensais que l'objet était un type de référence. Lorsqu'un élément est un type de référence, nous avons une référence à cette zone de mémoire. Eh bien, c'est le châtiment de la boxe. Ce qui se passe ici lorsque vous mettez quelque chose en boîte, vous placez à peu près cet entier dans une boîte d'objet. Mais comme l'objet est un type de référence, tous les objets sont stockés dans la zone de mémoire Les types de valeurs simples tels que les entiers sont stockés sur la pile. Ce qui se passe ici lorsque nous créons un nouvel objet et que nous le réglons sur engourdi, ici, nous copions à peu près l'ensemble de l'objet, allouant de la mémoire supplémentaire sur la zone de mémoire, en y insérant cette valeur Et puis créez également le pointeur sur la pile pour pointer dessus. Beaucoup de choses se passent lorsque vous faites cela ici. Maintenant, c'est implicite, ce qui signifie que cela se produit automatiquement dans les coulisses. Tu n'as aucun contrôle là-dessus. Boxing, une opération très coûteuse lorsque nous avons regardé notre exemple précédent où nous avons passé un entier dans la méthode et nous avions un paramètre d'objet. Tout cela se passe dans les coulisses. Une zone entière de mémoire du tas est allouée simplement parce que nous passons un entier et il implicitement converti en un type d'objet C'est le châtiment de la boxe. C'est également quelque chose que nous devons prendre très en compte, en particulier lors de la création d'applications à grande échelle. Y a-t-il une meilleure façon de procéder ? Peut-être devriez-vous plutôt envisager de surcharger la méthode Comme lorsque nous avons la ligne droite de la console, nous avons tous ces différents en-têtes de méthodes ici Nous pouvons prendre un tableau de caractères, un décimal, un double à flot Mais une fois que nous avons toutes ces valeurs possibles, oui, il existe une option pour intégrer un objet. Mais ce n'est pas obligatoire. Il y a des éléments de conception à prendre en compte lors de l'utilisation d'objets ici, par exemple, lorsque vous encadrez certains types de données, nous pouvons encadrer une chaîne, nous pouvons encadrer un caractère, mais en principe, ce processus s'appelle boxe. Maintenant, comme vous l'avez peut-être deviné, c' est le déballage Qu'est-ce que le déballage ? Eh bien, le déballage est à peu près le contraire. s'agit de convertir un type de référence, comme un objet stocké sur le tas, remémorant la zone de mémoire en un type de valeur, puis stocké dans la pile C'est le contraire de la boxe, et c'est du déballage. Il fait le processus à l'envers. Jetons un coup d'œil à un exemple de déballage maintenant. Je vais maintenant déballer cet objet ici. N'oubliez pas que le processus de déballage consiste convertir un type de référence en un type de valeur Jetons un coup d'œil à ça. Maintenant, je veux le reconvertir en un entier. Si je le convertit en un autre type, il y aura une erreur. Nous allons avoir un problème de conversion de type. Je veux un entier pour toute cette opération. C'est ce que je veux dire pour remettre l'objet dans son type d'origine. J'ai configuré un entier appelé résultat. Maintenant, ce que je veux faire, c'est convertir l'objet dans le type de données attendu. C'est le type attendu que je veux, c'est la conversion. Je souhaite convertir cet objet en un entier. Et c'est le processus de déballage des objets stockés sur le tas Je veux le convertir en un type de données simple, et maintenant il va vivre sur la pile ici même. Ce résultat est un entier ici. Maintenant, si je publie le résultat dans la fenêtre de la console, examinons le résultat. Vous pouvez voir comment j'ai obtenu ma valeur initiale ici, 1234. Maintenant, vous remarquerez peut-être une chose à propos de ce didacticiel, à savoir que je présente ce mot clé d' objet ici, ce type de données d'objet, mais vous ne devriez pas vraiment l'utiliser tant que ça. Oui, j'apprécie que ce soit le thème général de ce tutoriel, mais il est bon d'en être conscient. Au début de C Sharp, il était assez courant de convertir différents types de données de cette façon. Nous le convertissons donc en type de référence puis de nouveau en type de valeur. Cela nous permet de transmettre différents types de données en tant que type ultime d'objet de classe de base. C'était donc très utile, mais des choses comme les génériques et d'autres choses ont été introduites, ce qui a en quelque sorte cette notation objective de la boxe et boxe hors de pratique et de mode Mais il faut en être conscient, notamment parce que vous travaillez peut-être avec des systèmes plus anciens ou avec des systèmes liés aux vôtres. C'est ce que l'on appelle l'interopérabilité, lorsque votre logiciel est lié à un autre logiciel et que vous rencontrez ce type de données d'objet. Comme vous pouvez le constater, il est toujours utilisé aujourd'hui. La ligne droite de la console prend un objet comme paramètre et de nombreuses autres méthodes et classes l'utilisent également. Mais il est bon de connaître le principe du type de données objet et le processus coûteux de mise en boîte et de déballage, qui consiste à convertir implicitement les types de données, les types valeur en types de référence, puis de nouveau en types de valeur Il y a donc un gros surcoût avec boxage et le déballage en do dièse 67. 16-2. Mot-clef dynamique et vérification dynamique de type: Dans ce didacticiel, nous allons examiner le mot clé dynamique. Et le mot clé dynamique ressemble à ceci. Mais avant de parler du mot clé dynamique, prenons un peu de recul. Si vous regardez mes précédents tutoriels où je parlais de C Sharp, du fait qu'il s'agit d'un langage fortement typé et statique Alors permettez-moi d'en parler une seconde. un langage à typage statique, les types de variables, par exemple un entier, sont connus au moment de la compilation C'est alors que je clique sur ce petit bouton vert pour jouer ici. Le logiciel compile. Et en cas de problème, le compilateur m'avertira, le logiciel ne compilera pas. Et il s'agit d'un langage typé statiquement comme le C sharp. Ce processus est appelé vérification de type statique. Vérification de type statique, cependant, et si je vous disais qu'il existe également ce que l'on appelle la vérification de type dynamique ? Qu'est-ce que le contrôle de type dynamique ? C'est là que les types de variables, par exemple, sont connus au moment de l'exécution. S'il y a un problème avec les types ou quoi que ce soit d'autre, nous pouvons très bien compiler le logiciel. Cependant, s'il y a une erreur, nous ne le saurons pas tant que le logiciel ne sera pas réellement en cours d'exécution. Qu'est-ce que je veux dire par tout cela ? Eh bien, jetons un coup d' œil à un exemple ici. Ici, j'ai un exemple d'entier. Je l'initialise à la valeur 55. Ensuite, je le mets simplement à l'écran. Ça ne sert pas vraiment à grand-chose. Cependant, et si je voulais peut-être maintenant attribuer une valeur de chaîne à cet entier ? Si je tape simplement bonjour, par exemple, vous pouvez voir qu'il y a une erreur évidente ici. Il ne peut pas convertir implicitement la chaîne en int. C'est parce que le type de cette variable est un entier. Mais ce que nous essayons de faire ici, c'est d'y mettre une ficelle. Ce ne sera pas une lettre. Non seulement cela, mais notre programme ne compilera pas. Vous pouvez voir qu'il y a une erreur ici. Il s'agit d'un exemple de vérification de type statique. Il sait que c'est un entier, donc c'est un type entier. Mais maintenant, nous essayons d'y mettre une ficelle. Mais nous sommes en fait alertés de ce problème en ce moment même en cours de développement C'est ce qu'on appelle la vérification de type statique. Cependant, avec quelque chose comme la vérification de type dynamique, vous ne serez pas alerté de cette erreur Tout ira bien, le logiciel se compilera très bien. Mais à moins que vous ne fassiez quelque chose pour corriger cette erreur particulière ici, vous serez alerté de cette erreur pendant l'exécution Il existe donc d'autres langages de programmation, par exemple Python ou Ruby. Maintenant, ce sont des langages typés dynamiquement. Cela signifie, par exemple, nous pouvons le faire et que le logiciel se compilera très bien, ce n'est pas un problème. Cependant, vous serez averti de cette erreur lors de l'exécution du logiciel C'est ce qu'on appelle le runtime et c'est là que l'erreur peut se présenter au moment de la compilation. C'est là que C Sharp peut détecter ces erreurs potentielles liées aux types, c'est ce qu'on appelle la vérification de type statique Cependant, lors de l'exécution dans des langages tels que Python, Ruby, vous serez alerté de ces erreurs de type Par exemple, pendant l'exécution, c'est ce qu'on appelle la vérification dynamique du type. J'ai maintenant parlé de la vérification de type statique et vérification de type dynamique et des différences. Il sera désormais plus facile d' expliquer le mot clé dynamique. En fait, le mot clé dynamique se comporte à peu près comme le type de données de l'objet Si vous avez regardé mes précédents tutoriels où je parlais du type de données d'objet et du canal considéré comme la classe de base pour tous les types, par exemple la classe de base du bolen à double entier Mais pas seulement cela, mais aussi des choses comme des listes, des objets personnalisés et des choses comme ça. Donc, si vous vous souvenez et comprenez ces détails concernant le type de données de l' objet, vous allez démarrer en ce qui concerne le mot clé dynamique. Jetons maintenant un coup d' œil à un exemple. Donc, ce que je vais faire maintenant, c'est faire un exemple avec le type de données de l' objet. Donc, cette variable appelée ici test, va être un objet de type. Ce que je fais, c'est stocker une valeur ici, 35,5 qui pourrait être un double Par exemple, cela me semble être un double, mais il n'y a aucun problème ici car l'objet est comme une classe de base ici, il acceptera très bien cette valeur. Mais maintenant, nous essayons d' incrémenter cette valeur de test, qui est un objet de type de données, de 7,5. Il semblerait que nous ajoutions un à un double Ce qui devrait être bien vu que nous en avions le double auparavant. Cela a fonctionné sans problème. Vous pouvez donc voir ici qu'il n' y a aucun problème. Mais maintenant que j'en ai fait un type de données d'objet, il y a un problème. Donc, si je le souligne, cela indique que l'opérateur plus ne peut pas être appliqué à un objet et que le double lorsque vous travaillez avec un objet, nous avons parlé de boxe et de déballage Ce que je fais ici, j'ai un type de données simple, 35,5 qui ressemble à un double, et je le place dans un type de données d'objet Maintenant, si vous vous souvenez d'avant, s' agit d'un type de référence, il est donc stocké dans la zone de chaleur de la mémoire. Ce que nous faisons, c' est tester cette valeur. Lorsque nous essayons d'incrémenter la valeur, cela pose un problème. Nous ne pouvons pas ajouter 7,5 à cette valeur ici. Ce que nous devons faire ici lors incrémentation de la valeur, par exemple, c'est convertir explicitement ce type de données d'objet en un type avec lequel nous pouvons travailler Ce que nous essayons de faire, c'est d' ajouter 7,5 qui est un double, donc je dois le convertir en double. Nous pouvons le convertir en double en utilisant la classe statique de conversion que nous avons toujours utilisée dans les didacticiels précédents. Et ça va très bien fonctionner. Ce que je fais ici, c'est déballer la valeur ici. Je boxe ici, je déballage. Il y a une certaine charge utile en termes de performances lorsque nous effectuons le boxage et le déballage comme nous en avons déjà parlé Mais cela fonctionne très bien en convertissant l'objet en double. Ensuite, j'y ajoute un double, puis je stocke la valeur dans l'objet, donc je la remballe à nouveau, puis je sors la valeur Si je lance le programme, vous voyez maintenant que j'ai la valeur 43, ce qui semble à peu près correct. Vous pouvez voir que cela fonctionne. Pas de problème Je peux en fait additionner des valeurs. Je peux même en ajouter cinq ici, par exemple, et ça va très bien fonctionner. C'est un avantage d'utiliser quelque chose comme ça par rapport à des types de données individuels, mais cela a un coût de performance. Mais ce que j'essaie de faire comprendre, c'est que lorsque vous utilisez le type de données de l'objet et que vous souhaitez modifier les valeurs, vous devez effectuer le déballage ici Vous devez effectuer une conversion explicite ici. Maintenant, en ce qui concerne le mot clé dynamique que je vais vous présenter, j'ai dit qu'il est étroitement lié au type de données de l'objet. Il se comporte de manière très similaire. Mais nous n'avons pas besoin de faire cette conversion explicite ici. Et ce n'est pas la seule différence. L'une des principales différences est qu'il fournit une vérification de type dynamique dans un environnement C Sharp. Commençons donc par le mot clé dynamique. Donc, la toute première chose que je vais faire, que vous le compreniez un peu mieux, est de convertir cet exemple en utilisant le mot-clé dynamic. Donc, ce que je fais ici, je définis cette variable comme dynamique ici. Et comme il ne s'agit pas du type de données de l'objet et que nous n'avons pas besoin de convertir quoi que ce soit de manière explicite, nous n'avons pas besoin de ce casting sur place. Donc, si je lance le programme maintenant vous pouvez voir qu'il fonctionne comme avant. Il ne se plaint pas d' ajouter une valeur à un type de données d' objet. Vous pouvez donc voir qu'il y a un avantage considérable ici. Nous n'avons pas besoin de convertir explicitement nos variables, par exemple. Donc c'est plutôt bien. Et comme je l'ai déjà mentionné, cela fonctionne comme l' objet sous le capot. C'est donc presque comme, vous savez, la classe de base principale qui fonctionne avec les entiers, bouleènes et tout ce genre de choses C'est donc le premier avantage de l'utilisation de la dynamique. Nous n'avons pas besoin de convertir quoi que ce soit de manière explicite, nous n'avons donc pas besoin de dire explicitement, accord, en faire un entier. Nous pouvons donc maintenant y ajouter un entier ou en faire un double. Nous pouvons donc y ajouter un double. Nous n'avons pas besoin de faire tout cela. Ça a l'air parfaitement bien. Apparemment, nous l' avons défini comme un double, maintenant nous y ajoutons un entier. Toute la conversion, le casting, la boxe et la boxe se font dans les coulisses. Nous n'en avons aucune visibilité. Tout est fait pour nous. C'est donc l'un des avantages, cette complexité nous est enlevée. Regardez ce que Als peut également faire. Par exemple, nous initialisons, c'est comme un double, puis nous voulons y ajouter un entier Et si je disais que test est égal à bonjour, par exemple ? Que croyez-vous qu'il va se passer ? Maintenant, lançons l'application quoi elle ressemble, nous allons afficher « hello » Donc, ce que je vais faire, c'est ajouter quelques points d'arrêt ici Nous allons passer en mode pause lorsque nous lancerons l'application. Ensuite, nous allons analyser ce test de variable ici. Alors, abordons cette question afin que nous puissions mieux y voir. heure actuelle, vous pouvez voir que nous avons un objet dynamique ici, qui est un test. Et elle n'a pas encore de valeur car nous n'avons pas exécuté cette ligne de code. Une fois que j'ai franchi ce point, nous pouvons voir que le test est maintenant, parce que nous y avons mis une valeur double, nous pouvons voir que le test est maintenant, parce que nous y avons mis une valeur double, maintenant nous incrémentons la valeur de cinq, ce qui semble plutôt bien Vous pouvez donc voir que c'est toujours un double. Maintenant, en essayant de mettre une valeur de chaîne ici, si nous franchissons cette valeur, vous pouvez voir que nous avons maintenant une chaîne dynamique ici. Vous pouvez donc voir que son fonctionnement est assez flexible. Cela élimine à peu près tout le concept de types ou du moins vous cache le concept de types variables. Ainsi, lorsque vous développez des applications, peut-être l'impression que toute cette complexité vous est enlevée. Vous n'avez pas à vous soucier de savoir s' il s'agit d'une chaîne ou d'un entier. Peut-être que les programmeurs Python, ou si vous avez créé un script Java, vous trouverez cela vraiment utile Cependant, des erreurs peuvent se produire pendant l'exécution, et c'est à ce moment que votre application est réellement en cours d'exécution. Il y a donc quelques problèmes associés au mot clé dynamique auxquels vous devez faire attention. Donc, le mot clé dynamique vous semble probablement très intéressant. Nous n'avons pas à nous soucier des types, nous n'avons pas à les convertir en différents types. Nous pouvons simplement l'utiliser pour tout. Tu sais, pourquoi pas ? Et peut-être qu' il y a une légère performance ici, mais sinon, elle semble plutôt bonne, non ? Eh bien, parlons des inconvénients de l'utilisation de la dynamique en ce moment Mais je vais d'abord présenter un exemple dans lequel nous travaillons avec des objets personnalisés. Donc ce que j'ai ici, un cours de jeu vidéo, c'est assez simple. Il comporte quatre champs privés, un constructeur, un exemple de méthode et juste un exemple de propriété publique qui porte juste le titre du jeu vidéo. Cela ne fait pas grand-chose. J'ai instancié la classe. Ici, j'ai un objet de jeu vidéo appelé Game One. Si vous avez déjà suivi mes tutoriels 00, lorsque nous utiliserons cette instance. Ici, nous pouvons voir différentes choses. Nous pouvons voir notre méthode get publisher. Et nous pouvons voir notre propriété ici, le titre. Nous pouvons le voir lorsque cette fenêtre apparaît ici, c'est comme si Visual Studio nous aidait Et un autre mot s' appelle Intellisense. Et ce que fait Intel Sense, c'est qu'il nous offre simplement de belles fonctionnalités de saisie semi-automatique Cela nous évite de taper. Par exemple, nous pouvons double-cliquer dessus, puis nous avons accès à la méthode numéro un. Nous savons que la méthode existe. Deuxièmement, nous savons que nous pouvons accéder à la méthode, qu'elle n'est pas privée ou quoi que ce soit d'autre. Troisièmement, si nous double-cliquons dessus, nous n'avons pas à nous soucier des fautes frappe, donc c'est très bien Il nous donne également les types de paramètres que nous pouvons utiliser et nous permet également de connaître les types de retour. Intel Sense, également connu sous le nom de Visual Studio, nous aide donc est une très bonne fonctionnalité et je recommande vivement de l'utiliser. Toutefois, lorsque vous utilisez le mot clé dynamique, Intellisense n'est pas disponible Il y a une bonne raison à cela, mais c'est l'un des principaux inconvénients de l' utilisation du mot clé dynamique. Jetons un coup d'œil à cela maintenant. Pour le moment, je suis juste en train de configurer un jeu ici. Ensuite, je veux obtenir l'éditeur, par exemple, stockons-le simplement dans une chaîne. Je vais le stocker dans une chaîne appelée Pub. Et puis je veux juste l' afficher dans la fenêtre. Il ne se passe pas grand-chose ici. Il devrait afficher Blizzard, par exemple. Lancez le logiciel maintenant, et nous verrons Blizzard Il semble que cela fonctionne très bien. Transformons-le maintenant en un type dynamique. Maintenant, j'ai un objet dynamique appelé Game One. Elle a la valeur de la nouvelle instance de la classe de jeu vidéo. Comme je l'ai dit, il n'est pas nécessaire que ce soit un double entier. Il peut s'agir d'un type complexe, d'un tableau, d'une liste ou même d'une classe personnalisée, comme la classe de jeu vidéo. Absolument, cela ne pose aucun problème. Entièrement pris en charge par le mot-clé dynamique, et encore une fois, c'est comme l' objet dans les coulisses. Jusqu'à présent, tout va bien. Et si je lance l'application, on obtient exactement le même résultat, sans aucun problème. Mais regardez ce qui se passe. Maintenant, je mets un point après le premier match. Vous pouvez voir que nous avons perdu tout cela au sens du terme. Visual Studio refuse désormais de nous aider. Nous ne savons pas quelles méthodes nous avons notre disposition à moins, vous savez, de les examiner et peut-être de les copier-coller. Cependant, cela pose beaucoup de problèmes de cette façon. Le fait est que cela dépend de la Terre pour ne pas faire d'erreurs. Premièrement, comme je l'ai déjà dit, c'est peut-être une méthode privée, donc nous ne pouvons même pas y accéder en dehors de cette classe. Donc, vous savez, nous pourrions créer un gros problème ici. Donc, si je lance l'application, elle dit maintenant qu'elle est inaccessible en raison de son niveau de protection. Et si je faisais une faute de frappe ? Et si je mettais F ici ? Vous pouvez voir qu'il n'est pas surligné en rouge. Exécutez l'application et elle ne contient aucune définition. Eh bien, c'est parce que je l'ai mal orthographié et que c'est un accident Mais Visual Studio ne m'aide pas. Je n'ai aucun Intellisense. C'est donc l'un des inconvénients de l' utilisation du mot clé dynamique Tu n'as absolument aucun intellisense. Et Intellisense est vraiment utile, et beaucoup de gens le tiennent pour acquis Mais il vous donne toutes les méthodes et propriétés que vous pouvez réellement utiliser sur un objet. Vous vous demandez peut-être quelle était cette sorcellerie d'avant où vous avez mal orthographié « éditeur » et où il n'y avait Pourquoi c'était ça ? Qu'est-ce qui se passe ici ? Pourquoi le programme a-t-il pu vous exécuter ? Ce n'est normalement pas autorisé. Eh bien, oui, c'est vrai parce que si j' en fais à nouveau un objet de jeu vidéo, vous pouvez voir que nous aurons une ligne rouge. Et c'est parce qu' au début de cette vidéo, j'ai dit que C Sharp était un langage à typage statique. Et cela signifie simplement que tout est capturé au moment de la compilation. Je ne peux donc même pas compiler l'application car c' est là que les erreurs sont détectées. Cependant, lorsque vous utilisez le mot clé dynamique, tout cela disparaît. Rien de dynamique n' est détecté au moment de la compilation. L'erreur a donc disparu. Le programme peut être compilé. Le programme se compile lorsque la fenêtre noire apparaît, comme vous pouvez le voir ici Mais maintenant, l'erreur est détectée au moment de l'exécution. Et c'est l'erreur qui est renvoyée. C'est ce qu'on appelle une exception de classeur d'exécution, ici. Donc, exception Run Time Binder. Cela se produit donc au moment de l'exécution alors que votre logiciel est réellement en cours d'exécution. Bref, lorsque vous utilisez le mot clé dynamique comme celui-ci, Visual Studio vous laisse toute latitude Ça dit littéralement, OK, fais ce que tu veux. Si quelque chose est dynamique, appelez le message de votre choix, appelez la propriété de votre choix. Tu sais, ça n'a pas d'importance. Je ne vais pas vous donner de lignes rouges. Je vais vous laisser compiler votre logiciel, vous pouvez faire ce que vous voulez. Vous pouvez introduire une erreur humaine, vous avez pratiquement toute latitude. C'est donc un avantage, ou peut-être un inconvénient majeur, de l'utilisation du mot clé dynamique. C'est donc à vous de choisir à cet égard. Mais les langages de programmation tels que Python, Ruby même Java Script sont des langages à typage dynamique Cependant, C Sharp est un langage à typage statique. Vous vous demandez peut-être pourquoi un langage à typage statique supporte cela en premier lieu Tu sais, pourquoi en avons-nous même ? Je pensais que c'était un langage typé statiquement. Et si vous voulez créer un logiciel qui fonctionne avec le logiciel Python ? Par exemple, si Python et Ruby sont des langages à typage dynamique, mon logiciel doit peut-être fonctionner avec eux. Et une façon sophistiquée de le dire s'appelle interopérabilité, ou interruption en abrégé. Si je veux créer un logiciel qui fonctionne avec le logiciel de quelqu'un d'autre, mais qu'il utilise un langage différent, c'est là que le mot-clé dynamique est en fait très utile, même avec le modèle d'objet du document. Maintenant, c'est quelque chose que le HTML et le XML utilisent lorsqu'ils utilisent des choses comme ça. Vous ne savez tout simplement pas quelles méthodes et propriétés sont disponibles avant l'exécution. C'est pourquoi c'est très utile. Tout n'est pas connu au moment du compilateur. Lorsque votre logiciel compile, il n'est parfois mis à votre disposition qu'au moment de l'exécution. C'est pourquoi le mot clé dynamique est vraiment utile. Donc, quelques terminologies sophistiquées pour vous. Si nous avons un objet de jeu vidéo simple, comme nous en avons déjà parlé, et que nous aimerions dire, appelez une méthode appelée get publisher, alors voici un exemple de ce que l'on appelle la liaison anticipée. Et cela signifie simplement, d'accord, cette méthode est disponible pour nous, nous l'utilisons ici même. Toute erreur sera détectée au moment de la compilation. Lorsque nous cliquons sur ce petit bouton gris et que la reliure est faite en avance, tout fonctionne, il n'y a aucune erreur. Par exemple, si je l'ai fait, il y a un exemple d'erreur de liaison anticipée. Cependant, si c'était dynamique et que nous essayons de le faire maintenant, nous ne savons pas si cette méthode est disponible. Nous ne savons pas si cette méthode est publique, privée ou protégée en interne. Nous ne savons pas si je l'ai correctement orthographié. Cependant, lorsque j'exécute l'application , la liaison est effectuée pendant l'exécution. Pour l'instant, d'accord ? Oui, la méthode est disponible. Nous venons de l'appeler, nous avons un résultat. Il s'agit d'un exemple de reliure tardive, de reliure anticipée avant une reliure tardive pendant la durée d'exécution. y a certaines choses que vous entendrez peut-être dans le futur, mais j'ai pensé que je pourrais en parler maintenant. Une autre chose que je n'ai pas mentionnée était la dynamique. Si vous définissez une variable, par exemple un entier simple ou quelque chose comme ça, ce que vous voulez vraiment, le type n'a pas d'importance. Vous n'avez pas besoin de l'initialiser. Tu peux, si tu veux. n'y a aucun mal à le faire, mais ce n'est pas obligatoire. Vous n'avez pas besoin de dire, OK, cela fait cinq. Tu pourras régler ça plus tard. C'est une autre chose que vous pouvez faire avec le mot clé dynamique. Une autre chose que vous pouvez faire avec la dynamique est même transmettre aux méthodes et de la renvoyer hors des méthodes. Je viens de configurer un exemple de méthode appelé Echo. Cela ne fera que refléter la valeur de l'éditeur. Par exemple, je connais un éditeur de jeu vidéo qui se le procurera pour moi, n' ai pas d'Intellisense Je suppose que c'est correctement orthographié. Ensuite, nous allons simplement l' afficher à l'écran. Commentons celui-ci , puis nous appellerons la méthode réelle. Ça a l'air plutôt bien. Nous transmettons l'objet de jeu dans lequel est dynamique en tant que paramètre à la méthode et nous faisons écho au résultat de la méthode get publisher. Exécutons le programme. On dirait que ça marche. Vous pouvez le voir ici, mais pas seulement comme je l'ai mentionné, nous pouvons également renvoyer le mot-clé dynamique. J'appelle donc ici la méthode qui ne prend désormais aucun paramètre. J'initialise un nouvel objet de jeu vidéo et je le renvoie instantanément Mais je renvoie le mot-clé dynamique car je ne veux pas d'objet de jeu vidéo. Ensuite, je saisis le résultat dans un nouvel objet de jeu dynamique, puis je trouve l'éditeur. Vous pouvez donc voir que cela fonctionne également comme un retour dynamique. Vous pouvez vous déplacer sans aucun problème. Résumons donc le mot clé dynamique dès maintenant. Le mot clé dynamique, nous n'avons pas à nous soucier des types, nous n'avons pas à nous soucier des types de casting. Toute la boxe et la conversion en boxe sont faites pour nous. C'est génial. Cependant, cela a un impact sur les performances. Encore une fois, nous devons nous soucier de l'orthographe correcte de nos méthodes pour déterminer si elles sont réellement accessibles. Plein de choses différentes. En résumé, la dynamique n'est pas utilisée dans une application C Sharp classique Si vous créez simplement une calculatrice ou quelque chose d'assez simple, vous ne devriez pas vraiment utiliser le mot clé dynamique. Toutefois, si vous travaillez avec d'autres logiciels développés dans des langages dynamiques, ou peut-être avec ce que l' on appelle un objet com ou modèle d'objet de document pour HTML. C'est là que le mot-clé dynamique brille et c'est là que vous devez l'utiliser, car dans de tels cas, vous n'avez de toute façon pas accès à ces méthodes au moment de la compilation Il est possible que vous n'y ayez accès qu'au moment de l'exécution. C'est donc ici que vous utiliseriez le mot clé dynamic dans ce sens. Il n'est donc pas utilisé dans les applications de boutique courantes. C'est donc l'un de ceux qui proposent des scénarios où vous ne vous demandez jamais vraiment si je dois utiliser le mot clé dynamique. Il vous est généralement présenté. D'accord, oui, il semble que je devrais vraiment utiliser le mot clé dynamique. Et c'est ce qui se produit généralement lorsque vous concevez l'architecture d'un nouveau logiciel , par exemple Donc, le mot clé dynamique propose une vérification de type dynamique, et il s'agit essentiellement du type de données de l'objet, mais sous stéroïdes. Merci d'avoir regardé. J'espère que cela vous a été utile. 68. 16-3. Le mot-clé et l'inférence de type var: Sur la base de tout ce que nous avons appris jusqu'à présent. Et si je vous disais que nous n'avons plus besoin de types de données ? Par exemple, nous n'avons pas besoin d'un type de données d'objet de jeu vidéo. Nous n'avons pas besoin d'un type de données de liste. Nous n'avons pas besoin d'un type de données de type tableau de chaînes, pas même d'un Interble ou d'un caractère Tout va bien et le logiciel va se compiler. Qu'est-ce qui se passe ici, bordel ? Eh bien, permettez-moi de vous présenter quelque chose de complètement différent. Maintenant, dans ce tutoriel, je vais parler du mot Varki en do dièse Cela ressemble à quelque chose comme ça. Si vous n'avez pas regardé mes précédents tutoriels sur le mot clé dynamique où je parlais de la vérification de type dynamique et de la vérification de type statique, toutes ces bonnes choses, je vous recommande vivement de les regarder avant de poursuivre ce didacticiel. Sinon, vous aurez plus de mal à comprendre les concepts présentés dans ce didacticiel. Alors, qu'est-ce que le mot clé Var ? Comment fonctionne-t-il ? Eh bien, nous pouvons utiliser le mot clé Var définir quelque chose comme une variable. Par exemple, nous avons une variable entière ici et nous l'avons définie sur 55. Nous pourrions également le définir comme un v, ce qui ressemble à un type de données Var. Toutefois, Va n'est pas un type de données. Le mot clé Var est un raccourci pour OK. Déterminez de quel type de données il s'agit réellement lorsque vous compilez votre application, par exemple. Toutes les vérifications utilisant le mot clé Var sont donc effectuées au moment de la compilation. Souvenez-vous maintenant que dans notre dernier didacticiel, nous avons parlé du mot clé dynamique et de la façon dont tout ce qui a trait à un mot clé dynamique était défini au moment de l'exécution. Par exemple, les méthodes existent-elles ? Les propriétés existent-elles ? Et puis ça les lie en quelque sorte dans une reliure tardive. Au moment de l'exécution, eh bien, le Va est effectué au moment de la compilation. Ainsi, par exemple, si j'essaie d'appeler une méthode sur une variable var , par exemple, une erreur se produira si la méthode n'existe pas. Mais nous y reviendrons plus tard. Jetons un coup d' œil à un petit exemple utilisant le mot clé var , puis nous partirons de là. Jetons un coup d'œil à quelques exemples simples dès maintenant. Ici, j'ai une variable locale appelée test. Mais plutôt que de lui donner, disons, un entier ou une chaîne ou quelque chose comme ça, j'utilise le mot clé var ici. Et comme je l'ai déjà mentionné, c'est à Visual Studio et au compilateur de déterminer de quel type de données il s'agit. Je dis Visual Studio parce que je viens de définir la variable ici. Et si je le survole ici, vous pouvez voir qu'il pense qu' il s'agit d'un entier Si je le remplace par une chaîne, peu importe ce qu' il y a dedans. Il peut être vide. Je survole le test, et maintenant c'est un type de données de chaîne Ce qu'il fait, il détermine le type de données en fonction de ce à quoi vous l'initialisez Je l'ai initialisé à une chaîne. Ici, vous pouvez voir que lorsque je le survole, il s'agit d'un type de chaîne de données, comme avant Il peut s'agir d'un entier ou même d'un double, par exemple, maintenant c'est un double. Maintenant, lorsque je compile l'application, c'est là qu'elle détermine si quelque chose est valide ou invalide en fonction de ce que vous avez fait. Il s'agit du processus de compilation et c'est là qu'il détermine le type de données dont il s'agit au moment de la compilation. C'est un exemple simple qui montre Var n'est pas un type de données. Mais vous pouvez voir qu'il base en fait son type de données sur ce à quoi vous l'initialisez Que se passe-t-il si je ne m'initialise pas ? Eh bien, ce n'est pas possible. Vous ne pouvez pas réellement définir quelque chose avec le mot clé var sans lui donner de valeur, car le système ne peut pas déterminer un type de données à partir de celui-ci. Chaque fois que vous utilisez le mot clé var, vous devez toujours l'initialiser à partir de là pour qu'il puisse déterminer de quel type de données il s'agit, par exemple une chaîne Le processus qui consiste à déterminer le type de données en fonction de la valeur d'initialisation, eh bien, il existe un terme sophistiqué pour cela , appelé inférence de type Vous entendrez peut-être cela dans le futur. C'est ce qu'on appelle l'inférence de type, et c'est là que nous devinons le type de données en fonction de la valeur initiale ici Maintenant, notre variable locale ici, le type, est une chaîne car elle est basée sur la valeur d'initialisation ici Ce que nous ne pouvons pas faire alors, c'est simplement le convertir en un type totalement différent. Vous pouvez le voir ici. Impossible de convertir le type en chaîne une fois cette opération initialisée. Par exemple, il s' agit désormais d'une chaîne. C'est à peu près une corde pour toute sa durée de vie. Nous ne pouvons pas alors, d'accord, faire un entier, en faire un booling Nous ne pouvons pas le faire avec le mot clé Var. Regardons un exemple avec des objets plus complexes. Maintenant, par exemple, définissons un objet de jeu. Il s'agit de notre cours de jeu vidéo où nous transmettons simplement quelques exemples de valeurs. Ici, vous pouvez consulter le cours ici. Il ne se passe pas grand-chose. Champ privé, constructeur et exemple de méthode. Ce que je vais faire, c'est simplement appeler cet exemple de méthode appelé get publisher back out here. Je suis en train de configurer un nouvel objet de jeu vidéo, mais je le stocke dans un jeu ici, qui utilise le mot-clé Var. Maintenant, en utilisant cet objet de jeu, vous pouvez voir que j'ai Intellisense complet ici j'ai l'aide complète de Visual Studio Contrairement au mot clé dynamic, car souvenez-vous que dans le dernier tutoriel lorsque j'ai parlé de dynamique, tout est défini au moment de l'exécution. Nous n'avons donc pas du tout d' Intellisense, car tout cela est déterminé au moment de la compilation J'ai alors un accès complet à l'Intellisense. Je ne vais donc pas faire de fautes de frappe, de méthodes de supposition, appeler des méthodes qui sont peut-être privées et je les appelle en dehors de la classe actuelle Je ne vais pas faire ces erreurs comme ferais peut-être avec le mot clé dynamique. Donc, si je lance l'application, vous pouvez voir que je trouve l'éditeur sans problème et que j'ai un accès complet à l'Intellisense disponible Parlons donc de quelques pièges l'utilisation du mot clé Var Qu'est-ce que je ne peux pas en faire ? Et pourquoi est-ce mauvais ? Par exemple ? Eh bien, contrairement au mot clé dynamique, Var n'a pas vraiment d'inconvénients ni d'impact négatif. Cependant, il y a quelques inconvénients. Par exemple, nous ne pouvons pas utiliser le mot clé var avec des méthodes. J'ai donc ici une méthode de test. Si j'essaie de renvoyer quelque chose de type var, cela ne me le permettra pas. De même, si je l'utilise comme paramètre et que je lui donne juste un nom, encore une fois, il ne me le permettra pas non plus. C'est simplement parce que Visual Studio ne dispose pas de suffisamment d'informations pour deviner le type fonction d'un retour ou d'un paramètre. Ou du moins c'est ce que je suis amené à croire. Mais vous ne pouvez pas utiliser le mot clé var comme paramètre d'une méthode, ni même renvoyer un v à partir d'une méthode. Ce n'est tout simplement pas possible. Mais avec le mot clé dynamic par exemple, vous pouvez le faire, vous ne pouvez pas le faire avec le mot clé var. Examinons un autre inconvénient potentiel de l' utilisation du mot clé Var. Maintenant, nettoyons certains de ces trucs ici. Ce que je vais faire, disons par exemple, je veuille créer un logiciel financier. Je veux qu'il calcule l'argent, mais je veux un haut degré de précision décimale Je ne veux pas perdre d'argent parce mon logiciel n'autorise pas assez de décimales C'est assez facile à faire. Dans un cas comme celui-ci, j'ai besoin d'un type de données décimal Si vous vous souvenez de mon premier tutoriel où je parlais de décimales, nombres flottants et de doubles Si vous vous souvenez, la décimale a le plus haut degré de précision, donc beaucoup de décimales Les chambres doubles se situent quelque part entre les deux. Et les nombres flottants sont ceux qui ont le moins de précision et le moins de décimales Je veux une décimale parce que je travaille avec de l'argent, je ne veux pas que l'on perde quoi que ce soit Je vais créer une nouvelle variable. Il va utiliser le mot clé var et je vais l'appeler money. Maintenant, je vais l' initialiser. Peut-être que la valeur n'a pas vraiment d'importance par exemple, mais je vais peut-être mettre quelque chose comme ça. En fait, non, mettons-le juste à zéro. Je l'ai donc initialisé zéro et maintenant, si je le repense, vous pouvez voir qu'il est supposé que le type de données est double Maintenant, le double équivaut un degré de précision moyen, mais il n'y a pas d'erreur. Vous savez, il n'y a rien de mal à cela d'un point de vue syntaxique. C'est parfait. L'application s'exécute. Je vais indiquer zéro ici. Maintenant, le système ne connaît pas mes intentions, il ne le sait pas. Je souhaite créer une application basée sur l'argent. En fait, je veux un nombre élevé de décimales. Je veux que ce soit une décimale dans les coulisses. Alors, comment puis-je m'y prendre ? Eh bien, lorsque vous définissez une décimale, vous devez simplement mettre m juste là Et si j'ai peur de l'argent, tu peux voir que c'est maintenant une décimale, pas un double Mais vous pouvez voir que ce n'est qu'une erreur humaine. Je pourrais facilement oublier d' écrire ce m et maintenant j'ai un double. Alors peut-être que si je compile mon logiciel, le donne à mes clients, ils commencent à l'utiliser par exemple. Ils remarquent ensuite qu'il manque un peu d'argent en raison de l'arrondissement, car cela est supposé être un double Je perds donc beaucoup de précision en commettant cette petite erreur. Ce logiciel est responsable de la perte d'argent, ce qui n'est pas une bonne chose. Et encore une fois, il se peut que vous ne perdiez pas d'argent. Vous pourriez gagner de l'argent, mais le fait est que c'est faux. Je pourrais donc facilement oublier d'utiliser ce M ici et obtenir une décimale C'est donc quelque chose que vous devez faire très attention. Je vais donc vous le souligner maintenant, si je règle simplement cette valeur monétaire à un degré élevé de précision décimale, parce que nous travaillons avec de l'argent Lorsque je lance l'application, vous pouvez constater que toute cette précision a été tronquée, donc il manque beaucoup d' informations Et c'est juste pour le fait d'utiliser un m ici. Donc, vous savez, c'est assez facile à faire. Alors que si je devais le trouver sous forme décimale pour commencer Et puis je fais quelque chose comme ça, alors vous pouvez voir qu'il y a une ligne rouge, sorte que le logiciel ne compilera même pas. Il y a une erreur. Et cela revient à dire , d'accord, si vous avez besoin d'une décimale, vous devez utiliser le suffixe M ici Je ne commettrai jamais cette erreur. Si je définis explicitement cette variable monétaire comme un type de données décimal, il s'agit d'un scénario particulier lequel l'utilisation d'un mot clé Var peut créer des problèmes À l'avenir, je voudrais montrer un autre exemple concernant le mot clé Var et inconvénient potentiel de son utilisation. Ici, j'ai mon cours de jeu vidéo ici. Il y a plusieurs champs ici. Ce que je vais faire, c'est simplement copier ces champs et les déplacer dans la méthode principale ici afin de pouvoir illustrer quelque chose. Ce que j'ai, j'ai ces différents types ici. J'ai des entiers, des chaînes, liste d'entiers et aussi un objet de jeu Ce que je vais faire, c'est que plutôt que d'avoir ces types de données ici, je vais tous les remplacer par le mot clé Var. Et vous remarquerez quelque chose lorsque je modifie les informations du jeu pour utiliser le mot clé Var. Maintenant, nous devons lui donner une valeur avant de pouvoir le laisser comme ça. Ce que l'on appelle null n'a aucune valeur, et nous parlerons de null dans un prochain tutoriel. Mais maintenant, il a réellement besoin d'une valeur car il doit déterminer le type de données à partir du moment où vous instanciez l'objet. Donc maintenant, on ne peut pas laisser ce champ vide comme ça. Nous devons lui donner une valeur. C'est un point important à noter. Lorsque vous utilisez le mot clé var, nous devons l'initialiser Ce que je vais faire, c'est simplement les remplacer par le mot clé Var. Nous pouvons donc également voir une dernière chose. Maintenant, l'autre inconvénient, peut-être un inconvénient potentiel, ou du moins une prise de conscience, est que lorsqu'on examine les variables déclarées ici, il est difficile de dire de quel type de données il s'agit. Peut-être pouvons-nous comprendre que la console est une chaîne et le titre est une chaîne, etc. Mais nous pouvons voir le zéro et savoir qu'il s'agit d'un entier. Mais en l'utilisant, en particulier n'importe où ailleurs dans l'application, nous devrions survoler la variable à chaque fois et déterminer qu'il s'agit d'un entier en regardant uniquement ce nom Évidemment, il y a var à côté, donc nous ne voyons pas non plus le type de données int À première vue, il est un peu difficile de savoir de quel type de données il s'agit. Peut-être pourrions-nous être plus prudents avec noms de nos variables et peut-être les appeler rating int, ou peut-être rating number. Et puis nous savons dès le premier coup d'œil que, d'accord, c'est un chiffre. C'est particulièrement utile lors du débogage, mais c'est juste quelque chose à noter lors de l'utilisation du mot clé var, en particulier lors de la déclaration des variables Ici, ce type d' informations explicites concernant le type de données a disparu. Nous ne pouvons vraiment avoir que la valeur initiale à examiner. Nous devons passer notre souris sur chacune d'elles juste pour avoir une idée précise de quel type de données il s'agit Ainsi, lorsque vous avez des logiciels volumineux et complexes et que vous essayez de déboguer, vous savez, des centaines de variables, cela peut prendre beaucoup de temps de déterminer le type de variable, et il y a peut-être un problème de type Peut-être que vous essayez d'introduire une chaîne dans un entier, par exemple. S'il s'agit d'un bogue potentiel, cela peut prendre, vous savez, un peu plus de temps pour le résoudre si nous n'avons pas de types explicites ici. Et nous devons en quelque sorte passer notre souris sur chacune d'elles pour déterminer leur type Et ce n'est en aucun cas un facteur décisif, cela vous oblige simplement à prendre l'habitude de nommer correctement vos variables. Par exemple, une variable appelée numéro d' évaluation peut être un meilleur nom qu'une simple évaluation. Cela donne un peu plus d'informations sur les données que vous stockez dans cette variable. Au contraire, cela vous apprend à être un meilleur développeur. La dernière chose dont je veux parler est de savoir quand dois-je utiliser le mot clé Var ? Dois-je l'ignorer complètement et le conserver comme un élément de connaissance ou dois-je l'utiliser tout le temps ? Y a-t-il des inconvénients ? Y a-t-il des raisons pratiques ? Eh bien, beaucoup de gens utilisent le mot clé Var pour tout. J'ai examiné les logiciels et ils n'utilisent même pas de types de données, ou du moins presque tout ne contient le mot clé Var. Je veux dire, il n'y a rien de mal à cela, surtout si vous utilisez des types de variables descriptifs. Vous êtes plutôt prudent lorsque vous définissez des nombres décimaux et des nombres flottants, y a donc rien de mal à utiliser le mot clé Var. Vous pouvez utiliser le mot clé Var pour à peu près tout, ou vous pouvez utiliser des types de données standard. C'est à vous de décider. Mais dans certaines situations le mot clé Var présente quelques avantages. Alors laissez-moi vous les montrer maintenant. Nous allons donc clarifier certains de ces exemples ici. Imaginons, par exemple, nous créons un logiciel qui gère plusieurs boutiques de jeux vidéo. Nous avons notre cours de jeu vidéo ici. Chaque magasin qui vend des jeux vidéo aura une liste de jeux vidéo dans sa collection. Cela ressemblera à ceci. Cependant, nous voulons gérer plusieurs boutiques. Chaque magasin aura une liste de jeux vidéo, mais peut-être voulons-nous cataloguer ce que chaque magasin possède. Dans une telle situation, nous aurions une liste de jeux vidéo. Et ce sera comme l' Ultimate Game Collection, par exemple. Donc, dans ce cas, regardez ce type de données ici. C'est assez long, c'est assez ennuyeux à écrire, c'est même assez compliqué à regarder. Vous pourriez même développer cela en disant : «  J'ai une liste ou une liste d'une liste ». Vous savez donc que ce genre de situation difficile continue. Tu peux voir à quel point c'est gros. Mais dans une telle situation, vous pouvez utiliser le mot clé var. Et cela ne fait que simplifier tout cela. Cela permet d'économiser beaucoup de temps à taper. Et vous pouvez constater que vous disposez d'un raccourci pratique dans les cas où vous avez types de données assez volumineux, que vous ne voulez pas tout saisir et que, pour une raison ou une autre, cela ne vous le propose pas à la portée de tous. Ou peut-être souhaitez-vous le parcourir en boucle et ne pas écrire tout ce type de données. Il est assez facile d' utiliser le mot clé Var. Tu sais, ce n'est pas du tout un problème. Et, vous savez, dans de tels cas, vous ne définissez pas décimales ou de doubles et risquez de perdre en précision décimale, alors quelque chose comme ça convient parfaitement C'est un moyen assez simple de le faire. Et vous pouvez voir à quel point il était rapide de taper seulement trois caractères sur le clavier par rapport à tout cela ici. Juste un exemple, il y en a aussi quelques autres , que nous n'avons pas encore abordés, mais nous allons aborder l'un d'entre eux. L'un des deux exemples est donc ce que l' on appelle les requêtes de liens. Et un autre exemple est la création d'objets anonymes, dont nous parlerons bientôt. Et le mot clé var est très utile pour créer des objets anonymes. Mais pour résumer, le point à retenir de ce didacticiel est que var n' est pas un type de données Var est juste une bonne façon de dire, d'accord, déterminons le type de données fonction de l'initialisation Et ce processus s'appelle l'inférence de type. Il s'agit donc du mot clé var en C sharp. 69. 16-4. Types anonymes: Dans ce tutoriel, je vais parler des types anonymes dans C shop. Si vous n'avez pas regardé mon tutoriel sur le mot clé Var, je vous recommande vivement regarder avant de regarder ce tutoriel. Alors, quels sont les types anonymes ? Jetons un coup d' œil à un exemple ici. Ici, j'ai un cours appelé jeu vidéo, et je crée quatre objets. Peu importe ce qu'il y a dedans, mais il y a un constructeur, des champs, diverses propriétés et des choses comme ça Vous pouvez donc voir dans cet exemple que je configure quatre objets ici en les préfixant avec nos classes, comme un type de données Ensuite, j'instancie un nouvel objet avec tous ces paramètres Mais pour cela, je dois créer une classe. Maintenant, ma classe doit avoir un constructeur. Eh bien, il n'est pas nécessaire d'en avoir un, mais j'en ai un et j'en veux un. Il possède tous ces champs privés, certaines méthodes, propriétés et autres choses de ce genre. Il y a donc tout cela dans cette classe ici, juste pour créer des objets ici. Mais avec ce que l' on appelle les types anonymes, nous n'avons pas besoin de définir de classe. Vous voyez cette classe ici où nous définissons le jeu vidéo. Nous n'avons besoin d'aucune de ces définitions. Nous n'avons pas besoin de ce fichier. Nous n'avons pas besoin de ce cours en soi. Alors, comment est-ce que cela fonctionne ? Pourquoi serait-il avantageux pour nous de ne pas avoir de classe mais de devoir instancier à partir de la Cela n'a aucun sens pour moi. Veuillez expliquer les types anonymes, ils sont utiles pour plusieurs raisons. L'une des principales raisons est ce qu'on appelle Link. Maintenant, nous n'avons pas parlé de Link, donc je n'en parlerai pas maintenant. Mais dans une autre situation, par exemple, vous êtes en train de prototyper un logiciel Vous voulez créer un logiciel rapide pour vous assurer que quelque chose fonctionne. Ou peut-être que vous ne voulez pas créer une classe entière avec beaucoup de méthodes et de choses. Parce que ce que vous créez est quelque chose de très simple et rapide. Il y a donc vraiment deux raisons. Mais l'un des avantages est la rapidité, et un autre avantage est que si vous ne créez pas quelque chose de particulièrement compliqué, il n'a peut-être que deux propriétés et vous n'en faites pas grand-chose. Ensuite, vous pouvez utiliser ce que l' on appelle des types anonymes. Alors, comment créer une instance d'une classe qui n'existe pas ? Eh bien, c'est une très bonne question. Et cela commence par le mot clé var. Donc, ce que je vais faire, c'est simuler cet objet de jeu vidéo ici, mais plutôt que d'utiliser la classe de jeu vidéo, je vais utiliser un type anonyme. Il faut donc les supprimer tous et nous allons simplement utiliser celui-ci comme exemple. Comment puis-je instancier une classe qui n'existe pas en utilisant des types anonymes ? Eh bien, comme la classe n'existe pas, elle est donc anonyme, nous ne pouvons pas vraiment la commencer par un nom de classe ici. C'est ici que nous utilisons le mot clé var dont nous avons parlé dans un précédent tutoriel. Maintenant, nous voulons lui donner un nom, je vais juste l' appeler game on. Nous devons maintenant instancier un nouvel objet anonyme. Comment s'y prend-on ? Nous utilisons le nouveau mot clé, mais maintenant nous utilisons des bretelles bouclées Maintenant, à l'intérieur de ces bretelles bouclées, nous allons configurer les propriétés de notre classe Cette ligne ici imite à peu près cette ligne ici. La seule différence est qu'il n'est pas nécessaire de définir une classe. Cette classe n'a pas besoin d'exister. Nous pouvons les appeler comme bon nous semble. Peu importe, car c'est un type anonyme. Si j'utilise mon objet ici, si je mets un point ici, vous pouvez voir que je peux accéder à toutes les propriétés que j'ai définies ici. Je les ai orthographiés en utilisant des caractères fous comme Gampd, mais vous pouvez voir que cela apparaît dans la liste et je peux y accéder en tant que propriété Ici, nous avons une console , un éditeur et une évaluation Vous pouvez voir que peu importe le nom que je leur donne, peu importe les valeurs que je donne. C'est purement anonyme car il n'a pas de nom, il n'a pas de classe. Comme il est anonyme, nous le stockons à l'aide du mot clé var dans un objet. Ici, vous pouvez voir que c'est très puissant. Nous n'avons pas besoin d'une classe, elle est totalement anonyme, et pour ce faire, nous utilisons simplement le nouveau mot clé ici. Mais il y a quelques exceptions à cette règle. Lorsque nous créons un type anonyme comme celui-ci ici, nous ne pouvons créer que des propriétés en lecture seule. n'y a pas de constructeur, il n'y a pas de méthodes, il n'y a pas de champs privés Imaginez si cette classe appelée jeu vidéo était un objet anonyme, alors les seules choses que vous pouvez avoir ici sont les propriétés en lecture seule, le titre, par exemple, note de l'éditeur, et leur lecture seule. Vous ne pouvez obtenir que les valeurs, vous ne pouvez les définir qu'une seule fois. Et c'est à ce moment-là que vous définissez le type anonyme, ici même, l'objet anonyme, mais dans les coulisses, c'est ce qui serait généré lorsque vous créeriez un type anonyme. Donc, lisez uniquement les propriétés, pas de constructeurs, pas de champs, pas de méthodes Ce sont donc les limites de l' utilisation de quelque chose comme ça. Cela ne s'arrête pas vraiment là. Lors de la création de types anonymes. Ici, ce que nous pouvons réellement faire, c'est placer un type anonyme dans un autre type anonyme. Nous pouvons créer un tableau de types anonymes. Nous pouvons donc faire plein de choses différentes avec eux. Permettez-moi de vous montrer un exemple dès maintenant. Dans cet exemple, j'ai un type anonyme ici dans un autre type anonyme. Si j'utilise mon type d'animal ici et que je passe au point, je peux sélectionner une espèce qui est également un type anonyme et accéder au bruit que l'animal peut faire. L'espèce pourrait être un chien, dont le nom de l' animal serait un chien, puis le bruit serait un bar. Par exemple, vous pouvez voir que j'ai en fait des types anonymes en cascade Ils sont très puissants dans lesquels ils travaillent. Et vous pouvez constater qu'en utilisant le mot clé Var comme avant, vous avez un contrôle total sur Intel Sense. Vous pouvez voir clairement tout ce que vous avez spécifié ici. C'est plutôt cool. Une chose que vous ne devriez pas vraiment faire, mais que vous pouvez faire est de transmettre ces types anonymes à des méthodes. Jetons un coup d'œil à un exemple. Maintenant, quand j'ai déjà parlé du mot clé var, vous ne pouvez pas avoir var comme paramètre pour une méthode, cela ne fonctionne pas. Ce dont vous auriez besoin, c'est du mot clé dynamique dans lequel cela fonctionnerait. Si j'appelle ensuite la méthode d'essai ici, je fais passer notre animal ici même. Ensuite, nous pouvons y accéder d'ici. Mais comme nous utilisons la dynamique, si vous regardez mon didacticiel dynamique, nous n'avons pas accès au sens Intel ici, mais nous pouvons l'utiliser Cependant, encore une fois, nous ne devrions pas vraiment utiliser la dynamique lorsque nous n'en avons pas besoin. Il est vraiment recommandé de ne l'utiliser que lorsque vous en avez absolument besoin. Je ne vois pas beaucoup de situations où vous pourriez transmettre un type anonyme à une méthode. fait, ils doivent simplement être utilisés dans le cadre des méthodes, ils sont définis. Mais si vous devez le faire, alors oui, vous pouvez utiliser le mot clé dynamique pour contourner ce problème. Vous pouvez donc voir maintenant que j'utilise Dynamic. Je n'ai pas accès à l'Intel Sense, mais je peux maintenant le transmettre à cette méthode ici. Voyons donc si cela fonctionne. Vous pouvez donc voir ici des aboiements Cela semble fonctionner assez bien Ceci est un exemple de type anonyme dans C shop car il s'agit d'un type anonyme et il n'en a aucun. C'est donc à ce moment que vous utiliserez le mot clé Var. Et vous pouvez voir ici que vous pouvez le transmettre de deux manières, mais vous devrez utiliser le mot clé dynamique pour le transmettre. Mais je ne recommande pas de le faire. Enfin, lors de la création de types anonymes, ne s'agit que de propriétés et, une fois définies, elles sont considérées comme étant en lecture seule. Et vous ne pouvez pas les modifier, comme vous pouvez le voir ici, sont des types anonymes dans C shop. 70. 17-1. Le mot-clé null: Dans ce tutoriel, nous allons parler du mot clé null. Le mot clé null ressemble à ceci. Qu'est-ce que le mot clé null et comment est-il également utilisé ? Pourquoi devrions-nous l'utiliser ? Si vous avez regardé mon précédent tutoriel où nous parlions de mémoire en pile et en tas, ainsi que de types de référence et de types de valeurs, vous allez comprendre ce didacticiel très rapidement Voici quelques objets de type référence, comme des listes, des chaînes, des tableaux, des objets de jeu vidéo par exemple Il s'agit d'une classe personnalisée. Ce sont tous des types de référence, et ils sont stockés dans le tas, qui est la zone de En revanche, il s' agit de types de valeurs simples, comme entiers, les booléens et les caractères êtes-vous déjà demandé quand vous déclarez une variable, alors nous ne l'initialisons pas, nous ne lui donnons pas de valeurs ? Vous pouvez voir que le logiciel compile, il fonctionne, ce n'est pas un problème Nous les avons déclarés, tout semble plutôt bon. Mais avez-vous déjà réfléchi aux valeurs par défaut de ces valeurs ? Si nous ne leur donnons pas réellement de valeur, quelle serait la valeur par défaut ? Est-ce que ce serait zéro ? Serait-ce le cas, qu'est-ce que ce serait ? Eh bien, jetons un coup d'œil. Je vais ajouter un point de rupture à la fin d'ici, puis je vais regarder dans la fenêtre des locaux. Lancez l'application. Maintenant, si nous arrivons ici à l'onglet « locaux », nous pouvons voir différentes choses à faire avec nos variables que nous venons de définir. Vous pouvez voir ici nos types de référence. Nous avons notre liste ici, nous avons notre objet personnalisé ici, notre tableau de chaînes ici, vous remarquerez quelque chose. La valeur actuelle est non. Mais si vous regardez ces types de valeurs tels que l'entier, le booléen et le caractère, ou si leurs valeurs par défaut sont légèrement différentes Généralement, un type de valeur aura une valeur par défaut de zéro. Si vous représentez Bolen comme zéro, ce serait faux. Un boolen comme un serait vrai. Vous pouvez voir que Bolen a également une valeur par défaut de zéro. Même cette variable de caractère a ici une valeur par défaut de zéro. Vous pouvez voir un schéma ici. Il semble que les types de référence aient une valeur par défaut nulle ou que toute valeur ait une valeur par défaut semblable à zéro. Dans cet exemple, que se passe-t-il ici ? Vous vous souvenez quand nous avons parlé des types de référence ? Lorsque nous avons un type de référence, un pointeur sur la pile est créé. Mais l'essentiel de l'opération, sont les données qui se trouvent dans le tas Le pointeur sur la pile pointe vers les données du tas. Nous avons maintenant déclaré un type de référence ici. Par exemple, cette liste et sa valeur par défaut sont nulles. Maintenant, ce que null signifie ici, c'est qu'il s'agit d'une référence nulle. Nous avons notre pointeur sur la pile d'appels. C'est dans la zone de stockage de la mémoire, mais nous n'avons encore rien sur le tas, nous ne l'avons pas instancié Cela signifie qu'il faut utiliser le nouveau mot clé. Lorsque nous instancions quelque chose à l'aide du nouveau mot clé, nous créons quelque chose dans la zone de mémoire. Dans cette partie, nous créons le pointeur sur la pile. Dans cette partie, nous créons en fait les données sur le tas et le pointeur pointe donc vers celui-ci Cependant, nous n'instancions rien pour le moment. Nous avons notre pointeur sur la pile, mais il ne pointe nulle part. Il n'y a aucune référence aux données contenues dans la mémoire en tas. Par conséquent, la valeur par défaut est null, ce qui représente une référence nulle. Ça ne mène nulle part. Cependant, dès que nous utilisons le nouveau mot clé, la valeur passe de zéro et elle pointe vers les données du tas Pensez à zéro comme au néant un pointeur nul ou à une référence nulle Cela ne mène nulle part, mais peut-être qu'il le fera plus tard. Par exemple, vous pouvez le voir ici, cela ne s'applique qu'aux objets de type référence, des objets compliqués comme nous en avons parlé précédemment. Cela ne s'applique pas aux objets de type valeur. Cependant, il y a là une petite condition. Cela s'applique aux objets de type valeur s' ils sont marqués comme nullables. Maintenant, nous allons parler de nullable plus tard. Ne t'inquiète pas pour ça. dans le cadre de cet exemple, null s'applique lors de la déclaration objets de type référence car nous avons besoin d'un pointeur, mais nous n'en avons pas. La valeur initiale est nulle, ce qui n'est rien. Jetons un coup d'œil à quelques exemples qui fonctionnent maintenant avec le mot clé null. Donc, ce que je vais faire, c'est produire une propriété, ou peut-être essayer d'utiliser l'une de ces méthodes ici avec ces types de référence. Je vais juste écrire dans la fenêtre de la console, je vais afficher une propriété aléatoire de cette liste. Par exemple, je vais parler du nombre de points de la liste. Jetons un coup d'œil à ce qui se passe ici. Maintenant, j'ai une ligne rouge. Vous pouvez voir l'utilisation d'une liste de variables locales non assignées. Il ne me permet même pas d'utiliser cet objet car il n'est pas assigné Mais attendez, je pensais que c' était nul par défaut. Eh bien, null se produit par défaut au moment de l'exécution, pas au moment de la compilation. C'est l'heure de la compilation. En fait, nous sommes en train de faire le développement ici. C'est l'heure de la compilation. Il ne me laisse même pas compiler l'application. Ce que nous devons faire au moment de la compilation, c'est simplement l'initialiser à null De cette façon, l'erreur disparaît et nous pouvons réellement exécuter le programme. Mais le compilateur nous aide dans ce domaine. C'est dire, écoutez, c'est nul. Vous ne devriez pas vraiment utiliser de propriétés sur une valeur nulle, sinon elle va tomber en panne. Mais en le trompant, nous avons fait disparaître cette erreur Je peux donc vous montrer un exemple d' utilisation de quelque chose qui est nul. Maintenant, la liste est nulle. J'essaie d'accéder à une propriété appelée count sur la liste d'objets nuls. Voyons ce qui va se passer. Maintenant, une erreur est apparue ici et elle indique une référence nulle, une référence objet d' exception, non définie sur une instance d'un objet Maintenant, vous verrez souvent cette erreur dans vos projets à venir avec C Sharp. Ce n'est qu'une de ces choses. Mais en gros, vous pouvez voir ici notre type de référence est nul. Si quelque chose est nul, nous ne pouvons pas utiliser de méthodes dessus. Nous ne pouvons pas utiliser de propriétés dessus car il n'a aucune valeur, il n'a pas de mémoire stockée sur le tas Il s'agit à peu près d'un pointeur vide d'un objet. Il n'y a rien là-bas. Il est nul, nous ne pouvons pas l'utiliser. Tout ce que nous avons à faire est instancier et de lui donner quelque chose Maintenant, si je lance l'application, vous pouvez voir ici que l'erreur a disparu parce que nous avons instancié l'objet et qu'il n'est plus nul C'est une chose à laquelle il faut être très prudent lorsque vous travaillez avec null. Je pense que tu as compris le point nul. Maintenant, par exemple, si j'ai une chaîne, supprimons certaines de ces informations ici. Si j'ai une chaîne, je vais l'appeler test. Je vais l'initialiser sur une chaîne vide. Et ce que j'essaie de dire, c'est qu'une chaîne vide, par exemple, n'est pas la même chose qu'une chaîne nulle. Nous avons parlé de null. Nous savons que c'est une référence nulle. Ce que font beaucoup de gens, c'est qu'ils sont un peu confondus avec le zéro. Ils pensent que c'est juste une valeur vide, comme une chaîne vide. Ce n'est pas vrai du tout. Et je peux vous le prouver en installant un bolen par exemple Et j'ai une condition qui compare cette chaîne vide ici à la valeur nulle, et vous verrez que c'est faux. Ce que je veux dire ici, c'est que si le test est égal à null, si une chaîne vide est identique à null, je peux même l'écrire comme ça, je n'ai même pas besoin d'une variable. Imprimez ensuite la valeur true si elle est identique, sinon false si ce n'est pas le cas. Vous pouvez donc voir que null n' est pas une chaîne vide. C'est une erreur de débutant, peut-être en pensant cela. Mais je pensais avoir mentionné que null n'est pas la même chose qu'une chaîne vide. Null est simplement une référence nulle. Une chaîne vide n'est que cela, une chaîne vide. J'espère que cela clarifie ce qu'est le nul comment il peut être utilisé et pourquoi il apparaît Dans notre vie quotidienne, nous développons des logiciels. Merci d'avoir regardé. 71. 17-2. Types de valeur nullables: Dans ce tutoriel, nous allons parler des types nullables Que sont les types nullables ? Dans notre dernier tutoriel, je vous recommande vivement de le regarder. Lorsque nous avons parlé du mot clé null, j'ai brièvement mentionné que les objets de type référence tels que les listes et les objets, si vous ne les initialisez pas, ils obtiennent la valeur par défaut null, qui est un pointeur nul Toutefois, pour les types de valeur, ceux-ci ont tendance à avoir la valeur par défaut de zéro. Mais si nous essayons d'utiliser le mot clé null avec un objet de type valeur, cela ne fonctionnera pas car nous ne pouvons pas vraiment lui donner de pointeur de référence. Comme il s'agit d'un type de valeur, il stocke une valeur telle que 3 456 par exemple, ou true Il stocke en fait la valeur d' un type de valeur dans la zone de pile de la mémoire. Alors, qu'est-ce qu'un type nullable ? Eh bien, un type de valeur nullable comme celui-ci est une instance où un type de valeur peut réellement stocker des valeurs nulles Alors pourquoi voudrions-nous le faire et comment le faisons-nous ? Ainsi, par exemple, lorsque j'ai essayé de le définir comme nul auparavant, cela n'a pas fonctionné. Cependant, si j'ajoute un point d'interrogation après le type de données ici, vous pouvez voir que l'erreur a disparu, elle a été résolue. Qu'est-ce qui se passe ici ? Eh bien, pour transformer un objet de type valeur, comme une boule, un personnage, des types simples. Si nous ajoutons un point d'interrogation à la fin ici, cela représente un type de valeur nullable Maintenant, cette variable est un type de valeur nullable. Maintenant, il peut prendre une valeur ou le mot clé null. Pourquoi voudrais-tu faire ça ? Quel est l'intérêt de tout cela ? Eh bien, imaginez que vous avez, par exemple, un registre de classe. Vous avez un petit logiciel qui indique l' assiduité des élèves dans votre classe. Supposons maintenant qu' une base de données soit attachée à la base de données, que vous ayez tous les noms des étudiants, leur prénom, leur nom de famille, toutes ces bonnes choses. Ensuite, vous avez un booléen dans la base de données et la valeur la base de données s'appellerait «  is in attendance Maintenant, si les enfants ne sont même pas encore arrivés en classe , nous ne savons pas s' ils sont présents. Nous ne pouvons pas vraiment dire vrai parce que nous ne le savons pas. Nous n'avons pas fait le registre, nous n'avons pas vérifié quels étudiants se sont présentés au cours. Mais si je stocke la valeur des chutes dans la base de données par défaut, je peux simplement la changer true si elles sont présentes dans la classe. Eh bien, je veux dire, cela signifie qu'ils ne sont pas présents, mais je ne suis pas encore sûre, car ils ne sont pas encore arrivés en classe. Dans de tels cas, vous voudrez peut-être une troisième valeur pour un Bolen par exemple Vous voudrez peut-être null si nous ne le savons pas encore. Si l'étudiant arrive et qu'il est là, nous pouvons dire que c'est vrai. Mais si l'étudiant est absent, peut-être qu'il est malade, on peut dire faux. Donc, dans de tels cas, nous pourrions vouloir une troisième valeur. Et un mot clé tel que null représente quelque chose comme une valeur par défaut, comme le fait de ne pas encore connaître le résultat, ou quelque chose comme ça. Donc, si nous ne savons pas s'ils sont déjà là, nous pourrions utiliser quelque chose comme un type de données nullable ici, à savoir le Bullen Et nous ne savons pas s' ils sont dans la classe, nous pouvons donc simplement l' initialiser à null Et dans la base de données pour cela ce champ serait peut-être vide. Ou il pourrait même indiquer «   nul ». Ça n'a pas d'importance. Mais le fait est que lorsque les enfants commencent à arriver en classe, nous pouvons définir cela sur vrai et faux. Et c'est en quelque sorte le principe qui le sous-tend. Cela vous donne une troisième option, par exemple. Et encore une fois, il en va de même pour les nombres entiers. Nous pouvons les définir sur null si nous n'avons pas de valeur spécifique pour le nombre que nous voulons modéliser. Donc, quoi que ce soit, il y a de nombreuses raisons différentes pour lesquelles nous pourrions vouloir un type de valeur nullable lorsque nous travaillons avec des types de valeurs nullables en ajoutant simplement un petit point d' interrogation après le type ici Cela vous donne quelques options supplémentaires. Et pourquoi est-ce le cas ? Eh bien, prenons cette variable ici, par exemple. Ceci est nullable. Maintenant, si je mets un point par la suite, j'ai accès à quelques propriétés ici. Si je supprime ce point d'interrogation, pour avoir un simple bolen, vous pouvez voir que ces propriétés ont disparu. Qu' est-ce qui se passe ici ? Pourquoi ai-je ces propriétés supplémentaires pour un type de valeur nullable C'est parce que dans les coulisses, c'est une structure très similaire à celle d'une classe. Plutôt que d'avoir un simple boolène comme avant, où nous pouvons simplement avoir un boolen et Nous pouvons l'afficher dans la fenêtre, nous pouvons le transmettre à une méthode, toutes ces bonnes choses. Nous avons une structure. Considère ça comme un cours. Ce que fait la classe dans ce cas, elle expose simplement deux propriétés L'une est la valeur réelle de notre type de données nullable. Cette valeur d'arrêt est maintenant en présence serait la même chose que d'avoir un type de données non nullable et en l'utilisant, nous pouvons utiliser la propriété value ici pour obtenir la valeur sous-jacente qui serait vraie ou fausse Par exemple, il a une autre chose appelée «   a une valeur ». Nous pouvons maintenant utiliser cette propriété booléenne ici pour déterminer si elle a une Ce que vous feriez normalement pour quelque chose comme ça , c'est d'avoir une instruction if et de dire, d'accord, est-ce qu'elle a une valeur ? D'accord, il a une valeur, donc nous pouvons accéder à la valeur et l'imprimer sur la console, par exemple. Donc, quelque chose comme ça, en faisant les choses de cette façon et en ayant ces propriétés à notre disposition, nous évitons des choses comme les exceptions de référence nulles ou même simplement la vérification de la valeur nulle par exemple. C'est pourquoi ces propriétés sont disponibles. Nous voulons vérifier qu'il a une valeur , puis nous pouvons utiliser cette valeur. C'est pourquoi ils sont très utiles. C'est pourquoi, lorsque vous définissez un type de données nullable, il expose ces propriétés supplémentaires que vous pouvez utiliser, car il vous donne cette troisième option qui est Si vous vous demandez si vous avez un objet de type valeur nullable et que vous ne l'initialisez pas, la valeur par défaut serait nulle, non zéro dans ce Comme elle est nullable, la valeur par défaut est nulle en bref C'est un exemple de types nullables dans C shop. 72. 17-3. Les opérateurs coalescents: opérateurs de coalescence nuls en do sharp ont un son super compliqué. Mais que sont-ils ? Eh bien, l'un d'eux ressemble à ceci, deux points d'interrogation, un autre à ceci, deux points d'interrogation suivis de n égaux. Mais quels sont ces caractères aléatoires que vous tapez ? Je vous entends demander : «   Permettez-moi d'expliquer Les opérateurs de coalescence nuls vous permettent de travailler avec des types de référence comme cette liste ici, par exemple Ce qui peut être nul, mais ce n'est peut-être pas nul. En outre, des types de valeurs nullables qui peuvent être nuls ou complètement différents Jetons un coup d' œil à un exemple ici. Je crée donc ici une liste de chaînes de caractères, appelée liste de courses. Et celui-ci contiendra tous les articles de ma liste de courses. Je vais donc faire mes achats ensuite, j'ai ce type ici, qui est un entier et c' est le coût de mes achats. Maintenant, je vais le mettre par défaut sur null car je n'ai pas encore fait de shopping. Maintenant, je trouverai peut-être le temps de faire du shopping, mais je ne trouverai peut-être pas le temps de faire du shopping. Si je fais du shopping, le coût représentera la valeur de ma boutique. Cependant, si je ne me donne pas la peine de faire du shopping , je conserverai la valeur null car je n'ai pas encore fait faire du shopping , je conserverai la valeur de shopping Par conséquent, il n'y a aucun frais pour ma boutique. Plus tard dans l'application, j'aie fait du shopping ou peu importe que j'aie fait du shopping ou non. Mais je souhaite afficher un message indiquant que mon coût d'achat était alors égal à la valeur de la boutique. Dans un monde normal avec un type de données simple comme celui-ci, vous pouvez peut-être l'initialiser à zéro puis, ou il peut avoir une autre valeur Par exemple, je lance le programme, il m'indique le coût de ma boutique. Cependant, si je crée un type de valeur nullable comme celui-ci et que je l' initialise à null, j'utilise généralement la propriété value pour accéder à la valeur ici Cependant, si cela n'a pas de valeur, peut-être que je n'ai pas trouvé le temps de faire du shopping, alors si je lance le programme, j'ai une erreur ici. Nous en avons déjà parlé. L'objet nullable doit avoir une valeur. Vous pouvez voir que j'accède à cette propriété de valeur, mais je ne suis pas en train de vérifier qu'elle a une valeur. Ce que je fais généralement dans ce cas, c'est simplement avoir une instruction if ici et vérifier la propriété has value de ce type nullable ici Maintenant, je dis que si j'ai une valeur, je veux la sortir. Il semble que cela devrait fonctionner. Maintenant, on dirait que je n'ai plus rien. Mais ça ne plante pas Au moins, ça a l'air plutôt bien. Mais vous pouvez voir qu'à chaque fois que j'essaie d'accéder à cette valeur, je dois créer une condition ici. Je dois faire une instruction if et vérifier qu' il y a une valeur avant de pouvoir enfin l'utiliser. Que je veuille l'afficher dans la fenêtre, que je veuille transmettre la valeur à une méthode, une méthode de classe ou ailleurs. Donc, en gros, je dois le vérifier avant de l'utiliser. Mais si je vous disais qu' il existe un moyen combiner ces deux choses en une seule ? C'est ici que j'introduis l'un des opérateurs de coalescence nuls, les deux points d'interrogation Voyons comment je peux simplifier cela ici. Je vais supprimer la vérification de la valeur du point ici, puis je vais supprimer la valeur du point ici. Ensuite, je vais présenter l'un des opérateurs de coalescence nuls, savoir deux points d'interrogation Je vais juste utiliser zéro comme exemple ici, et je vais mettre le tout entre parenthèses pour ne pas générer d'erreur Que pensez-vous que cela va faire maintenant ? Ou peut-être ne le savez-vous pas, parce que je ne l'ai pas assez expliqué. Lancez le logiciel et voyons vraiment ce qui se passe. Je lance le logiciel maintenant, il indique que le coût d'achat était nul. Vous pouvez voir, eh bien, le coût est nul, mais pour une raison ou une autre, il affiche ce zéro ici Cependant, si je modifie le coût de 4567 et que je lance l'application, elle produit maintenant 4567. Qu'est-ce qui se passe ici ? Eh bien, cet opérateur de coalescence nul dit essentiellement que si c'est nul, y a donc aucune valeur, évaluez ce qui se trouve sur le côté droit de ces deux points d'interrogation Toutefois, s'il contient une valeur, tout ce qui n'est pas nul. Par exemple, évaluez ce côté des points d'interrogation et ignorez-le complètement. N'évaluez même pas ce côté. Voici donc comment fonctionne l'un des opérateurs de non-coalescence. Et vous pouvez voir que nous n'avons pas besoin de cette condition là-bas. Tout est résumé ici dans une jolie petite déclaration à deux caractères, qui est composée de deux points d'interrogation Permettez-moi donc de mieux illustrer cela, juste au cas où vous ne l'auriez pas obtenu la première fois. Permettez-moi donc de créer une méthode ici. Et je vais juste l' appeler get default cost. Donc, cette méthode va renvoyer une valeur par défaut pour le coût si aucune valeur n'est spécifiée. Il va juste renvoyer zéro avec cet opérateur ici. J'ajoute simplement une chaîne au résultat de tout ce que cela évalue. Il va soit évaluer du côté gauche, qui correspond au coût, soit du côté droit, soit du côté droit, qui est égal à zéro. Cependant, il n'est pas nécessaire qu'il s'agisse d'un zéro ou d'une simple variable. Cela peut être le résultat d'une méthode complète, par exemple. Maintenant, si c'est nul, ce qui est le cas, il évaluera tout ce qui se trouve de ce côté. Il peut s'agir d'un type simple, d'une méthode. Vous voyez, il y a beaucoup d'options ici. C'est ce qu'on appelle évaluer. Si je lance l'application, elle affiche maintenant zéro Et juste pour prouver qu'elle exécute réellement la méthode, exécutons-la. Encore une fois, vous pouvez voir que le côté droit est évalué car le côté gauche est nul. C'est la puissance des deux points d'interrogation, connus sous le nom d'opérateur de coalescence nul Voici la syntaxe ici, les deux points d'interrogation ici. L'utilisation est que vous avez un type nullable, qu'il s'agisse d'un type de données simple nullable, ou qu'il puisse même s'agir d'une liste, par exemple, car les types de référence peuvent être nuls, comme vous pouvez le voir ici Et puis, sur le côté droit, nous avons quelque chose pour évaluer si le type nullable, c' est-à-dire celui-ci sur le côté gauche, est nul Nous avons déjà parlé de tout cela, mais c'est une bonne visualisation si vous ne l'avez pas eue la première fois. C'est l'un des opérateurs de coalescence nuls ici. Je veux maintenant introduire un autre opérateur de coalescence nul qui ressemble à ceci Il s'agit de deux points d'interrogation suivis d'un signe égal. Et c'est assez similaire au dernier exemple, mais cela a également trait à l' assignation. Alors, qu'est-ce que tout cela signifie ? Eh bien, jetons un coup d' œil à cet exemple ici. J'ai une liste d'entiers ici. Et cette liste totalisera toutes ces dépenses. Donc, toutes les factures que j'ai payées ce mois-ci, tous les achats que j'ai faits ce mois-ci et le coût total de dépenser mon argent pour des choses inutiles. Tous ces éléments seront donc ajoutés à ces totaux ici sous forme de rubriques distinctes C'est une liste, je veux donc ajouter chacun de ces totaux à cette liste Nous pouvons donc le faire assez facilement. Nous pouvons utiliser la méthode publicitaire qui l'ajoute à la liste, puis nous pouvons simplement mettre les totaux ici, mais n'oubliez pas que c'est un type nullable Nous devons donc utiliser la valeur ici, qui semble correcte, mais oh, attendez, non Maintenant, il faut vérifier qu' il a une valeur. Nous devons utiliser cette propriété. Oh, oui. Mais cela doit être mis en condition pour s'assurer qu'il a une valeur. Par exemple, nous pouvons alors ajouter la valeur dans. Cela devrait fonctionner, mais souvenez-vous quand j'ai dit que les opérateurs de coalescence nuls sont des raccourcis pour tout cela Nous n'avons pas du tout besoin de tout cela. Dans de tels cas, nous pouvons utiliser l'autre opérateur de fusion nul, à les deux points d' interrogation et le signe égal À quoi cela sert-il et comment fonctionne-t-il ? Supposons par exemple qu' elles soient définies comme nulles ici, soit la raison pour laquelle nous les utilisons dans notre logiciel, nous ne leur donnons pas vraiment valeurs, elles restent nulles. Eh bien, peut-être que l'un d' entre eux a une valeur, mais pour une raison ou une autre, certains d'entre eux peuvent toujours être nuls. Nous en venons à les ajouter à la liste, nous voulons uniquement ajouter les valeurs là où elles ne sont pas nulles car nous ne pouvons pas ajouter de choses nulles à une liste. Même si nous essayons, ce ne sera pas une question de lettres. Ce que je veux faire, c'est que si ceux-ci ont une valeur comme celle-ci, par exemple, je veux l'ajouter à la liste. Celui-ci a une valeur de 4567, je veux donc l'ajouter Cependant, s'ils sont nuls, je veux ajouter zéro à place ou une autre valeur par défaut. En gros, je ne veux pas ajouter de valeur nulle parce que je ne peux pas. Il existe en fait un moyen rapide de le faire. Ce que je peux faire, c'est utiliser cet opérateur de coalescence nul suivi d'un zéro. Réinitialisons-le. Ce que cela fait, si cette variable ici est nulle, alors elle va attribuer zéro à cette variable, puis l'ajouter à la liste. Si tel est le cas, si le côté gauche de cet opérateur est égal à null, ce qu'il fait parce qu'il est nul, alors cette variable recevra la valeur de ce qui se trouve sur le côté droit N'oubliez pas qu' il peut s'agir d'une simple valeur, d'une méthode qui a un retour. Il peut s'agir essentiellement de n'importe quelle expression pouvant être évaluée. Mettons donc zéro ici. Ce que nous pouvons faire, nous pouvons le faire pour tout cela. Nous voulons ajouter tous les coûts des factures, par exemple. Nous voulons, bien entendu, ajouter le coût que représente le fait de dépenser notre argent pour des choses inutiles. Maintenant, regardez ce qui se passe si je lance le programme et que j'ajoute un point d'arrêt ici. Maintenant, je passe à mes totaux ici et je les développe. Vous pouvez voir que la liste contient tous les zéros ici, qui est la valeur par défaut comme vous pouvez le voir ici Non seulement cela, vous pouvez le voir reflété dans les variables elles-mêmes, elles ont désormais la valeur zéro. Pour illustrer ce point, je vais simplement en remplacer un par quelque chose comme celui-ci. Je vais lancer le logiciel une fois de plus. Si j'arrive à la fenêtre des locaux ici, vous pouvez voir que cette variable a effectivement conservé cette valeur. Il y a été assigné, il a maintenant une nouvelle valeur, 4567, et cela se reflète désormais également dans la liste Cet opérateur de fusion nul avec des d'interrogation est égal à Si le côté gauche est nul, le côté gauche recevra la valeur du côté droit. C'est ainsi que fonctionne cet opérateur. Tout comme avant. Je vais écrire un commentaire de code, afin que vous puissiez le voir illustré ici. Si le type nullable est évalué à null, par exemple, le coût des achats est nul et il est nul à ce moment-là Évaluez ensuite ce qui se trouve sur le côté droit de cet opérateur et attribuez-le au type nullable Évidemment, si le type nullable est nul, il reçoit la valeur Voici deux opérateurs de coalescence nulle en C Sharp, leur fonctionnement et leur utilité. Il n'y a rien que vous ne puissiez déjà faire avec une condition pour vérifier la valeur, mais c'est un bon raccourci pour minimiser le code et le temps de développement. 73. 18-1. Paramètres nommés et optionnels: Je vais maintenant vous présenter quelques conseils que vous pouvez suivre lorsque vous appelez des méthodes dans C Sharp. Cela a trait à la transmission des paramètres. Je vais parler de ce que l'on appelle les paramètres nommés et aussi des paramètres facultatifs en C sharp. Regardons cet exemple ici. Cela ne fait pas grand-chose. J'ai un exemple de méthode, il prend en compte différents paramètres, tous de types différents. Nous avons un objet de jeu vidéo, quelques chiffres, une chaîne et aussi un booling Dans la méthode, nous ne faisons que générer la propriété title de cet objet de jeu, que nous spécifions ici dans le constructeur Ensuite, nous additionnons les deux nombres et affichons le résultat. Enfin, nous avons une condition. Si la valeur de cette variable booléenne est vraie, message est affiché ici C'est un peu un défi. Cela n'a pas vraiment d' utilité dans le monde réel. C'est juste pour les besoins de cet exemple. Lorsque nous appelons la méthode, vous pouvez voir que nous sommes en train de configurer un nouvel objet ici. Ensuite, nous appelons la méthode en transmettant cet objet ainsi que le reste des paramètres lorsque j'exécute le programme. Vous pouvez voir qu'il fait à peu près exactement ce qu'il dit jusqu'à présent lors de l' appel de méthodes. Nous avons appelé ces méthodes avec les paramètres dans l'ordre dans lequel ils apparaissent. Le but du jeu est d' abord de passer dans le jeu, puis de passer le numéro un. Numéro un. Deuxièmement, vous pouvez tout voir dans l'ordre dans lequel ils sont spécifiés en utilisant ce que l' on appelle des paramètres nommés. Il n'est pas nécessaire de spécifier les paramètres dans l'ordre. Jetons un coup d'œil à un exemple de cela en ce moment. Supposons que je veuille changer la position de ces deux paramètres ici, Hello, et aussi le booléen Maintenant, je veux d'abord spécifier le bolen. Ce que nous faisons, nous prenons le nom du paramètre ici et le préfixons par deux points, juste comme ça Nous allons d'abord le spécifier, maintenant nous allons spécifier le message. Ensuite, nous faisons exactement la même chose. Nous prenons le paramètre, nous ajoutons les deux points, puis sa valeur. Maintenant, j'ai échangé l'ordre de ces deux paramètres. Pour ce faire, je dois spécifier le nom du paramètre juste pour indiquer au système lequel appartient à lequel. Nous corrigeons simplement cela avec deux points ici. Lorsque je lance l'application, nous avons maintenant exactement le même résultat. Ce sont des paramètres nommés. Vous pouvez voir que nous n'avons modifié que l'ordre des deux derniers paramètres. Les trois premiers restent dans le même ordre. Que nous n'avons pas besoin de leur donner un nom car ils sont dans le même ordre. Cependant, si je veux nommer mon premier paramètre et placer dans un endroit complètement différent, je vais devoir nommer chaque paramètre. Sinon, nous allons avoir une erreur ici. Dans ce cas, je n'ai pas besoin de nommer les trois premiers car ils sont exactement dans le même ordre depuis le début. Mais si je déplace ce jeu jusqu'à la fin, par exemple, et que je donne à un nom qui ressemble à ceci, alors je vais avoir cette erreur. Et c'est parce que je dois préfixer tout le reste par le nom Vous pouvez maintenant voir que l'erreur a été résolue car le jeu a été déplacé hors de sa position. Et c'était le tout premier. Par conséquent, il n'y a aucune commande. Ils auront donc tous besoin d'un nom. Dans ce cas, c'est le pouvoir des paramètres nommés. Mais pourquoi est-ce utile ? Eh bien, on pourrait dire que cela améliore la lisibilité. D'après l'appel lui-même, supposant que cette méthode ait été verrouillée dans une classe ou un fichier différent, vous n'avez cette visibilité que de votre côté, vous pouvez clairement voir que l' apparence numéro un a la valeur de ce chiffre deux, car cela vous donne un peu plus d'informations sur l'appel. Cependant, cela crée un peu plus de code dans votre application. Autre raison, peut-être qu'un développeur travaille sur cette méthode. Ici, la méthode n'est pas encore tout à fait terminée. Ils ont peut-être cinq paramètres par exemple, mais peut-être qu'ils en ajouteront bientôt quelques autres. En tant que testeur, votre travail consiste à tester la méthode. Vous testez la méthode avec ces cinq paramètres, mais vous ne savez pas si le développeur va en ajouter d' autres ultérieurement. Donc, ce que vous pouvez faire, c'est utiliser des paramètres nommés ici pour effectuer les tests que vous souhaitez effectuer. Lorsque le développeur en ajoute deux autres dans n'importe quel ordre, cela n'a pas vraiment d'importance Vous savez alors que vos paramètres ne seront pas transmis à différents paramètres par accident. Par exemple, si le développeur ajoute ensuite deux autres paramètres entiers, nous savons que les numéros un et deux seront 5,3 dans ce cas. Si le développeur ajoute 3.4 par exemple, nous ne mettons pas accidentellement ces chiffres dans ces emplacements. Dans de tels cas, c'est très utile lorsque vous ne transmettez pas accidentellement des paramètres du même type à des paramètres différents. Vous dites littéralement, d'accord, ce paramètre appelé ceci recevra cette valeur. C'est très utile. Il ne s'agit pas uniquement de méthodes. Vous pouvez le faire dans les constructeurs et dans quelques autres choses également. Si je passe à cette classe de jeu vidéo où nous avons spécifié ce paramètre au constructeur, vous pouvez voir que le constructeur ne prend qu' un seul argument , Tout comme lors de l'appel de méthodes, par exemple, je peux le préfixer par un titre et il se compilera très bien Nous ne sommes pas limités aux appels de méthode avec des paramètres nommés comme ceux-ci. Nous pouvons également les utiliser dans les constructeurs et d'autres choses du genre Parlons donc maintenant des paramètres optionnels. Qu'est-ce que cela signifie ? Si vous avez un paramètre facultatif, vous pouvez lui attribuer une valeur par défaut si aucun paramètre n'est spécifié. Par exemple, regardons ce message d'affichage Bolen. Ici, nous transmettons la valeur du vrai. Disons simplement que nous n' avons pas à transmettre de valeur. Mais nous pouvons, si nous le voulons, ce que nous pouvons faire ici, nous pouvons dire, d'accord, si ce paramètre n'est pas transmis dans le message d'affichage de cette méthode, alors définissons-le simplement sur une valeur par défaut de true. Si le paramètre est omis, il n'est pas présent. Ensuite, lorsque cette méthode sera appelée, elle l' initialisera simplement à true Si c'est vrai ici, le message sera affiché. Nous pouvons y jeter un œil dès maintenant pour voir si cela fonctionne. Vous pouvez voir les messages en cours de sortie. De même, si je change cette valeur par défaut sur false, nous ne verrons pas du tout ce message. Il ne dira pas bonjour, ce qui n'est pas le cas. Lors de la spécification de paramètres facultatifs dans C Sharp, ils doivent rechercher les paramètres requis. Par exemple, si je fais du message un paramètre facultatif, je l'initialise simplement à la valeur par défaut d'une chaîne vide comme celle-ci Vous pouvez voir que j'ai une petite erreur ici lorsque j'essaie de compiler l'application. Par exemple, si je le mets simplement sur true, vous pouvez voir qu'il y a une erreur. Si nous descendons ici, nous pouvons voir cette erreur ici. Les paramètres facultatifs doivent apparaître après tous les paramètres requis. Tous les paramètres facultatifs doivent figurer à la fin. Ici, vous pouvez en avoir autant que vous le souhaitez. Par exemple, nous pouvons faire du message une valeur par défaut sous forme chaîne vide et également afficher le message sous la forme d'une valeur par défaut de true. Ensuite, nous pouvons réellement supprimer ces valeurs. Nous pouvons même aller jusqu'à dire, d'accord, initialisons ces deux nombres à zéro s'ils ne sont pas spécifiés Comme vous pouvez le voir, nous n'en avons pas besoin par exemple. Mais cela dépend vraiment de votre objectif et de ce que vous souhaitez atteindre si nous exécutons l'application. Nous pouvons maintenant voir additionner les deux nombres, un zéro parce que nous les initialisons à zéro, parce que nous ne spécifions pas les paramètres La seule chose que nous faisons est de publier le titre du jeu vidéo ici alors que nous appelons cette méthode ici Si nous examinons maintenant la liste des paramètres, vous pouvez voir qu'il y a un peu plus d'informations supplémentaires ici. Il nécessite un jeu vidéo car il s'agit d'un paramètre obligatoire. Cependant, vous pouvez constater que les paramètres facultatifs sont désormais entourés de ces accolades carrées Il vous donne également la valeur par défaut 00, une chaîne vide et également true. Cela vous donne également des informations sur ce qui est requis lorsque vous essayez d' appeler cette méthode. Vous pouvez voir comment ces paramètres facultatifs sont représentés lorsque vous essayez d'appeler vos méthodes. Encore une fois, vous n'êtes pas limité aux appels de méthode. Avec cela, comme avant, vous pouvez les utiliser dans les constructeurs et encore une fois, d'autres choses. Index des délégués. Si je définis mon paramètre sur le constructeur comme valeur par défaut, sous forme de chaîne vide, je n'ai plus besoin de cette valeur car elle est facultative Lorsque nous exécutons l'application, nous allons simplement obtenir une chaîne vide. Vous pouvez voir qu'il n' y a pas de titre de jeu car la valeur par défaut est une chaîne vide. C'est la puissance des paramètres nommés et également des paramètres optionnels en do sharp. Cela ouvre les portes à un tout nouveau champ de possibilités. J'espère que ce tutoriel vous a aidé et bon codage. 74. 18-2. Le mot-clé out: Je vais parler du mot clé out en C sharp et de son utilité. Considérez cet exemple ici. Cette méthode, ce qu'elle fait, prend en compte quatre paramètres. Ce que je veux faire, c'est additionner ces deux , puis les soustraire ensemble Vous pouvez voir que c'est ce que je fais ici. J'obtiens le résultat de l'addition dans cette variable et le résultat de la soustraction dans cette variable Mais comment puis-je retourner les deux ? Lorsque nous avons parlé des retours dans les méthodes, nous pouvons renvoyer un type ici, mais nous ne pouvons renvoyer qu'une seule valeur. Comment pourrais-je faire 235 choses différentes à partir d' une méthode ? Est-ce possible ? Eh bien, en bref, oui, nous pouvons utiliser le mot clé out pour ce faire. Et vous voyez le mot clé out utilisé dans de nombreux cas. Par exemple, une méthode peut effectuer certaines opérations et renvoyer un résultat. Mais nous voulons également indiquer si la méthode a réussi ou peut-être un journal des erreurs survenues en cours de route. Nous avons non seulement besoin du résultat de la méthode, mais nous avons peut-être besoin de plus d'informations sur la façon dont elle a géré les choses, vous savez, quelles erreurs se sont produites ou à peu près quoi que ce soit d'autre. Jetons donc un coup d'œil au mot clé out et à son utilité. Maintenant, le mot clé out sur son comportement est très similaire au mot clé ref. Si vous n'avez pas regardé mon tutoriel sur le mot clé ref ou sur la transmission de types par référence à des méthodes, je vous recommande vivement de le consulter. Ce que je vais faire ici, définir deux variables locales ici, result, add et results soustract, et je les ai initialisées à zéro. En ce moment, je les affiche à la fenêtre. Dans la méthode, je fais peu près la même chose, mais je veux que ces résultats reflétés dans ces variables afin que je puisse les afficher dans la fenêtre, car pour le moment je ne peux pas obtenir ces deux valeurs avec cette méthode. Comment est-ce que je peux m'y prendre ? Voyons comment utiliser le mot clé out, ce que je peux faire dans la liste des paramètres ici. Pour cette méthode, je peux ajouter un paramètre supplémentaire avec le mot clé out. Ce que je veux faire, c'est renvoyer ces deux valeurs hors de la méthode. Je vais avoir deux variables de sortie ici. Le premier sera le résultat de l'ajout. Le second sera le résultat de la soustraction Maintenant, comme ils sont transmis à la méthode avec leurs propres types et noms, je ne peux pas leur donner un tout nouveau type. Je les enlève. C'est à peu près ainsi que cela fonctionne. Vous pouvez maintenant voir qu'une erreur est apparue ici. Et quand je passe la souris sur ce dicton, aucun argument ne correspond au paramètre requis, je dois essentiellement spécifier deux paramètres supplémentaires Le nombre de paramètres correspond à la définition. Ici, il m'en faut deux de plus. Lorsque vous avez le mot clé out dans la déclaration de méthode ici, vous devez également spécifier le mot clé out lors de l' appel de la méthode. C'est ce que je vais faire ici. Si vous avez regardé ma vidéo sur le mot-clé ref et transfert de types de valeurs et de types de référence aux méthodes, vous saurez que lorsque nous transmettons quelque chose à une méthode par référence, nous pouvons modifier les valeurs à l'intérieur de la méthode et nous référençons la zone de mémoire où se trouvent ces variables C'est ce que fait le mot clé out. Mais il y a ici une différence subtile entre le mot clé ref et le mot clé out. d'autres termes, les variables n'ont pas besoin d'être initialisées avant de transmettre une variable avec le mot clé out Qu'est-ce que je veux dire par là ? Eh bien, voyons si cet exemple fonctionne. Tout d'abord, avant de prendre de l'avance, je transmets 20 valeurs en tant que paramètres de mots clés de sortie. Ils entrent dans la méthode, puis nous définissons les valeurs ici même. Jetons un coup d'œil. Vous pouvez voir que nous obtenons le résultat escompté. Deux plus deux font 4,6 moins quatre font deux. Cela fonctionne. Et nous obtenons en fait les deux résultats renvoyés par la méthode. Mais il ne s'agit pas vraiment d'un retour à la méthode, il s'agit simplement de modifier ces deux objets de valeur au fur et à mesure qu'ils sont transmis par référence dans cette méthode, puis nous produisons simplement les résultats Je l'ai déjà dit, il y avait une différence subtile entre le mot clé out et le mot clé f. d'autres termes, lors de l'utilisation du mot clé out, les variables transmises n'ont pas besoin d'être initialisées, ce qui signifie qu'elles n'ont pas besoin de valeur Cela fonctionnera toujours quand je lancerai le logiciel. Maintenant, vous pouvez voir qu'ils ont des valeurs. Et c'est parce que lorsque des choses sont transmises à une méthode ici, nous devons leur donner une valeur. Si nous ne le faisons pas, nous transmettons une variable. Ici, vous pouvez voir qu'il y a une erreur indiquant que l' annonce de résultat doit être attribuée avant la fin de la méthode. Nous devons donc réellement faire quelque chose avec ces paramètres de sortie ici. Nous devons faire quelque chose avec eux, leur donner une valeur, les initialiser, faire quelque chose qui fasse la différence subtile entre out et ref. Mais généralement, le mot clé out vous permet, d'une certaine manière, renvoyer plus d'un élément à partir d'une méthode, et c'est là son principal atout. Autre chose, nous n' avons pas besoin de définir nos variables ici. Nous pouvons en fait tous les définir sur une seule ligne. Si je supprime complètement ces variables entre le mot-clé out et la variable, je tape simplement int, par exemple, pour le type de données. Maintenant, nous sommes en train de définir nos variables dans une seule ligne de code ici. Et vous pouvez voir que cela semble une bonne idée. Nous les définissons donc ici, puis nous les transmettons en un. Et puis il fait quelque chose, en les renvoyant dehors. Ensuite, nous publions les résultats. Vous pouvez donc voir que nous obtenons les mêmes résultats ici. C'est donc la puissance du mot clé out en C sharp. 75. 18-3. Mot-clé in: Je vais parler du mot clé dans C Sharp. Maintenant, j'ai un exemple très simple. Ici, j'appelle une méthode qui additionne deux nombres. Lorsque la méthode est appelée, nous en insérons le résultat dans une variable, et en sortant le résultat en ajoutant deux plus deux, nous obtenons le résultat de quatre Comment le mot clé intervient-il ? Eh bien, lorsque nous utilisons le mot-clé dans une méthode ici, nous pouvons le spécifier avant tout paramètre que nous souhaitons. Par exemple, premièrement, ce que fait le mot clé nous empêche de modifier cette valeur du tout. Ensuite, si nous essayons de définir une valeur comme celle-ci, par exemple, vous pouvez voir que le logiciel ne compilera même pas. Lorsque nous le surlignons et que nous le survolons. Il indique qu'il est impossible d'attribuer variable int car elle est en lecture seule. Cela nous empêche en fait de faire quoi que ce soit avec cette variable. Là encore, nous pourrions appliquer cela à n'importe quel nombre de paramètres que nous souhaitons. Ce sont des types de valeurs simples, des entiers simples. Voyons comment cela fonctionne avec les objets. Par exemple, vous pouvez voir ici que j'ai un exemple avec un objet ici, comme un jeu vidéo par exemple Je définis le titre du jeu via le constructeur Minecraft et j'affiche simplement le titre du jeu Mais si j'essaie de modifier cet objet de quelque manière que ce soit en spécifiant le mot clé in, cela va générer une erreur de lecture seule similaire. Vous pouvez voir ici que j'efface le titre en le définissant sur une chaîne vide Mais cela signifie qu'il ne peut pas être attribué à, qu'il est en lecture seule. De même, si j'essaie de créer complètement une nouvelle instance à partir de cela, j'ai exactement la même erreur. C'est la puissance du mot clé en C sharp. Cela empêche des éléments tels que les méthodes de modifier accidentellement les paramètres que vous souhaitez transmettre. Si vous savez que cette méthode n' est pas responsable de la modification de vos paramètres, vous pouvez envisager de les spécifier avec le mot clé in pour protéger vos données et éviter que les méthodes ne modifient vos données et que des imprévus se produisent, ce qui peut arriver très souvent, croyez-moi. Mais l'avantage du mot clé est que oui, vous pouvez transmettre une constante ou une variable en lecture seule ici, par exemple. Mais peut-être que vos objets ne sont pas en lecture seule ou constants, mais que vous souhaitez simplement les rendre temporairement lecture seule pendant la durée de la méthode. C'est le but du mot Q dans C shop. 76. 18-4. Mot-clé params: Le mot clé Perms en C sharp. Cela ressemble à ceci et c'est l'abréviation de paramètres. Mais qu'est-ce que cela signifie et à quoi cela sert-il ? Jetons un coup d' œil à cet exemple. Ici, j'ai une méthode qui ajoute des entiers simples. Il prend quatre paramètres, les additionne tous et produit le résultat. La méthode les prend en compte quel que soit l'endroit qui l'appelle. Nous ajoutons 224,5. Sortons le résultat. Voilà, c'est là. Par exemple, si je veux additionner deux nombres, je veux peut-être en additionner trois. Ou peut-être 17 numéros ensemble. Mais je veux la même chose, je ne veux qu'une seule méthode. Je veux la même méthode et une seule méthode pour additionner tous ces nombres. Comment puis-je y parvenir ? Eh bien, je pourrais peut-être créer un objet personnalisé, par exemple, introduire tous les chiffres. Ou peut-être créer une liste et y ajouter tous les numéros. Ensuite, je peux passer la liste à cette méthode. C'est essentiellement ce que fait le mot clé prams. Dans ce cas, lorsque j' utilise le mot clé Prams, je tape ici Prams dans la signature de la méthode Ici, il s'agit d'un paramètre en lui-même. Ensuite, j'ai mis le type de données. Le type de données peut être à peu près n'importe quoi dans les coulisses. Il utilise le type de données objet, dont tous les types de données dérivent de toute façon. Mais nous utilisons un entier. Nous pouvons utiliser des objets personnalisés si nous le souhaitons. Instances personnalisées, cela n'a pas vraiment d'importance. Je vais simplement appeler cette liste parce qu'elle contiendra tous les numéros que nous transmettrons à cette méthode. Maintenant, lorsque nous travaillons avec des listes, nous allons utiliser quelque chose comme une boucle pour parcourir chaque élément de cette liste. Nous pouvons donc additionner tous les chiffres . Faisons-le maintenant. Nous initialisons une variable à zéro. Cela permettra de conserver un compte de tous les chiffres que nous additionnons Cela devrait fonctionner sur place. Nous parcourons en boucle tous les chiffres de la liste. Nous tenons un compte courant, ajoutons tout à ce résultat ici, puis nous le publions Nous allons obtenir le même résultat. Ici, vous pouvez en voir 13. C'est là la puissance du mot clé params. Regarde ça. OK, j'ai modifié l' argument d'appel ici pour ajouter beaucoup plus de paramètres à cette liste, mais vous pouvez voir que cela n'a posé aucun problème. C'est la puissance du mot clé params. Si nous devions créer une liste, par exemple, et la transmettre à la méthode, nous devrions également modifier la liste de cette manière. Mais vous pouvez voir que cela ne cause aucune erreur. Nous pouvons compiler le logiciel et l'exécuter, et nous avons le résultat escompté ici. C'est la puissance du mot clé params. Cela nous permet d'utiliser une méthode pour accepter un nombre variable de paramètres du même type, puis de travailler avec ces informations. Maintenant, quelques règles y sont associées. ne peut y avoir qu' un seul mot clé params par déclaration de méthode, par exemple Nous ne pouvons pas en avoir deux comme ça, donc ça ne marchera pas. Deuxièmement, le mot clé params doit figurer à la fin de tout ici Si j'ai plus d' un paramètre ici, paramètres doivent être à la toute fin Ça ne peut pas être au début, ça ne peut pas être au milieu. Vous pouvez donc voir qu'une erreur s'est produite ici, car elle doit se trouver en fin de liste. Enfin, les paramètres ici doivent être un tableau unidimensionnel Ça ne peut pas être un tableau bidimensionnel, ça ne peut pas être quelque chose de bizarre comme ça. Il existe donc certaines règles associées au mot clé params C'est donc la puissance du mot clé params en C sharp. Oui, il existe d'autres moyens d' obtenir les mêmes résultats, mais plus vous aurez d'outils dans votre boîte à outils, meilleur sera votre développement. C'est donc le mot clé params en C sharp. 77. 19-1. Énumérations - Le type enum: Je voudrais parler des énumérations en C Sharp, connues sous le nom d' Et le mot clé ressemble exactement à ça. Mais qu'est-ce qu'une énumération et pourquoi devrais-je l'utiliser ? Eh bien, j'ai un exemple ici. Ici, je suis en train de configurer quatre objets de jeu vidéo. Ils prennent en compte différents paramètres. Jetons un coup d' œil à la classe maintenant. Vous pouvez donc voir qu'il faut une console, un titre de jeu vidéo, un éditeur de jeux vidéo et une note. Faisons donc attention à cette chaîne de notation ici. Ce que je veux faire, c'est uniquement autoriser certaines évaluations pour tout le monde. Dix ans et plus, mature, 17 ans et plus, et cetera Je veux seulement que ces valeurs soient transmises et je veux uniquement traiter ces valeurs. Mais lorsque vous configurez ces objets, vous pouvez voir que je les place ici. Mais il est très facile de se tromper. Je pourrais faire une faute d'orthographe, peut-être une minuscule, quelque chose comme ça Si cette application est connectée à une base de données, il y a un petit problème. Je vais stocker des valeurs incorrectes et tout le système peut être perturbé. Si quelqu'un souhaite rechercher un jeu, par exemple, et que la note est erronée parce qu'elle a été mal orthographiée, il se peut que s'il recherche par classement, ce jeu vidéo n' apparaisse jamais dans la recherche Nous avons besoin de données concises et précises pour de nombreuses raisons . Une façon de résoudre ce problème consiste à s'assurer qu'il n'y a pas de fautes d' orthographe pour cette variable de chaîne. évaluation, par exemple, consiste à utiliser ce qu'on appelle une énumération ou une énumération Comment puis-je le configurer et comment intégrer dans mon cours de jeu vidéo ici ? Eh bien, jetons un coup d'œil. Passons au côté droit où se trouve notre projet. Nous allons écrire Click, Go to Add, puis aller en classe. Nous allons appeler cela quelque chose qui représente notre note. Maintenant, si nous avons un très gros logiciel, nous devrions peut-être être vraiment descriptifs. Je pense que le classement des jeux vidéo est peut-être bon. Cependant, lorsque vous créez une énumération, vous pouvez avoir une classe portant exactement le même nom et vous ne pouvez pas créer de classe portant le même nom Ce que beaucoup de gens font lors de la création d'une énumération, c'est d'ajouter le mot state ou le type par la suite Ainsi, chaque fois qu'ils en créent un, il se termine soit par état, soit par type. Cela dépend vraiment de vous , peu importe. Mais je vais l'appeler comme ça. Alors attention, vous remarquerez qu'il s'agit d'une classe ici lorsque je clique sur Ajouter, donc si nous arrivons sur la gauche, nous avons maintenant un type de classification interne des jeux vidéo par classe. Eh bien, nous ne voulons pas de cours, nous voulons une énumération. Et il n'y avait pas de modèle pour cela, alors maintenant nous avons une énumération C'est aussi simple que de changer de classe en enum. Nous avons un dénombrement ici. Alors, comment est-ce que cela fonctionne ? Eh bien, allons à notre cours de jeux vidéo ici et prenons nos évaluations autorisées. Je vais les mettre ici sous forme de commentaire afin de pouvoir y faire référence. Et je souhaite créer un élément dans l'énumération pour chacune de ces évaluations Donc je veux que tout le monde ait dix ans et plus, 17 ans ou plus, et cetera Je veux donc que tous ces éléments figurent dans cette énumération. Et l'énumération ressemble à une liste. Donc, comme une liste de valeurs. Et cette liste n'est pas une simple liste, c'est comme une liste en lecture seule. Nous ne pouvons pas modifier ces informations. Il est pratiquement en lecture seule, nous l'utilisons donc pour faire référence à ces valeurs. Tout deviendra clair dans un instant. Ce que je vais faire, c'est créer des valeurs pour chacune de ces évaluations. Dans l'énumération, je vais commencer par ce qui correspond à tout le monde Une fois que j'ai créé une valeur, je mets une virgule puis une nouvelle ligne Maintenant, je peux passer à la suivante. Maintenant, il y a un problème. Une fois que j'en ai saisi dix, c'est parce que dans les énumérations, vos articles ne peuvent pas contenir chiffres ou certains caractères comme ce Il va falloir le taper. Dans ce cas, nous pouvons dire plus de dix, et cela fonctionne très bien. Continuons. J'ai saisi une énumération approximative ici, vous pouvez voir que toutes ces valeurs sont reflétées dans l' Nous pouvons en ajouter d'autres ultérieurement si nous le souhaitons. Maintenant, comment est-ce que cela fonctionne ? Comment pouvons-nous intégrer cela à notre classe ? Eh bien, c'est maintenant comme un type de données lequel nous avions une évaluation sous forme de chaîne auparavant. Nous pouvons utiliser cette énumération ici. Si nous suivons notre cours ici, nous remplaçons la chaîne par le type de classification des jeux vidéo. Nous le remplaçons également dans le paramètre ainsi toutes les méthodes que nous pouvons avoir ici. Il y a aussi. Et il semble que nous ayons un problème, dû à l'accessibilité. Par défaut, notre classe est interne, mais comme notre classe de jeu vidéo est publique, nous devons également rendre l' énumération publique Maintenant, toutes ces erreurs ont disparu. Maintenant, nous avons en fait changé le paramètre de notre constructeur, un type d'énumération Voyons maintenant comment nous construisons ces objets. Maintenant, vous pouvez voir qu'il y a des erreurs sur tout cela ici. Essayons de modifier cette énumération pour adolescents pour qu'elle utilise notre énumération. Si je mets une virgule ici, vous pouvez voir l'intellisens, la saisie semi-automatique a choisi notre Nous allons simplement double-cliquer dessus. Ensuite, nous allons mettre un point. Maintenant, vous pouvez voir qu'il y a une belle liste ici. Si quelqu'un veut construire ces objets. Maintenant, ils ne peuvent pas simplement saisir n'importe quelle valeur. Écoutez, cela nécessite un type de classification des jeux vidéo. Vous pouvez le voir dans la liste des paramètres. Mais maintenant, on ne peut plus rien mettre. Nous devons choisir quelque chose dans cette liste. Si ce n'est pas le cas, l'application ne sera même pas compilée à cause d'une erreur. Vous pouvez voir comment cette énumération nous oblige à choisir un article dans cette liste Maintenant, nous pouvons dire adolescent, par exemple. Maintenant, si nous remplaçons chacun d' entre eux par l'énumération, vous pouvez voir quand nous construisons ces objets, maintenant cela ressemblera à ceci Vous pouvez voir que c' est une idée bloquée. Mais en plus de cela, cela oblige les personnes, les logiciels ou tout autre élément à ne pas commettre d'erreur dans nos informations. Vous ne l' utiliseriez pas vraiment pour quelque chose comme Blizzard ou World of War Crafts car ils sont uniques Cependant, la console pourrait peut-être représenter une énumération car il n'y a qu'un nombre limité de Vous savez, vous avez la console Playstation X ou le PC. Cela pourrait donc encore être représenté par une énumération, mais pour quelque chose comme l'évaluation, cela semble être un candidat parfait à utiliser comme énumération lorsque vous travaillez avec des énumérations Par exemple, ces jeux vidéo sont peut-être stockés dans une base de données. Maintenant, cette base de données contiendra le nom du jeu vidéo, le titre, et il se peut qu'elle ne contienne pas le nom complet de l'énumération dans la base de données Il peut avoir un entier tel que 01 ou deux. Chacun de ces nombres entiers peut représenter une note différente dans l'énumération Par exemple, chacun aurait 010 ans plus un, adolescent aurait deux ans, et cetera Lorsque vous définissez des énumérations dans Visual Studio, il existe un type sous-jacent, c'est-à-dire en arrière-plan Par défaut, chacune d'entre elles possède une valeur qui est un entier. Et je vais vous montrer ce que je veux dire par là. Cela affiche l'une de ces énumérations dans la fenêtre de console. Je vais juste publier un classement des jeux vidéo de type adolescent. Ça va probablement juste dire que sur la fenêtre elle-même, il est juste écrit adolescent. Mais regardez ce qui se passe si je le convertit en un entier. Donc, si je lance l'application, vous voyez maintenant qu'elle a la valeur de deux. Par défaut, il y a un entier sous-jacent ici. En effet, par défaut, le premier élément est 012345. Cela se fait par défaut. C'est le comportement par défaut, mais vous pouvez le modifier si vous le souhaitez. Vous pouvez définir vos propres valeurs pour ceux-ci. Par défaut, cela ressemble à ceci. Tout le monde a la valeur zéro. Celui-ci a une valeur de 12345. Voici à quoi cela ressemble dans les coulisses. Ils ont ces valeurs entières. Vous pouvez les référencer par le numéro ou par le nom. C'est à vous de choisir. Mais généralement, lorsque vous stockez quelque chose comme ça dans une base de données, ou que vous transmettez ces valeurs à un autre logiciel, vous envoyez peut-être l'entier simplement parce qu'il est plus petit et plus facile à utiliser. C'est pourquoi les énumérations ont un type sous-jacent. Considérez cela comme un index par exemple. Mais comme je l'ai dit, vous pouvez configurer vos propres types mais aussi vos propres valeurs. Par exemple, je veux que celui-ci soit dix, celui-là 2030, 40, 50. Peu importe, c' est à vous de choisir. Et maintenant, si nous l'affichons à nouveau dans la fenêtre de la console, vous pouvez voir que dix a maintenant une valeur de 22, et c'est parce que nous lui avons donné la valeur 22. Je ne sais pas pourquoi nous l'avons fait, mais vous pouvez voir que c'est ainsi que fonctionne le principe. Donc, en arrière-plan, il utilise un entier, mais vous pouvez le remplacer par un autre type de données si vous le souhaitez, comme un octet, un long ou quelque chose comme ça. C'est à vous de choisir, mais par défaut. Cela ressemble à quelque chose comme ça. Si vous souhaitez modifier le type, vous pouvez ensuite ajouter deux points et placer le nouveau type ici. Lorsque vous avez un type ici, toutes ces valeurs doivent suivre le type que vous spécifiez. C'est peut-être quelque chose que vous n'utilisez pas immédiatement, mais il est toujours bon d' avoir ces connaissances en tête pour les appliquer ultérieurement. Mais ce sont les possibilités et les choses que vous pouvez faire avec les énumérations Ce qui est également assez courant, c'est si vous avez une énumération, par exemple Ce sont toutes des évaluations de jeux vidéo. Il se peut que vous ne vouliez pas spécifier de note, mais l'utilisateur a le choix entre six options. Mais que faire si c'est optionnel ? Donc, ce que beaucoup de gens ont tendance à faire, est de définir un élément appelé non et de lui attribuer généralement une valeur de zéro. Ou ils peuvent lui donner une valeur de 999 et la mettre à la fin, par exemple. Mais ce n'est qu'un exemple de la façon dont vous pouvez le rendre facultatif. Non serait le champ facultatif dans ce cas. Si ce n'est pas obligatoire, sinon vous pouvez sélectionner une note ici. Encore une fois, cela se reflète simplement en choisissant le non-élément dans la liste. Il n'y a pas de classement pour ce jeu, auquel cas il est facultatif. Maintenant, les énumérations. Les énumérations sont bien plus nombreuses, et vous pouvez en faire bien plus Il y a une classe statique appelée enum à l'intérieur, vous pouvez utiliser différentes méthodes pour utiliser vos énumérations Vous pouvez obtenir le type sous-jacent comme l'entier dont nous avons parlé précédemment. Et tu peux faire différentes choses. Nous n'avons donc fait qu' effleurer la surface. Mais ce que je vais mentionner est une chose pour que vos projets restent un peu mieux organisés. Si nous arrivons ici et que nous cliquons avec le bouton droit sur notre projet, j'ai tendance à ajouter un nouveau dossier ici, et j'ai l'habitude d'appeler cela des énumérations Dans ce dossier, j'ai mis toutes mes énumérations pour qu'elles soient Ainsi, comme ils ont la même extension de fichier qu'une classe, vous ne vous y trompez pas vraiment. Vous pouvez masquer toutes vos énumérations dans un dossier enum Si vous vous souvenez quand nous avons parlé interfaces dans le didacticiel d' interface, du fait qu'elles le mot-clé interface et non le mot-clé class, vous pouvez également créer un dossier pour vos interfaces. C'est assez courant. Cela permet simplement de garder les choses organisées simplement parce qu'elles ont la même extension de fichier. Si vous avez une très grosse application avec des centaines de classes, vous pouvez facilement trouver vos énumérations simplement parce qu'elles se trouvent toutes dans un répertoire appelé enums, ce qui est un peu d'organisation lorsque vous travaillez avec des interfaces . De plus, les énumérations sont très travaillez avec des interfaces . De plus, les énumérations énumérations Cela évite les fautes d'orthographe ou quoi que ce soit de ce genre. Et c'est très utile lorsque vous avez une liste limitée d'éléments, par exemple des consoles ou des classements Peut-être lorsque vous travaillez avec des couleurs dans un jeu de cartes ou lorsque vous représentez des mois de l'année ou quelque chose comme ça. Mais n'oubliez pas que les éléments d'énumération sont en lecture seule comme des constantes, vous ne pouvez donc rien leur attribuer. Par conséquent, considérez-les comme en lecture seule lorsque vous les utilisez. Ce sont donc des énumérations en boutique. 78. 19-2. Récursion et gestion de dossiers (IO / System.IO): Je vais maintenant parler d'un tout nouveau concept. Et ce concept s'appelle la récursivité. Si vous êtes familier avec l'informatique, ou si vous avez utilisé d'autres langages de programmation, ou même les mathématiques. Peut-être avez-vous déjà entendu parler de ce mot , mais peut-être que non. Alors pourquoi suis-je sur Google ? Je t'entends demander. Eh bien, quand j'ai commencé mes activités de programmation, la récursivité m' a vraiment embrouillée. Avez-vous déjà vu le film Inception, où le gars s'endort puis il rêve, puis il s' endort dans le rêve. Et ça joue avec ton esprit et tu te demandes s'il rêve ? Dans quelle couche de rêve se trouve-t-il ou est-il de nouveau éveillé ? Tu sais, c'est très confus. Et les rêves imbriqués de ce film m'ont toujours rappelé le concept de récursivité et vous allez comprendre pourquoi Mais j'espère que dans ce tutoriel, je vais le décomposer en étapes simples afin que vous le compreniez beaucoup plus facilement qu' autrefois lorsque j'ai commencé à apprendre. Et je vais vous montrer pourquoi. Si vous recherchez le terme récursivité sur Google, vous obtenez une description ici Processus consistant à définir un problème ou une solution en termes de version simplifiée de lui-même. Par exemple, vous pouvez définir une opération, retrouver le chemin du retour comme si vous étiez chez vous. Tu vois ce que je veux dire ici ? Ce n'est pas très clair, n'est-ce pas ? Et plus vous faites défiler la page, plus vous êtes confus. C'est juste une de ces choses sur lesquelles on s' arrache les cheveux et quand on regarde les images, eh bien, les images n'aident pas vraiment non plus. Vous avez juste ce genre d'image de quelque chose à l'intérieur de quelque chose d'autre et cela se répète pour toujours. Je vais donc vous expliquer ce qu'est la récursivité. Cela aide en examinant la récursivité dans C Sharp dans Google, et cela vous donne une meilleure explication de ce que c'est en termes de C Sharp récursivité est un concept dans lequel une méthode s'appelle elle-même, et c'est exactement cela Dans le monde du do sharp, vous définissez une méthode, puis la méthode s'appelle elle-même. Maintenant, pourquoi une méthode voudrait-elle s'appeler elle-même ? Eh bien, si vous avez des fonctionnalités dans une méthode pour faire quelque chose, vous voudrez peut-être réutiliser ce code. Pourquoi pas ? La programmation consiste à réutiliser le code Cela fait gagner du temps, c'est plus facile à entretenir, et il y a de nombreuses autres raisons de le faire. C'est ce que nous allons examiner aujourd'hui, récursivité en C sharp, et nous allons définir une méthode qui s'appelle elle-même Nous sommes ici dans Visual Studio. Maintenant, ce que je veux faire c'est configurer une méthode qui s'appelle elle-même. Si vous regardez d'autres didacticiels sur la récursivité, vous verrez probablement quelque chose dans lequel vous devrez calculer la factorielle d'un nombre quatre La valeur factorielle est un fois deux, trois fois quatre Ensuite, vous définissez une méthode pour le faire. Je pense que c'est un exemple assez faible et ennuyeux. Je pense que nous pouvons utiliser quelque chose que nous pouvons peut-être appliquer dans le monde réel. Je pense qu'une fonction de recherche est vraiment utile pour cela. Ce que je veux faire, c'est vous présenter ma très mauvaise collection de musique. Ici, vous pouvez voir que c'est assez éclectique. Nous avons tous les genres différents ici. Ce que je veux faire, c'est spécifier un terme de recherche qui peut être n'importe lequel, il peut s'agir du nom d'un groupe , du nom d'une chanson, etc. Je souhaite renvoyer tous les fichiers musicaux qui répondent à ces critères. Nous allons donc demander à l' utilisateur un terme de recherche, il le saisira. Le résultat sera le chemin complet de tous nos fichiers musicaux. Maintenant, cette collection de musique est très désorganisée, pourquoi nous avons besoin d'une fonction de recherche ici J'ai un dossier de musique ici, et à l'intérieur de celui-ci j'ai un dossier appelé encore plus de musique. J'ai tous ces nouveaux dossiers, puis j'ai de la musique éparpillée partout. Je pense qu'une fonction de recherche pourrait être une bonne chose pour cet exemple. Le problème, j'ai besoin de quelque chose pour obtenir les répertoires dans un chemin de fichier que je fournis au logiciel. Donc, si je fournis le logiciel, ce chemin de fichier ici, j'en ai besoin pour obtenir les répertoires. La deuxième chose que je dois faire est d'obtenir le logiciel pour obtenir tous les fichiers dans un répertoire, et de vérifier à tour de rôle chacun de ces fichiers pour voir s'ils correspondent aux critères de recherche. Il doit effectuer deux tâches. Et pourquoi ce scénario est-il un bon exemple de récursivité ? Comment appliquer une méthode récursive à cet exemple ? Eh bien, je veux obtenir les répertoires et les fichiers de chaque répertoire ici. Je veux suivre la même logique ici. Je veux obtenir ces répertoires, ces fichiers. Et puis, dans ces répertoires, je veux le vérifier. Il y a plus de répertoires que vous pouvez également obtenir les fichiers. La logique des méthodes s'applique à peu près à n'importe quel répertoire ici. Je souhaite réutiliser les fonctionnalités. Je veux l'utiliser ici dans un premier temps. Ensuite, je veux fouiller dans ces dossiers. Continuez à creuser jusqu'à ce qu' il n'y en ait plus, puis vérifiez les fichiers ici. La récursivité sera un très bon exemple de ce que nous pouvons utiliser pour ce scénario particulier ici Voyons comment nous pouvons le faire. Je suis ici dans Visual Studio en ce moment. Ce que je dois faire, c'est créer une méthode. Et la méthode va s'appeler d'elle-même. Et le travail de la méthode consiste essentiellement à rechercher un fichier spécifié par l'utilisateur. Configurons-le maintenant. La première chose que je veux faire est de demander l'utilisateur un terme de recherche. C'est ce que nous allons faire. Ensuite, je veux accepter la saisie de l'utilisateur. Maintenant, j'ai reçu le terme de recherche de l'utilisateur. Je veux appeler une méthode. Configurons une méthode qui effectuera réellement la recherche. Je vais appeler la méthode de recherche. Je pense que c'est un nom plutôt approprié. Maintenant, je dois définir certains paramètres. Quels paramètres doit-il prendre ? Eh bien, dans le premier cas, nous devons savoir où se trouve la musique sur le système. Nous avons besoin d'un chemin de fichier. Je pense que c'est un très bon premier paramètre. Le second est probablement le terme de recherche. Nous avons besoin de la méthode pour savoir ce que nous recherchons réellement. Le dernier, peut-être un paramètre de référence et peut-être une liste ou un tableau. Cela permettra de recueillir tous nos résultats. Lorsque vous recherchez quelque chose, se peut que vous n'obteniez qu'un seul résultat, mais il se peut que vous n'ayez aucun résultat. Mais vous pourriez également obtenir dix résultats, comme dix résultats pour votre recherche. Nous ne pouvons pas simplement renvoyer un type simple, nous devons renvoyer quelque chose comme un tableau ou une liste. Par exemple, je pense que l'utilisation d'une collection telle qu'une liste ici sera tout à fait appropriée. Je vais appeler cela des résultats car il contiendra tous les résultats que nous trouverons lors de notre recherche. Nous avons maintenant le chemin où se trouve la musique. Nous avons le terme de recherche correspondant à ce que nous recherchons. Nous avons maintenant une collection qui va stocker nos résultats. Une chose que vous vous demandez peut-être est, eh bien, pourquoi ne l'avons-nous pas comme valeur de retour ? Pourquoi avons-nous besoin d'un paramètre de type référence comme ici par exemple ? Eh bien, la vérité est que cela n'a pas vraiment importance si je le définis comme type de retour. Je pense que cela pourrait compliquer un peu plus cet exemple. Ce que je veux vous expliquer, c'est comment fonctionne la récursivité, où une méthode appelle une méthode, connue sous le nom de méthode récursive Si je configure un type de retour, je dois renvoyer la valeur de chaque appel à la méthode elle-même. Je pense que cela pourrait compliquer un peu l'exemple. Je vais utiliser un paramètre pour le moment, puis une fois que j' aurai développé la solution, je vais simplement le passer à un type de retour afin de pouvoir également vous montrer cet exemple. C'est le raisonnement qui le sous-tend ici. Il va juste stocker les résultats. Lorsque vous développez des méthodes récursives comme celle-ci ici, il est toujours bon d'obtenir d'abord les fonctionnalités de base Et c'est ce pour quoi il est conçu en ignorant complètement la récursivité. C'est là que la méthode s'appelle elle-même. Ce que je veux faire, c'est utiliser le chemin qui nous est donné, utiliser le terme de recherche et voir si nous pouvons réellement obtenir des résultats à partir du dossier racine ici. Pour l'instant, nous allons ignorer de fouiller dans les dossiers et tout ce qui s'y rattache. Ce que je veux faire, c'est obtenir ces fichiers ici, obtenir tous les fichiers du répertoire donné, et ensuite, vérifier chaque fichier pour m' assurer qu'il contient notre terme de recherche. Si c'est le cas, je souhaite l'ajouter à la liste de résultats que nous venons de créer. Voyons comment nous pouvons réellement obtenir ces fichiers pour un répertoire, puis vérifier chaque titre pour nous assurer qu'il contient notre terme de recherche dans Visual Studio. Maintenant, si nous voulons travailler avec des fichiers, des répertoires, chemins de fichiers ou quelque chose comme ça, il existe en fait un espace de noms que nous pouvons utiliser. Cela nous est fourni. Nous utilisons le mot clé using, puis nous tapons system , puis O signifie entrée-sortie. Cela a à peu près tout à voir avec les fichiers enregistrés des fichiers texte lisant des fichiers, tout ce genre de choses. C'est un espace de noms vraiment utile que nous pouvons utiliser. Il n'est pas inclus par défaut. Par exemple, dans un didacticiel précédent où nous utilisions la classe mathématique statique et dans le cadre des mathématiques, nous pouvions exécuter diverses fonctions mathématiques. Ceci est inclus par défaut car il s'agit d'une bibliothèque très populaire. Lorsque vous créez une application, vous souhaiterez peut-être faire beaucoup de choses liées aux mathématiques, par exemple, et à bien d'autres choses encore. Cependant, tous les logiciels que vous créez ne fonctionneront pas avec des fichiers. C'est pourquoi nous devons inclure manuellement cette bibliothèque de manière explicite. Ce ne sont là que quelques informations. Si vous souhaitez utiliser un autre espace de noms, vous pouvez les ajouter ci-dessous dans l'espace de noms system I Il y a plein de choses que tu peux faire. Vous pouvez faire toutes ces choses ici. Des tas, des tas de choses. Mais il existe quelques classes statiques que vous souhaiterez peut-être connaître. La première, par exemple, est Directory, et il s' agit d'une classe statique. Grâce à cela, nous pouvons créer des répertoires sur notre système simplement en lui donnant un chemin en tant que paramètre. Nous pouvons supprimer des répertoires. Nous pouvons obtenir des fichiers dans un répertoire que nous fournissons. Nous pouvons faire beaucoup de choses avec les annuaires. Ce répertoire, classe statique, est vraiment utile. Une autre est une classe statique appelée file. Avec le fichier, nous pouvons créer des fichiers. Par exemple, si nous voulons créer un fichier journal, nous pouvons supprimer des fichiers. Nous pouvons vérifier si des fichiers existent, nous pouvons déplacer un fichier ouvert. Il y a donc plein de choses différentes à faire avec les fichiers. La dernière qui est très utile est la classe statique path. Le chemin est très utile pour travailler avec des chemins. Si nous donnons le chemin de notre fichier, nous pouvons obtenir le nom du fichier à partir du chemin. Nous pouvons peut-être obtenir l' extension d'un fichier. Nous pouvons réellement travailler avec un chemin complet et nous pouvons également joindre des chemins ensemble. C'est vraiment utile pour travailler avec des chemins de répertoire. Il existe trois classes statiques qui vous seront très utiles à l'avenir. Et nous allons en utiliser quelques-unes aujourd'hui lorsque nous développerons notre recherche de fonctions récursives Ici, j'ai déjà mentionné que nous voulons que notre méthode récupère les fichiers dans le répertoire route juste pour commencer, juste pour nous assurer que cela fonctionne réellement, ce que nous voulons faire est d'obtenir tous les fichiers dans un répertoire donné. Nous connaissons cette information car c'est le chemin qui est transmis à notre méthode. Je veux obtenir tous les fichiers de ce répertoire ici. Pour ce faire, nous utilisons la classe statique du répertoire et il existe une méthode appelée get files. Get files prend un paramètre et c'est le chemin où se trouvent les fichiers. Maintenant, le retour de cette méthode est un tableau de chaînes. Ce tableau contiendra désormais les chemins complets de chaque fichier de ce répertoire. Si nous consultons notre chaîne musicale, tous ces fichiers seront disponibles ici. Chaque élément du tableau contiendra le chemin complet du fichier. Le chemin complet du système, ce sera le retour de cette méthode, get files. Je vais le stocker dans une variable appelée files. Ce seront tous les fichiers du répertoire donné. Maintenant, ce que je veux faire, c'est parcourir tous ces fichiers ici et vérifier le nom du fichier, pas nécessairement le chemin complet. Nous voulons simplement vérifier le nom du fichier pour vérifier qu'il contient notre terme de recherche. Ici, nous avons besoin d'une boucle. Je pense que chaque boucle peut être suffisante. Dans ce cas, Visual Studio nous a gentiment fourni de l'aide pour la saisie semi-automatique ici Je vais le prendre maintenant. Dans ces quatre boucles, je veux vérifier chaque fichier à tour de rôle et vérifier que le nom de fichier de ce fichier contient notre terme de recherche. Comment puis-je m'y prendre ? Eh bien, quand je veux vérifier, j'ai besoin d'une condition. Je sais que je vais avoir besoin d' une déclaration « si » ici. Maintenant, de quelle condition ai-je besoin dans la déclaration ? Eh bien, je dois obtenir le nom du fichier à partir de ce chemin. Je ne veux pas la lettre du lecteur, je ne veux pas les noms des dossiers, je veux seulement le nom du fichier lorsque je travaille avec le chemin. Comme je l'ai déjà mentionné, une classe statique appelée Path est très utile pour cela. Il existe une méthode appelée obtenir le nom du fichier sans extension qui permet d'obtenir le nom du fichier, disons trois. Il en existe également un appelé get file name. Vous pouvez choisir celle que vous souhaitez selon que vous souhaitez que les utilisateurs recherchent également des extensions de fichiers. Je vais juste utiliser celui-ci. Il ne prend qu'un seul paramètre et c'est le chemin à suivre, ce code surligné ici. Cela permettra d'obtenir le nom du fichier sans que l'extension ne soit appliquée à notre musique. Cette section surlignée sera mise en évidence ici, ce qui est génial. C'est ce que nous voulons vérifier dans Visual Studio. Maintenant, je sais que c'est le nom du fichier sans l'extension et sans le chemin. Je veux essayer de voir si l'un de ces termes contient notre terme de recherche. Dans un précédent tutoriel, j'ai abordé le travail avec des chaînes où nous faisions diverses choses avec des chaînes, des sous-chaînes, etc. Comme il s'agit ici d'une chaîne, path get file name sans extension renvoie une chaîne. Cela représentera donc une chaîne de caractères. Quand je place l'art après, nous avons toutes ces choses différentes que nous pouvons faire avec des cordes. Il existe ici une méthode appelée contains. Contient. Accepte un paramètre, qui est soit un caractère, une chaîne, soit de nombreux paramètres. Un caractère et un type de comparaison. Mais nous voulons simplement utiliser cette surcharge de chaînes ici. Nous voulons vérifier s' il contient notre terme de recherche. Je pense que c'est un très bon état. Maintenant, il y a un petit hic là-dedans, que je révélerai un peu plus tard, mais pour le moment je vais m'en tenir à cela. Maintenant, nous vérifions si chaque fichier contient à son tour notre terme de recherche. C'est plutôt bien. Maintenant, s'il contient réellement notre terme de recherche, nous voulons ajouter ce chemin ici, qui est fichier, à notre liste de résultats. Faisons-le maintenant. Pour ce faire, nous utilisons la méthode d'ajout. Nous y ajoutons le fichier. Si vous ne connaissez rien aux listes, j'ai fait un tutoriel à ce sujet. Je vous recommande d'y jeter un œil. Maintenant, il semble que nous fassions quelque chose de très bien. Nous examinons tous les fichiers du répertoire indiqué. S'il contient le terme de recherche, nous l'ajoutons à la liste des résultats ici. Comme il s'agit d'un type de référence, il se souviendra de ce que nous y avons ajouté une fois l'exécution de cette méthode terminée. C'est parce qu'il est stocké sur le tas, c'est un type de référence Maintenant, ce que je veux faire, c'est appeler cette méthode. Donnez-lui des paramètres. C'est ce que nous allons faire. Maintenant. Le premier paramètre dont j'ai besoin est le chemin où se trouve la musique. Allons-y. Maintenant, remets-le ici. Il s'agit du répertoire des itinéraires où se trouve toute la musique. Le paramètre suivant que nous avons défini est le terme de recherche, que nous prenons à partir des données saisies par l'utilisateur. Enfin, nous devons fournir une liste des endroits où nous allons réellement stocker nos complexes hôteliers. Je vais en définir un local ici, dans le Maine. Créez une nouvelle liste ici. Je ne lui ai donné aucune capacité parce que nous ne savons pas combien de centres de villégiature il y aura. Je viens de créer une liste MT ici. Je vais intégrer cela à la méthode. Lorsque l'exécution de la méthode est terminée, nous avons accès à ces résultats ici. C'est parce que, comme je l'ai mentionné, il s'agit d'un type de référence. Maintenant, ce que nous voulons faire, c'est simplement afficher les résultats à l'utilisateur. Nous pourrions peut-être utiliser un quatre pour chacun pour cela également. Ce que je veux faire, c'est que chaque fois que nous obtenons un résultat, je dirais qu'il faut simplement publier le résultat. Ensuite, je pourrais ajouter une déclaration «   if » disant que s'il n'y a aucun résultat, je vais peut-être imprimer le fait qu'il n'y a aucun résultat. OK, donc ça ressemble à ça. Maintenant, je sais qu'il existe des manières plus élégantes de faire à peu près tout dans le développement de logiciels, mais j'essaie de l'écrire de manière à ce que vous compreniez c'est plus facile à car c'est ainsi que fonctionne le cerveau. Peut-être qu'à la fin, nous pourrons mettre de l'ordre dans ce qui est facultatif, mais ce que je veux faire comprendre, c'est le principe des méthodes récursives Nous avons certaines fonctionnalités de base ici lors du développement de logiciels, nous pouvons les tester, juste pour nous assurer qu'ils fonctionnent, nous n'avons pas à terminer complètement le développement du logiciel. Je pense que c'est peut-être le bon moment pour tester cela, juste pour m'assurer que cela fonctionne. Lancez l'application maintenant. Entrez maintenant un terme de recherche. Essayons de rechercher Aba, par exemple. Pourquoi ne pas entrer dans mon application, je tape « Abba dit qu' il n'y a aucun résultat pour ma recherche ». Pourquoi est-ce le cas ? Essayons de trouver une solution. Je reviens au logiciel maintenant, je n'obtiens aucun résultat, mais il est clair que j' ajoute un résultat ici. Qu'est-ce qui se passe ici ? Voyons si nous pouvons trouver une solution. Mettons un point d'arrêt ici et lançons le logiciel. Tapez Ab. Qu'est-ce que nous avons ici ? Il semble que nous ayons tous nos fichiers ici. Atteignons-nous réellement ce point de rupture où nous ajoutons de la valeur ? Il semble que ce n'est pas le cas. Il y a donc quelque chose qui ne va pas ici. Nous n'arrivons pas à obtenir le nom du fichier correctement ou quelque chose de très différent se passe ici. Il semble que j'ai accidentellement mis le chemin ici alors que nous devrions avoir un fichier. Pour le moment, nous ne cherchons que le chemin du fichier où se trouve la musique et non le nom du fichier qui se trouve dans la boucle. Si cela résout le problème, d'accord, il semble que cela fonctionne. Maintenant, comme vous pouvez le constater, personne n'est parfait. Des erreurs peuvent arriver, mais si vous regardez mes tutoriels sur le débogage et tout ce qui s'y rapporte, vous saurez également comment résoudre les problèmes vous-même. Il semble donc que cela fonctionne. Essayons quelque chose d'autre très rapidement. J'ai fait allusion à un piège tout à l'heure, savoir si je cherche Aber, où je tape en minuscules, et où il est indiqué qu'il n'y a Mais il est clair que nous avons une chanson intitulée Abba. Ce que vous pouvez voir ici, c'est qu'il y a un problème sensible aux majuscules et minuscules. C'est parce que Aber dans le NP 3 est en majuscules, mais nous utilisons un terme de recherche en minuscules Alors, comment contourner ce problème ? Eh bien, le fichier est une chaîne et le terme de recherche est une chaîne. Lorsque nous utilisons des chaînes de caractères, de nombreuses choses sont mises à notre disposition. Ce que nous pouvons utiliser, c'est cette méthode appelée ici abaissement. Ce que cela fait, cela convertit tout cela en minuscules. De même, nous pouvons le faire sur le terme de recherche. Nous comparons maintenant tous nos termes de recherche, tous en minuscules, au nom du fichier, tout en minuscules. Maintenant, nous ne devrions pas avoir de problèmes sensibles aux majuscules et minuscules. Si je lance l'application maintenant et que je recherche Aber, vous pouvez voir maintenant que j' ai le résultat Maintenant, nous ignorons l'affaire. C'est plutôt bien. Je vais faire une autre recherche et rechercher peut-être la lettre E juste pour m' assurer que nous obtiendrons plusieurs résultats. À en revenir, ça a l'air plutôt bien. Il semble que nous obtenions tous les noms de fichiers contenant la lettre. C'est plutôt bien. Maintenant, je pense que nous sommes prêts pour la récursivité. La fonctionnalité de base fonctionne. Nous sommes heureux que cela fonctionne pour le répertoire de base. Nous pouvons maintenant introduire la récursivité. Le problème, c'est que lorsque vous introduisez la récursivité dès le départ, surtout si vous n'êtes pas compétent, alors si vous avez une erreur, cela peut être dû uniquement à vos fonctionnalités de base C'est vraiment bien de faire fonctionner cela avant d'y introduire la récursivité Cela facilite beaucoup les choses. Introduisons un peu de récursivité dans cette méthode. Maintenant, je comprends que vous ne l'obtiendrez peut-être pas la première fois, mais ne vous inquiétez pas, vous finirez par l'obtenir. Nous pouvons résoudre ce problème de plusieurs manières. Ce que je veux faire, c'est que j'ai cette méthode de recherche qui permet d'obtenir les fichiers, ce qui est plutôt bon. Mais aussi, je veux donner à cette méthode le répertoire suivant dans le répertoire actuel. Ici, par exemple, nous avons notre répertoire musical. Nous sommes déjà en train de vérifier les fichiers, mais je souhaite également obtenir tous les répertoires ici. Ensuite, dans chaque répertoire, je veux utiliser la fonctionnalité de base, qui consiste à obtenir les fichiers, mais je veux aussi obtenir les répertoires. Ensuite, ici, je veux faire la même chose, récupérer les fichiers. Y a-t-il des annuaires ici ? De toute évidence, j'ai besoin d'une fonction pour obtenir tous les répertoires du répertoire actuel. C'est ce que nous allons faire. Maintenant, je vais le mettre ici. Il existe une chose utile que nous pouvons faire pour obtenir des répertoires, savoir utiliser la classe statique des répertoires. Il existe une méthode appelée get directories et elle prend un chemin. Quel est le chemin ? Il emprunte notre chemin de base. Et comme avant, il renvoie un tableau de chaînes et chaque élément ce tableau sera le chemin complet des répertoires de ce chemin ici. Je vais donc appeler ça DR pour les annuaires. Et parce que nous savons que nous voulons entrer dans chaque répertoire, nous devons également le parcourir en boucle sans même penser à quoi que ce soit. Nous savons que nous avons besoin de répertoires et nous savons que nous devons vérifier chacun d'entre eux sans même nous soucier du problème de récursivité, de création ou de quoi que ce soit d'autre. Nous savons que nous avons besoin de cette fonctionnalité dès maintenant. Une fois cette fonctionnalité en place, nous devons déterminer comment résoudre réellement ce problème. Que mettons-nous ici ? Avons-nous besoin de quelque chose ici ? Avons-nous besoin de quelque chose ici ? Et cetera. Mais maintenant, nous avons un petit modèle. Voyons comment aborder ce problème. Je donne le répertoire racine à la méthode. Ce que je pourrais faire dans cette situation c'est obtenir tous les répertoires. Et avec le premier répertoire que j'y accède, puis j'appelle à nouveau la méthode Ce qu'elle va faire est exactement la même chose. Il va récupérer tous les répertoires et entrer dans le premier. Tous les répertoires seront placés dans le premier. Et maintenant, nous sommes dans le dossier final. Il n'y a plus de répertoire, nous ne pouvons donc pas entrer dans le premier. La dernière chose à faire est donc de récupérer les fichiers. Donc, ce que nous faisons ici, nous faisons en sorte que les répertoires toujours actifs dans le premier, toujours dans le premier. Jusqu'à la toute fin, nous récupérons les fichiers, nous en sortons un, entrons dans le suivant, nous récupérons tous les répertoires dans le premier, récupérons tous les répertoires, nous allons dans le premier, etc. C'est donc ce que nous faisons ici. Nous plongeons jusqu'au fond, et c'est la première chose que nous faisons. Nous allons à l' intérieur, à l'intérieur, jusqu'à la plus grande impasse qui se trouve ici. Ensuite, nous vérifierons les fichiers. C'est donc ce que nous allons reproduire dans notre méthode. Maintenant, pour la première fois, la méthode de recherche, nous lui passons le chemin qui est le répertoire racine de notre musique ici. Ce que je veux faire, c'est obtenir tous les répertoires comme je viens de le mentionner dans le dossier racine. Ce sont toutes celles qui sont ici. C'est ce que fait cette boucle à quatre boucles. La première itération des quatre boucles sera ce répertoire ici Maintenant, nous voulons réellement entrer dans ce répertoire. Ce que nous pouvons faire, c'est nous transmettre cette méthode à elle-même. Nous pouvons appeler la méthode d'elle-même. Même ce que je veux faire, c'est appeler la méthode. Simplifions-le. Les résultats ne changeront jamais. Nous ne définissons pas de nouveaux résultats, nous les ajoutons simplement aux résultats lorsque nous avons un résultat, lorsque nous avons un match En fait, nous initialisons et définissons les résultats ici chaque fois que nous les transmettons. Nous voulons simplement le faire circuler. Lorsque nous appelons cette méthode en elle-même, nous voulons simplement transmettre cette valeur à l'intérieur. La seule raison pour laquelle nous voulons le faire, c'est simplement pour y ajouter des éléments. Nous n'avons pas vraiment besoin d'en faire quelque chose de spécial ici. Il en va de même pour le terme de recherche. Nous ne changeons pas le terme de recherche ici, nous demandons plutôt un terme de recherche à l'utilisateur. En ce qui nous concerne, c'est quasiment en lecture seule dans cette méthode. Encore une fois, nous ne faisons que transmettre cela également. Tout comme les résultats, la seule chose qui diffère vraiment ici est le chemin dans notre premier répertoire. En fait, nous voulons le répertoire dans lequel nous allons entrer. Ça va ressembler à quelque chose comme ça. Si je l'enlève un peu, voici à quoi cela ressemblera. Je ne sais pas si vous pouvez comprendre cela, mais la première fois que cela est lancé, nous obtenons les répertoires. Nous parcourons ces répertoires en boucle. Donc, dans le premier répertoire, nous appelons à nouveau cette méthode. Cette méthode est maintenant appelée avec le premier répertoire du chemin d'origine. Une fois qu'il est dans ce répertoire, encore une fois, nous récupérons les répertoires jusqu'à ce que nous atteignions la toute fin, qui se trouve ici. Imaginez que c'est le chemin transmis dans Now, maintenant il n'y a plus de répertoires. Cela va être compté jusqu'à zéro. Cela ne sera même pas exécuté pour chaque boucle , car s'il n'y a aucun répertoire dans ce résultat, sera complètement ignoré Maintenant, lorsque cette option est ignorée, cette méthode ne s' appellera pas elle-même car c'est la seule fois où elle s'appelle elle-même. Ce qu'il va faire ensuite, c'est récupérer tous les fichiers. Il récupère ensuite ces fichiers ici et vérifie si nous avons une correspondance, puis la méthode se termine. Lorsque la méthode se termine, nous revenons à l'appel précédent, qui se trouve à l'intérieur de cette boucle. Ensuite, il va s'appeler à nouveau dans le répertoire suivant, lors de la prochaine itération de la boucle Ensuite, il se termine et passe dans le répertoire suivant. Ici, il vérifie la présence de répertoires et de fichiers. Est-ce que cela fonctionne ? Jetons un coup d'œil, pourquoi ne pas saisir un terme de recherche ? Donc, ce que je vais faire, donner un terme de recherche pour un fichier comme celui-ci. Par exemple, bonjour, bonjour. Maintenant, hello, hello se trouve dans ce dossier, ce dossier, et hello, hello n'est pas dans le répertoire de base. En recherchant hello, je sais pertinemment qu'il faut vérifier un grand nombre de dossiers pour trouver ce fichier, c'est un test approprié que je pourrais utiliser. Exécutons le programme. Veuillez saisir le terme de recherche. Tapons bonjour ici. On dirait qu'il l'a trouvé. Vous voyez ce résultat, en recherchant des sous-répertoires, il est entré dans deux répertoires et le fichier a finalement été trouvé Ici, il semble que cela fonctionne réellement. Voici un exemple de méthode récursive, c'est juste une méthode qui s'appelle elle-même. Nous introduisons simplement les résultats dans un paramètre qui est un type de référence, c'est une liste Faisons un autre test juste pour nous assurer que cela fonctionne. Je vais prendre ce fichier Hello, qui se trouve ici, et le coller à quelques autres endroits. Je vais le mettre ici. Je vais le mettre ici. Je vais le mettre ici. Nous devrions maintenant obtenir beaucoup plus de résultats. Lancez le programme, tapez bonjour. Et maintenant, vous pouvez voir que j'ai trouvé toutes ces instances de ce Hello P Three, donc il semble que cela fonctionne. C'est donc une très bonne nouvelle. Maintenant, lorsque vous écrivez des méthodes récursives, vous avez besoin d'un moyen d' échapper à la récursivité La récursivité ne s'arrêtera pas à moins que vous n' introduisiez quelque chose comme une condition, peut-être une instruction if Ou peut-être que dans notre cas, nous avons une boucle qui parcourt les répertoires et les fichiers. Nous n'avons pas une infinité de répertoires, nous n'avons pas une infinité de fichiers. Cette méthode récursive finira donc par s'arrêter. Cependant, il est assez facile qu' une méthode s'appelle elle-même à l'infini, comme dans cet exemple Si cette méthode s'appelle elle-même avec les mêmes paramètres, il n'y a aucun moyen de la fermer. C'est le danger d'utiliser la récursivité. Lorsque vous écrivez des méthodes récursives, vérifiez toujours que vous disposez d'une condition ou d'une clause d' échappement Sinon, votre application se bloquera et vous aurez beaucoup de comportements inattendus. Si je lance le programme, maintenant je tape n'importe quel terme de recherche, vous pouvez voir que nous avons un débordement de pile Il a essayé de s'appeler 24 000 fois avant finalement tomber en panne car la pile est pleine de mémoire Soyez toujours prudent lorsque vous écrivez des méthodes récursives Donc, au début du tutoriel, j'ai dit, oh, nous pourrions facilement avoir cette collection ici en retour. Nous n'en avons pas besoin comme paramètre. Maintenant que j'ai expliqué la récursivité, cela peut modifier ce code et l'avoir en retour Au lieu de cela, j'ai configuré la valeur de retour ici. C'est ce que je définis ici. Supprimons cette partie. Stockons les résultats dans une liste de résultats ici, car ce sera notre retour ici. Je n'ai plus besoin de transmettre ce paramètre, et je n'en ai plus besoin comme paramètre, mais je dois définir un résultat ici. Faisons-le maintenant. OK, ce que j'ai fait ici, j'ai ajouté un retour à la recherche, qui est une liste d'une chaîne. J'ai défini la liste des résultats de la chaîne dans la méthode ici. Il y a maintenant quelques points à noter. La première chose que je dois faire est de le renvoyer hors de la méthode. que je vais faire. Maintenant, la prochaine chose que je dois faire, chaque fois que j' appelle récursivement cette même méthode ici Je dois également stocker le retour chaque fois que je l'appelle de manière récursive. Sinon, nous perdrons ces informations. Si nous approfondissons notre structure de dossiers, nous avons trouvé des fichiers, par exemple, comme ici. Eh bien, nous devons les transmettre à partir de l' appel interne de la méthode, car par exemple, je ne stocke pas de retour ici. Ce que je dois faire chaque fois que je l'appelle récursivement, je dois stocker les résultats ici Maintenant, vous pensez, OK, ça a l'air de fonctionner. J'ai défini la liste, chaque fois que je m' appelle elle-même de manière récursive, je me souviens de ces valeurs et je les place ici Ensuite, chaque fois que nous avons une correspondance, je l'ajoute à la liste, puis je la renvoie et j'imprime les résultats. Jetons un coup d'œil et voyons ce qui se passe. Disons bonjour. Il semblerait que nous ayons un petit problème. C'est là que le débogage est très utile, mais je peux vous dire ce qui se passe ici Le problème est que nous avons trouvé des fichiers dans les profondeurs de nos appels récursifs, par exemple ces fichiers ici Maintenant, il y a deux dossiers de profondeur, vous pouvez le voir ici. Maintenant, ce qui se passe, c'est qu'ils ne sont pas mémorisés, car lorsque cela finit par sortir, nous réinitialisons cette valeur chaque fois que nous appelons cette méthode récursive Et c'est un petit problème. Nous ajoutons le contenu ici, mais nous le réinitialisons également ne se souvient essentiellement de rien, mais nous ajoutons en fait des informations ici. Si je mets un point d'arrêt, tapez Bonjour, il y a en fait des fichiers ici, mais le problème, c'est qu'ils sont en train d'être réinitialisés. Si je regarde mon onglet Locals en bas, je peux suivre les résultats ici. J'ai fixé un point de rupture au retour, j'ai atteint un cinq. Maintenant, vous pouvez voir que j'ai un résultat si je sors d'ici. Vous pouvez maintenant voir les résultats remis à zéro. Dès que je sors d'ici, ne se souvient de rien. Qu'est-ce qui se passe ici. Le problème est que c'est un problème assez simple, mais il est peut-être très difficile à comprendre lorsque l'on parle de manière récursive. Ce que nous devons faire , c'est ajouter les résultats de cette recherche à cette liste Nous ne pouvons pas simplement remplacer la liste par les résultats de la recherche, sinon nous oublions tout ce que nous avons appris jusqu'à présent. Ce que nous devons faire, c'est tout ajouter à partir des résultats de la recherche récursive Et il existe une méthode appelée add range. Et ce que cela fait, cela ajoute un ou plusieurs éléments à notre liste. Et c'est l' avantage d'utiliser une liste par rapport à quelque chose comme un simple tableau. Nous avons ces méthodes à notre disposition. Jetons donc un coup d'œil à cela maintenant et voyons si cela fonctionne mieux. Je lance donc l'application, je tape bonjour, et maintenant nous avons tous nos résultats. Ils ne sont plus générés par notre méthode récursive C'est pourquoi le fait d'avoir un retour ajoute un peu plus de complexité aux choses. C'est pourquoi j'ai d'abord introduit l'exemple avec un paramètre. Comme cela n'est pas réinitialisé chaque fois que nous avons un retour, oui, nous définissons le retour ici et l'initialisons dans une nouvelle zone de mémoire Mais nous devons nous rappeler d'ajouter les résultats de chaque appel récursif, chaque fois que nous appelons notre méthode de manière récursive Maintenant, je sais que c'est tellement à assimiler, c'est super compliqué. Mais je vous l'ai expliqué en termes simples. Si vous regardez ce tutoriel, peut-être deux ou trois fois. Et peut-être fournissez également vos propres exemples. Vous finirez par le comprendre et un jour, il suffira de cliquer. Je vous promets que c'est la récursivité en C Sharp. Pas seulement C Sharp. récursivité existe dans de nombreux langages de programmation 79. 20-1. Projet final (jeu de simulation de Top Trumps): Donc le projet final. Quel est le projet final ? Eh bien, jetons un coup d'œil. Le projet final est facultatif, mais je vous recommande vivement d'appliquer toutes les connaissances que vous avez apprises jusqu'à présent et de l'essayer sérieusement. Ensuite, vous remporterez officiellement le titre, le titre non officiel de programmeur informatique C Sharp ou d'ingénieur logiciel C Sharp Ça a l'air plutôt bien, n'est-ce pas ? Donc, pour le projet final, nous allons simuler un jeu de Top Trumps. Maintenant, si vous n'êtes pas familier avec les meilleurs atouts, il s'agit essentiellement d'un jeu de cartes Et le jeu de cartes est conçu sur le thème de ce que vous voulez, vraiment de ce que vous voulez acheter. Par exemple, vous pouvez avoir un dragon avec des créatures mystiques où vous avez des sorciers, des rois, des dragons et des choses comme ça Chaque carte possède un personnage, celui-ci s'appelle Dragon par exemple. Et il possède diverses statistiques telles que la force, les compétences, le pouvoir magique sur le facteur de peur. Cependant, si vous achetez un deck avec des super-héros, ils peuvent avoir quelque chose de totalement différent avec des noms de personnages différents Mais en général, chaque jeu de cartes est thématique. Lorsque vous créez votre version en C sharp, vous pouvez choisir le thème de votre choix. Le ciel est la limite, utilisez simplement votre imagination pour comprendre le fonctionnement du jeu. Eh bien, j'ai inclus une spécification complète qui explique le fonctionnement du jeu, mais aussi certaines hypothèses que vous pouvez prendre lors du développement de cette solution. Je vais maintenant vous montrer une démo, en gros comment cela fonctionne. Voici donc la spécification ici, ne vous inquiétez pas, je l'ai incluse au format texte, alors consultez-la à quelques reprises lors de la planification de votre projet et de la manière dont vous allez aborder le scénario. Je donne une brève description de ce que c'est. J'ai fourni quelques liens afin que vous puissiez faire des recherches supplémentaires. Maintenant, c'est un jeu à deux joueurs. Nous partons du principe qu' y a que deux joueurs qui jouent. Et j'ai dressé une liste d' hypothèses que vous pouvez faire lors de la création de ce projet, juste pour le rendre beaucoup plus facile. Je ne veux pas vraiment que tu passes des semaines et des semaines là-dessus. Vous pouvez le faire si vous le souhaitez, cela ne pose aucun problème. Mais je pense qu'en utilisant cette spécification, vous savez, quelques heures par jour pendant une semaine environ, je pense que c'est une bonne quantité de temps pour approfondir vos connaissances récentes et développer un logiciel intéressant à montrer à vos amis, famille ou à qui vous voulez se référer à la spécification sur la façon de procéder. Je vais maintenant vous montrer ma solution sur la façon dont j'ai abordé le problème afin que vous puissiez avoir une idée de son fonctionnement Donc, lorsque le logiciel est exécuté pour la première fois, nous supposons simplement que le joueur 1 passe en premier. Le premier joueur peut appuyer sur Entrée pour commencer son tour. C'est maintenant au tour du joueur 1. Le joueur 1 a cinq cartes et le joueur 2 cinq cartes. Ils ont donc cinq cartes chacun. Pour que les cartes représentent un personnage comme un dragon ou un roi, par exemple, quelque chose comme ça. Ici, j'ai des personnages totalement aléatoires. C'est, tu sais, à quel point mon imagination est bonne. Une carte ou un personnage choisi au hasard dans ma main est joué, et c'est l'ours en peluche Maintenant, l' ours en peluche a une taille, un poids, un pouvoir magique et un facteur de peur Parce que c'est un nounours, il est assez petit, il n'est pas très lourd, il n'a aucune capacité magique ni aucun facteur de peur C'est donc en fait une très mauvaise carte. Maintenant, l'idée est de choisir la statistique la plus élevée ici, et j'espère que mon adversaire aura une statistique inférieure à la mienne. Donc, si je choisis la hauteur, disons 1 mètre 45. Je choisis donc le numéro un ici. J'appuie sur Entrée. Ensuite, le joueur, l'autre joueur défend avec Harry Houdini, qui est Mais il a une hauteur de 5,7. L'ours en peluche n'est donc pas plus grand que Harry Houdini L'ours en peluche perd donc car sa hauteur n'est que de Mais Harry Houdini a 57 ans. Le joueur 2 gagne. Mais comme le joueur contre un, le joueur deux prend la carte de l'ours en peluche, le joueur deux conserve sa carte Harry Houdini Maintenant, c'est au tour du joueur de jouer. Donc, si je touche Anton, vous pouvez voir que le joueur deux a maintenant six cartes parce qu'il a gagné l'ours en peluche C'est maintenant au tour du joueur 2. Le personnage sélectionné au hasard est Picchu. Maintenant, Picchu a un assez bon pouvoir magique, mais assez court. Et il est également très léger. Et il n'y a pas beaucoup de facteur de peur. J'ai donc envie de jouer à Magic Power parce que c'est assez élevé et j' espère pouvoir battre la carte défenseure du joueur actuel. Jetons donc un coup d'œil à cela. L'autre joueur défend avec Dark Veda. Mais j'ai choisi Magic Power, qui était de 75. Cependant, le Dark Veda n'a qu' un pouvoir magique de deux. Alors j'ai gagné. J'ai encore gagné. Maintenant que j'ai encore gagné, c'est toujours mon tour. C'est donc toujours au tour du joueur 2. Maintenant, vous pouvez voir que j' ai sept cartes. Le gagnant de la partie est celui qui possède les dix cartes dans cet exemple, car il n'y en a que dix. Si vous créez 20 cartes, il est évident que le gagnant est avec les 20 cartes. Maintenant, il y a beaucoup de suppositions ici. Vous pouvez voir que je sélectionne au hasard des personnages dans le deck de chaque joueur. Alors que lorsque vous jouez à ce jeu en personne, vous prenez celui qui se trouve en haut du deck. J'utilise donc de nombreuses hypothèses juste pour raccourcir la durée de vie de ce projet. Tu sais, je ne veux pas vraiment que tu travailles là-dessus pendant 34 mois et que tu t' arraches les cheveux. Je ne pense pas que ce sera un premier et un dernier projet très amusant pour vous. Il y a donc beaucoup de suppositions, vous savez, ce n'est pas vraiment obligatoire. Ajoutez votre touche personnelle. Ajoutez votre propre saveur. Cela dépend vraiment de vous, évidemment, je viens de jouer à Picature, et Piccature a de nouveau été sélectionné Donc, vous savez, ce n'est pas une application parfaite, alors ne vous inquiétez pas si elle est parfaite. C'est juste pour perfectionner vos connaissances et d'autres choses de ce genre. C'est donc un peu amusant et je pense que vous passerez un bon moment ici. Nous avons le mini-diable, nous sommes le facteur 4 de la peur. Nous nous en sortons plutôt bien. Nous avons neuf cartes maintenant nous avons le pouvoir magique de Harry Houdini Et il semblerait que nous ayons gagné la partie. Le joueur 2 a complètement détruit les dix cartes , le joueur 1. Voulons-nous rejouer ? Oui ou non ? Si j'appuie sur Non, merci d'avoir joué. Appuyez sur Entrée pour quitter. C'est le projet final. Encore une fois, ce n'est pas la solution, c'est juste une solution. Vous pouvez faire ce que vous voulez avec les personnages de votre choix, mais essayez d'appliquer la plupart des choses que nous avons abordées dans le cours. J'ai donc créé ici, sur le côté droit, j'ai créé quatre classes personnalisées. Ici, je les ai placés dans un projet distinct. Et quand j'ouvre la méthode principale ici même dans la classe de programme, vous pouvez voir qu'il n'y a pas vraiment beaucoup de code ici. C'est parce que nous l'avons séparé en conteneurs logiques, vous savez. J'ai une classe de manette de jeu qui gère tout ce qui concerne le jeu , les virages, etc. J'ai une classe de joueur maintenant, les joueurs, elle modélise les joueurs. Et un joueur détient un certain nombre de personnages ou de cartes. Et le personnage ou la classe de carte est responsable de tous les personnages du jeu. Vous pouvez donc voir comment nous utilisons les connaissances que nous avons appliquées. Où nous suivons un cours et ce cours est responsable de tout ce qui concerne son nom. Ainsi, la classe des personnages s'occupe des personnages, la manette de jeu s'occupe du fonctionnement du jeu, etc. C'est donc vraiment comme ça que ça fonctionne. Nous utilisons toutes les connaissances que nous avons acquises et nous les appliquons maintenant. C'est donc essentiellement ma solution pour le projet final. Tu sais, Planet Planet. Utilise des blocs-notes. Utilise du papier. Utilise un stylo. Réfléchissez bien à la manière dont vous allez aborder le problème, à la manière dont vous allez l' organiser, aux techniques que vous allez utiliser, aux boucles, aux conditions, etc. J'espère que tu t'amuseras bien avec ça. Le projet final teste vos connaissances sur de nombreux concepts des sujets que nous avons abordés jusqu'à présent. Donc, les classes, les objets, l' instanciation, les instructions if, les instructions switch, les conditions, les opérateurs booléens Quatre boucles, des boucles métalliques, de nombreuses boucles différentes, des méthodes et bien plus encore. C'est donc un excellent moyen de prendre toutes ces connaissances et de les appliquer à un seul logiciel. Combien de temps durera le projet final ? Eh bien, si vous aimez la programmation et que vous voulez devenir programmeur, cela ne devrait pas vous inquiéter du tout, car la pratique est toujours une bonne chose. Si vous êtes un débutant total lorsque vous avez commencé ce cours, consacrez peut-être quelques heures par jour pendant environ une semaine, quelque chose comme ça. Comme toute autre langue, français, allemand, espagnol. Vous n'allez pas absorber toutes les informations en une seule fois. Ce n'est tout simplement pas réaliste. Mais utilisez le matériel pédagogique comme point de référence pour le projet final. Si vous êtes en train de développer votre projet final et que vous ne vous souvenez pas comment créer une boucle de fil, par exemple, il vous suffit de revoir le didacticiel sur la boucle de fil pour vous rafraîchir Même les programmeurs informatiques professionnels utilisent Google et divers autres sites Web comme point de référence, et c'est parfois ce qu'ils font La programmation quotidienne consiste à sortir des sentiers battus et appliquer une pensée latérale et logique. Il ne s'agit pas de mémoriser la syntaxe et de la régurgiter, alors ne vous laissez pas décourager par cela J'ai donc inclus ma solution pour le projet final, mais je vous recommande vivement de ne pas l'utiliser. Ne le regardez pas avant d' avoir terminé le vôtre. Ensuite, vous pouvez l'utiliser comme point de référence pour peut-être, peut-être améliorer le vôtre. Ou regardez les différences entre ma solution et la vôtre. N'oubliez pas qu'il n'existe pas de solution unique à un problème. Il peut y avoir plusieurs solutions et elles sont toutes correctes. Mais utilisez-le simplement comme point de référence lorsque vous aurez terminé votre projet final. Envoyez-le à vos amis. Envoyez-le à votre famille. Téléchargez-le sur Youtube par exemple. Et envoyez-moi le lien. J'adorerais voir vos projets finaux et la façon dont vous avez interprété cette spécification et y avez apporté votre propre touche. La dernière chose que je veux dire, c'est bonne chance avec le projet final et bonne chance pour vos futurs projets de programmation Enfin, merci. Merci beaucoup d'avoir regardé Take Care. 80. 20-2. Résumé du cours (Où dois-je aller ? ): Maintenant, toutes les bonnes choses ont une fin. Mais si vous êtes arrivé jusqu'ici, merci d'avoir regardé. Si vous avez des questions, des problèmes, des soucis des questions concernant le contenu de l' ensemble du cours, veuillez laisser un message sur le contenu lui-même ou envoyez-moi un message Je me ferai également un plaisir de vous aider à examiner les fichiers de projet joints si vous ne l'avez pas déjà fait. La plupart des leçons de ce cours sont accompagnées fichiers de projet et n' hésitez pas à les développer, à en tirer des leçons, mais aussi à y ajouter votre propre touche. La limite, c'est votre imagination. La grande question que beaucoup de gens se posent généralement après avoir terminé un cours est où dois-je aller à partir de là ? Eh bien, je ne vais pas te laisser en suspens. Beaucoup le font, mais je vais vous donner quelques idées. Cela dépend de vos objectifs. Quels sont tes objectifs ? Ils vous sont uniques, ils vous sont personnels. Par exemple, vous recherchez peut-être un emploi. Tu veux être embauché par quelqu'un. Ou peut-être que c'est un hobby. Peut-être souhaitez-vous créer une application téléphonique pour gagner de l'argent. Ou peut-être souhaitez-vous créer des jeux vidéo dans Unity ou simplement relever un nouveau défi. Quelque chose de totalement nouveau. Cela dépend donc. Mais le secret et le point commun de tout cela est la pratique, la pratique, la pratique. C sharp n'est pas très différent d' une vraie langue parlée comme français, l'allemand ou le portugais par exemple Plus vous l'utiliserez, vous vous améliorerez. C'est tout à fait naturel. Et de même, moins vous l'utiliserez, plus vous oublierez. Donc, pendant votre temps libre, je vous recommande de créer petites applications logicielles pour résoudre vos problèmes quotidiens et vous faciliter la vie. Non seulement cela, mais c'est aussi très amusant. J'ai créé de nombreux logiciels pour me faciliter la vie. Par exemple, j'ai créé un renommeur de musique lorsque j' ai iTunes, par exemple Parfois, il ne prend pas le nom du fichier, il prend une étiquette cachée dans le MP Three, par exemple. J'ai donc créé un logiciel pour injecter ce tag dans le MP Three afin que mon iTunes soit vraiment beau et que tout soit automatisé. Je n'ai pas besoin, vous savez, renommer chaque chanson pour lui donner le bon artiste ou le bon titre Par exemple, cela est très facile à faire avec de nombreux outils et techniques que nous avons abordés dans ce cours. Par exemple, lorsque des articles gratuits apparaissent sur Craigslist ou des choses comme ça, je peux émettre un son de musique Donc, chaque fois que quelqu'un donne quelque chose gratuitement, mon ordinateur portable commence à jouer de la musique. Et puis je sais qu'il y a quelque chose de nouveau dans la section gratuite et je peux contacter instantanément l'acheteur et, vous savez, organiser le retrait de ce produit. Tu sais, la limite, c'est ton imagination. Enfin, j'ai créé un téléchargeur groupé sur Youtube. Ce qui se passe, c'est que si vous avez dix ou 50 vidéos, vous voulez les télécharger sur Youtube, mais vous ne voulez pas taper tous les titres, descriptions et autres choses de ce genre. J'ai donc créé une application où je peux prendre 50 vidéos, par exemple, les glisser-déposer sur le logiciel. Et il renseigne le titre et la description de la vidéo et même les balises à partir du nom du fichier vidéo Et cela permet de gagner beaucoup d'heures. Et il s'agit en fait d'un logiciel commercial maintenant. Ainsi, non seulement cela met en pratique mes compétences en programmation, mais cela rapporte également de l' argent. Il y a donc beaucoup d'idées que vous pouvez, vous savez , intégrer et appliquer à vos propres scénarios spécifiques. Une autre chose que vous pouvez faire, qui est vraiment très bonne, est de passer des tests de codage en ligne, comme de petits défis de codage. Ainsi, par exemple, il existe deux sites Web que vous pouvez utiliser. L'un s'appelle Hacker Rank et l'autre s'appelle Lite Code. Je vais vous les montrer maintenant. Maintenant, chacun d'entre eux a de nombreux défis de codage différents, tout comme j'ai présenté le projet final avec le meilleur simulateur Trump. Mais en général, ils sont beaucoup plus faciles. Par exemple, dessinez une pyramide, dont nous avons parlé dans ce cours, ou dessinez un carré ou trouvez la reine, des choses comme ça. Donc, des défis rapides qui mettent à l' épreuve votre pensée latérale, c'est-à-dire sortir des sentiers battus. Ainsi, non seulement ils testent vos connaissances de C Sharp et peut-être votre mémoire de la syntaxe, mais surtout, votre application d'un Sharp Lorsque vous êtes confronté à un problème, cela teste le fonctionnement de votre cerveau, façon dont vous comprenez le problème et trouvez une solution. Ces défis sont généralement uniques et très spécifiques. Vous ne pouvez pas vraiment les rechercher sur Google et trouver une solution, par exemple. Donc, si vous pratiquez beaucoup ces défis de codage et que vous maîtrisez votre capacité à les résoudre, améliorant votre réflexion latérale, cela vous rendra très attractif pour les employeurs potentiels. Les employeurs ne recherchent pas de personnes capables de régurgiter et de mémoriser Ils recherchent des personnes et encouragent la pensée latérale. Et ces tests de codage en ligne sont parfaits pour cela. De plus, ces deux sites Web que j'ai suggérés indiquent les exercices que vous avez déjà résolus. Et ils créent un profil comme un petit tableau de classement. Tu sais lesquels tu as résolu. Et je ne vois aucun problème à l'imprimer ou à l'envoyer à un employeur potentiel. Ils pourront alors réellement voir les défis que vous avez relevés. Et ils peuvent voir que, vous savez, ce n'est pas simplement une carrière que vous pourriez vouloir ou un travail que vous aimez vraiment faire. Et c'est ce qu'ils recherchent et c'est ce qui vous distingue des autres. Et encore une fois, il ne s'agit pas uniquement de trouver un emploi. Même les amateurs adorent ces défis de codage. Tu sais, ça fait vraiment travailler ton cerveau. C'est un très bon exercice d'entraînement pour votre esprit, je recommande donc vivement les tests de codage en ligne. Une autre chose que vous pouvez faire est entraîner à poser des exemples de questions d' entretien d'embauche, même si vous n'avez pas l'intention de travailler. Parce qu'ils mettent réellement vos connaissances à l'épreuve et vous mettent dans l'embarras lorsque vous retirez ce cours de votre ordinateur portable, par exemple, en le recouvrant votre main ou d'un livre et en vous demandant ce qu'est le polymorphisme Pouvez-vous répondre à cette question sans regarder ce cours ou le chercher sur Google par exemple ? Est-ce possible ? Et si je vous demandais ce qu'est la surcharge de méthodes ou qu'est-ce que je veux dire quand je dis classe abstraite ou classe abstraite Et qu'est-ce que l'encapsulation et quoi diffère-t-il d'un autre terme, vous savez Peux-tu répondre honnêtement à ces questions ? C'est donc ainsi que vous vous testez réellement, savoir si vous en comprenez les principes. C'est facile de regarder quelqu'un d'autre parler de quelque chose et dire, oh, d'accord, oui, je comprends. Mais si vous recouvrez le matériau avec votre main et que vous le cachez à votre vue, pouvez-vous honnêtement dire, d' accord, c'est le polymorphisme C'est donc une chose lire quelque chose et de le comprendre, mais c'en est une autre de le réciter avec ses propres mots Et c'est très important non seulement pour obtenir un emploi, mais aussi pour bien comprendre tout ce qui est abordé dans ce cours. Je recommande donc vivement de le faire également. Donc, la dernière chose que je vais mentionner pour est de ce que je dois faire ensuite, c'est pourquoi vous avez suivi ce cours. Certaines personnes ont peut-être suivi ce cours pour passer à autre chose. Peut-être vouliez-vous développer des jeux dans Unity. Peut-être vouliez-vous développer des sites Web, vous deviez donc connaître le point fort. Ensuite, vous pourrez apprendre le Spot Net, par exemple. Ou peut-être souhaitez-vous créer des formulaires pour une application de bureau ou une application mobile. Vous pouvez appliquer Sharp à tous ces scénarios, mais ils nécessitent davantage de connaissances pour réussir à remplir le rôle ou à accomplir ce que vous voulez faire. Mais en termes de connaissance, de compréhension et de pratique du C sharp, ce cours sera très utile pour ces applications. Je peux vous dire que si vous voulez commencer à créer des jeux dans Unity, vous constaterez que vous connaîtrez à peu près tout le do sharp. Vous devez savoir, ou du moins savoir comment rechercher et rechercher les nouvelles méthodes et classes que vous souhaitez utiliser. Toutes les connaissances requises pour créer des jeux vidéo dans Unity évolueront autour de la compréhension et de l'apprentissage du moteur Unity , par exemple, qui est très différent. Mais en ce qui concerne C Sharp, vous êtes à nouveau couvert pour la création d'applications mobiles. Le C sharp est déjà abordé Peut-être avez-vous juste besoin d'apprendre quelques astuces graphiques ou spécifiques à faire avec les applications mobiles. Encore une fois, ce cours de boutique en ligne sera un point de départ idéal pour tout ce que vous voulez réaliser Quel que soit votre objectif final. Donc, la dernière chose que je vais dire est, encore une fois, merci beaucoup d'avoir regardé. N'oubliez pas de me faire part de vos projets finaux si vous souhaitez les entreprendre. Si vous avez des questions, envoyez-moi un message et laissez un commentaire. Et dites-moi simplement comment le cours s'est déroulé pour vous. Et peut-être que dans cinq à dix ans lorsque vous serez un développeur de logiciels professionnel, vous pourrez peut-être m'envoyer un message me dire comment vous vous en sortez et me dire si ce cours vous a aidé à long terme. Je vais créer d'autres cours, alors n'hésitez pas à les consulter pour la dernière fois. Merci beaucoup d'avoir regardé Take Care.