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.