Transcription
1. Introduction avancée C #: Bonjour et bienvenue dans mon cours et sur les sujets avancés
C-dièse. Dans cette série de vidéos, nous allons aborder les
détails du cours ou du cours
précédent et poursuivre notre voyage examinant les
concepts avancés dans C-Sharp. Et ce cours sera accompagné d'
un dépôt Git, qui vous permettra d'
approfondir vos connaissances, de
reproduire les exemples. Donc, si vous voulez apprendre quelque chose de plus
complexe et de do dièse, alors ce cours
est fait pour vous. On se voit dans le prochain.
2. C # a avancé le programme d'installation: Bonjour et bon retour. Dans cette courte vidéo,
nous allons voir l'environnement dans lequel vous pouvez
suivre les exemples. Donc, en gros, vous
avez deux options. L'une est que vous pouvez utiliser
avec Visual Studio précipité, vous pouvez utiliser la 29e version
ou la version 2022. Vous pouvez le télécharger depuis le site
officiel de Microsoft. En gros, ce que
vous devez faire est ouvrir le programme d'installation de Visual
Studio. Et vous pouvez cliquer
sur Modifier. Ici. Vous devez
faire vérifier et installer le développement dotnet. Une fois que vous l'
aurez installé, vous pourrez
suivre. C'est une option. L'autre option que vous pouvez utiliser est le code Visual Studio. Et Visual Studio Code, vous pouvez vérifier les extensions
et rechercher C sharp. C'est un peu lent. Mais en gros, si vous
installez cette extension, devrait aussi bien se passer. C'est tout ce que j'utilise, essentiellement une machine Windows. Et c'est ça. On se voit dans le prochain.
3. C # Advanced Logical and Bitwise: Bonjour et bon retour. Dans cette vidéo, nous
allons tenir bon. Nous allons parler des opérateurs
logiques et binaires et de la façon dont vous pouvez les utiliser. C'est si logique et si sage. Très bien, créons-le. Donc, en gros, lorsque nous parlons d'
opérateurs logiques et binaires et de C-sharp, C-sharp prend en charge quatre
types principaux d'opérations qui sont regroupées en fonction l'idée qui sous-tend leur existence. Les catégories sont donc arithmétiques,
relationnelles, logiques, assignées au niveau du
bit et certaines opérations
diverses. Les opérateurs arithmétiques effectuent
généralement des opérations sur deux nombres. Vous voulez donc additionner deux nombres, multiplier, diviser, etc. Les opérateurs relationnels sont
utilisés pour comparer ou Chegg, qualité du ou des
objets d'entrée. Et les opérateurs logiques nous
permettent de comparer un peu d' un objet donné et
renvoient toujours un booléen sous forme de stations. Ainsi, que ce soit vrai ou faux, les opérateurs
bit à bit
effectuent des opérations sur des bits individuels et les
résultats sont toujours des bits. Et les opérateurs
d'affectation nous permettent d'initialiser un objet avec une valeur pour
effectuer une opération spécifique. Et il existe également un autre concept
important qui est la
priorité des opérateurs, lesquels sont
plus forts que les autres. Cela indique la logique de la façon dont les expressions
complexes
sont évaluées. Donc, si nous voulons
examiner les opérateurs logiques, nous pouvons procéder comme suit. Ajoutons la bonne
clé à la fin. Et nous pourrions dire que
nous avons un booléen a, qui est vrai, et le
booléen b qui est faux. Nous pouvons utiliser la ligne
droite de la console pour vérifier si c'est la
valeur de a et B. Ou nous pouvons vérifier
la valeur des ohms ou droite a ou B, et ainsi de suite. Si nous démarrons ceci
ou si nous l'
exécutons, nous pouvons voir que a et B sont
faux et que a ou B est vrai. Donc, lorsque nous
parlons de l'opérateur final, nous devons savoir que
la condition est vraie lorsque les deux entrées sont vraies, sinon c'est faux. La condition dans le cas
d'opérateurs OU, la condition est vraie
lorsque l'un d'entre eux est vrai, sinon c'est faux. Il s'agit donc peut-être des opérateurs logiques
et nous avons une négation. Et si vous utilisez un point d'
exclamation avant la variable, elle n'obtiendra pas sa valeur. Nous avons donc défini un s vrai, et ici si nous nions
vrai, nous obtenons faux. Maintenant, nous pouvons également vérifier
les opérateurs bit à bit. Nous pouvons donc avoir un tableau int
qui va être six. Appelons-les C et D. Et le D aura 17 ans. Donc, si nous voulons utiliser
les opérateurs bit à bit, nous pouvons faire
ce qui suit. Nous pouvons donc utiliser la chaîne de caractères
convert to. Il s'agit d'une fonction qui
vous permet de convertir une chaîne de caractères. Et nous pourrions dire que a ou B. Et nous pouvons également
utiliser les deux ici. Laisse-moi juste vérifier. Alors convertissez en chaîne A ou B. Et si on y va, attendez, c'est C ou D. accord ? Donc, en gros, lorsque
nous utilisons l'opérateur OR, agit comme si nous avions certains
de ces deux nombres. Nous avons donc la valeur de 23. Et nous aurions pu, Vérifions-nous juste pour être deux fois
la représentation de ces nombres. Donc six, c'est 0000110. Et nous avons le 17, qui va être des
zéros, des zéros 010001. Et nous pouvons également utiliser
l'opération AND ici. Si nous l'exécutons, nous obtenons cette valeur. Et vous savez, quand nous
examinons la fin de l'opération, nous en obtenons une. Si dans les deux cas
il y en avait un, sinon nous obtenons 0. C'est pourquoi nous obtenons des zéros. Résultat car aucune de ces colonnes ne s'aligne
pour obtenir la valeur un. Et nous pouvons utiliser l'opérateur
AND bit à bit. Ça ressemble donc à ça. Et ça fait moins sept. Et nous pourrions utiliser l'opérateur OU
bit C ou D. Cela nous donne 23. Techniquement, c'est tout. C'est ce que je voulais vous
montrer dans cette vidéo. voit.
4. C # Advanced Const vs Read only: Bonjour et bon retour. Dans cette vidéo, nous
allons
parler de la différence
entre le coût et la lecture seule. do dièse. C-sharp
facilite les mots-clés tels que concentré uniquement ou lecture seule
statique même. Et cela peut être
déroutant au début. Nous devons connaître les petites
différences entre les deux. Le mot clé const n'
est donc rien de plus
qu'une constante. Donc, par exemple, au prix
de revient, ma chaîne. Et on pourrait dire que
c'est une chaîne. Et changeons-le en
guillemets doubles. Ça va ? Maintenant, il se plaint
qu'il est assigné, jamais utilisé, mais ce n'est pas grave. Donc, par défaut, si nous ne donnons pas de valeur
à cette chaîne constante, cela nous donnera une erreur
car elle doit être initialisée. C'est pourquoi il est
souligné en rouge. Mais une fois qu'on lui a donné de la valeur, tout devrait bien se passer. Et premièrement, lorsque nous définissons
la fonction constante, c'est fondamentalement une
exception à cela. Par exemple, si vous
avez un test de chaîne statique, et que nous pouvons dire que nous avons une
valeur de test de chaîne constante et le retour. Donc, en gros, nous
devons écrire la contrainte my et la ligne droite de la console. Cela va utiliser les
téléphones à trois touches. Nous pouvons donc avoir l'
invite, exécutons-la. La valeur des
constantes ne peut pas changer pendant l'exécution. Récemment, keyword est
un modificateur spécial qui ressemble beaucoup
au mot-clé constant. Et il peut être utilisé sur des champs, mais pas sur des variables locales. Ces champs peuvent donc être
initialisés lorsqu'ils sont déclarés, quel est le constructeur
de notre objet ? Ce mot-clé garantit que l'instance variable
ou la propriété d' un objet ne peut pas être modifiée
après l'initialisation. Et une telle tentative
entraînera une exception d'exemption. Et pourquoi les constantes qu'il contient sont initialisées au moment de la compilation. Le mot clé en lecture seule
permet d'
initialiser les variables lors de la
compilation ou de l'exécution. Nous pourrions donc avoir la colonne
de
chaîne publique en lecture seule Mike pour y compiler. Et nous pourrions simplement le
laisser tel quel. Par exemple, nous pourrions
avoir comme un élève de classe. Et cette classe peut avoir la chaîne
publique en lecture seule, nom complet. Et le nom de chaîne public de l'
étudiant. Le nom complet est égal au nom. Et si tu passes à la principale, on pourrait créer notre étudiant. Puis ER et New Student, et utilisez la ligne droite de la console pour imprimer le
danielle pour le nom. Et maintenant nous pouvons voir
le résultat. Y a-t-il. La différence fondamentale au
plus haut niveau si nous voulons
différencier le mot clé lecture seule
et le mot clé const. Nous pouvons donc dire que la
différence réside dans le moment où la valeur de la variable est connue tout au
long du cycle de vie de l'application. Pour le mot-clé en lecture seule, la valeur est connue au
plus tard par l'exécution, qui pour le mot-clé const, la valeur doit être
connue au moment de la compilation. Le point commun de ces
mots clés est qu' ils couvrent tous deux des types de données
immuables, ce qui signifie que la valeur ne peut pas changer pendant la durée
de vie de l'application. Pour le mot-clé const, la variable marquée
comme telle est placée par le compilateur dans les
métadonnées d'assemblage qui définissent la constante et les métadonnées
et incorpore la valeur code
du langage intermédiaire. après l'initialisation. Cela signifie qu'il n'
y a pas d'allocation de mémoire supérieure à quatre constantes pendant l'
exécution sous le capot, la valeur en lecture seule n'
est pas une constante. Il est stocké dans le tas du chargeur, qui est un
type mémorial qui ne peut pas être alloué tant que le
type n'est pas chargé. Techniquement, c'est
tout ce que je voulais te dire. Rendez-vous dans le prochain.
5. Portée et visibilité avancées C #: Bonjour et bon retour. Dans cette vidéo, nous
allons
parler de la portée et de la visibilité. Ce sont donc des
concepts très cruciaux ou fondamentalement cruciaux à comprendre. Et la plupart des langages
de
programmation intègrent
ce concept. La mise en page, la structure
dans laquelle se trouvent vos données et indiquent la direction dans laquelle
les données sont autorisées à circuler. d'abord, nous
approfondissons la visibilité pour vérifier la lunette. Par exemple, si nous
parlons de visibilité, nous devons considérer
une méthode de classe et visibilité
variable
ou au moins ces constructions. Cependant, il existe cinq types de visibilité
différents. Le premier est public, le second est protégé. Le troisième est interne. Les forces sont protégées à l'intérieur,
et le cinquième est privé. public est le type de visibilité le plus
indulgent. Le membre ainsi défini est
joignable de n'importe où. Les membres protégés
spécifiés ne peuvent être
joints qu' à partir de la même classe
ou à l'intérieur de la classe. Les membres internes spécifiés sont
joignables depuis
le même projet. Et les membres
internes protégés peuvent être atteints à partir du
même projet ou classes
qui
héritent de la classe, soit d'un autre projet. Les membres privés spécifiés peuvent être joints par d'autres
membres de la même classe. Par défaut, les structures de classes sont définies sur ce niveau de visibilité. C'est le plus restrictif. Voyons donc la démonstration. Dans l'espace de noms, nous aurons la visibilité de la classe publique. Et nous aurons le message
public, c'
est-à-dire que je suis visible
de n'importe où. Et nous n'aurons le message de faisceau de
cordes protégé que depuis le même verre. Et message de chaîne interne uniquement à partir
du même projet. Et nous aurons le
message de chaîne privé, le chatbot Dao. Nous aurons donc le vide public. Mais un message architectural. Ce message protégé
va utiliser la console. Ligne droite, message B et ligne d'écriture point de console. Mais si le message, maintenant, nous pouvons avoir
une autre classe. Donc la classe publique B, qui va hériter
de la classe de visibilité. Et le public statique. Nul. C'est Main qui va le faire. Donc de la visibilité, une nouvelle visibilité. Et une visibilité B sera une
visibilité. Tiens bon. Ce que nous aimerions
faire, c'est utiliser le téléphone ou
écrire un message. Un ou un point. Ecrire la ligne un message dans l'aide à la
ligne d'écriture point de la console au message p0. Et sois Goodall, a fait Message. Ensuite, les cônes sont lus. Maintenant, cela peut être supprimé. Nous devrions avoir la bonne ligne et nous aurons le message P. Nous avons la visibilité des yeux, et nous avons le vide
statique public, principal. Ce sera la nouvelle visibilité
de l'IA. Nous avons la visibilité
V. Et le I est la visibilité est une nouvelle
visibilité I visibilité pour
être une nouvelle visibilité. Et si nous l'exécutons, nous devrions avoir la sortie
suivante. Cela démontre donc
la visibilité. Quand on
parle de scopes. Ce concept définit une partie de l'application où
la variable est accessible et s'appelle
la portée d'une variable. Les variables peuvent également être définies dans classes, des méthodes et des boucles. Par exemple, si nous avons défini
une
variable de niveau de classe de distribution, cela ressemble à ceci. Donc classe publique A. Et nous pouvons avoir l'
événement A, qui est six. Et lorsque nous déclarons une variable dans la classe en
dehors de toute méthode, elle est accessible
n'importe où dans la classe. Dans notre cas, tout
comme la variable a. Lorsque nous définissons une variable de
cette façon, on parle de champs de classe
ou de membres de classe. Nous pouvons donc également parler de visibilité
au niveau de la méthode. Et nous pouvons définir, par
exemple, le vide. D'abord. Ce sera notre méthode. Et nous aurons un double C, qui
sera dix, c'est-à-dire 0. Et nous pourrions avoir la ligne droite de la
console C. De
cette façon, nous montrons comment les
méthodes encapsulent notre propre espace de noms, leur propre espace de noms et les
variables qui y sont définies. Nous pouvons voir comment la valeur de la
variable est censée être imprimée. Et nous pouvons également créer des variables
de niveau bloc. Et les variables définies
dans un bloc seront
uniquement actives ou seront accessibles pendant l'exécution du
bloc. C'est tout ce que je
voulais vous montrer à propos de la portée et de la visibilité. On se voit dans le prochain.
6. C # Advanced Unsafe: Bonjour et bon retour. Dans cette vidéo, nous
allons
parler du danger dans C-Sharp. Donc, en gros, nous
parlons de code dangereux dans C Sharp. Lorsque nous codons le code, nous exécutons le code sans
supervision du CLR, ce qui est l'abréviation de
Common Language Runtime. code dangereux est donc un code
qui peut inclure des pointeurs. Vous pouvez donc en
conclure que les pointeurs ne sont
pas sûrs en do dièse. Cependant, ce n'est pas
tout à fait vrai et nous
sommes ici pour faire
la lumière sur ce mystère. Le CLR contrôle donc
l'exécution des programmes depuis le chargement en
mémoire jusqu'à la sécurité
des types de gestion des exceptions. Il existe de nombreuses
installations fournies par CLR et il y a deux
installations qui sont fournies. Le premier est le
ramasseur de déchets, qui est censé
nettoyer les objets inutilisés. Et le second est la gestion des
threads. Il existe donc deux composants principaux
du framework .net. Nous avons le laboratoire de base, BCL, qui est la bibliothèque de classe de base, et le CLR, qui est le temps d'exécution du langage
commun. BCL n'est donc rien d'autre que
la bibliothèque Dotnet standard, accessible
via des applications de console, applications
VPN, ASP.Net, etc. Il s'agit d'un ensemble de classes et de
fonctionnalités
prédéfinies que vous pouvez réutiliser. Donc, en gros, je peux être
décomposé en deux autres parties, le CTS, le CTS et le CLS. Le CTS est la spécification
de type commun et le CLS est la spécification de
langage commun. Nous devons clarifier deux autres concepts
qui sont nécessaires pour comprendre l'
exécution du code de réponse et ce que cela signifie. Donc, deux types de code qui sont code
géré et le code non géré. Le code géré est
considéré comme un code sécurisé. Le code non géré n'est pas sûr. Donc, en gros, le code géré fonctionne entièrement sous la
supervision de CLR. Il est suivi et les déchets
sont collectés automatiquement. Il a également accès à l'arsenal complet des
installations fournies par CLR. Maintenant, voici les indications. Les pointeurs ne sont donc
interprétés que dans le
contexte d'un code
non enregistré, non sécurisé ou non géré. Et un pointeur peut
être un type de pointeur,
un type de valeur, un type de référence. Donc pour définir un pointeur, nous avons besoin du code suivant. Nous pouvons avoir une étoile int, qui s'
appellera mon pointeur int. Et nous pouvons avoir une
étoile vide, mon pointeur du vide. Et le nom du
type défini avant l'astérix est appelé type
de référence. Les types de pointeurs
n'héritent pas de la classe de
base des emplacements d'objets et il n'
y a aucune conversion entre les types de
pointeurs et la classe d'objet de
base. Nous pouvons également définir
plusieurs pointeurs. Donc int, étoile par dommage, ma santé, mon expérience, etc. Le récupérateur ne protège
pas les références de
l'objet. Cela signifie que même s'il pointe vers une référence ou une structure
contenant des références, le garbage collector
peut la collecter, ou s'il la collecte. Donc, s'il est interdit, il est interdit qu'un
pointeur pointe vers une référence ou une structure
qui contient une référence. Et nous pouvons avoir des pointeurs
des types de base en do dièse. Nous allons donc le démontrer. Je vais faire un commentaire à ce sujet. Nous avons donc un tableau, qui va
contenir deux entiers, qui vont être 12. Et nous pouvons utiliser l'étoile int fixe p égale un 0. Ici, ce que nous aimerions
faire , c'est avoir P2, qui est égal à p. Et utiliser la console, la console, droite, ligne, étoile V2 ou astérix P2. Donc, afin de se débarrasser
du rouge en bas de la ligne, nous pouvons dire que c'est dangereux. Et en gros, après ça, voyons la preuve. Très bien. Utilisons la console. Il existe trois clés
pour lire la valeur. Comme vous pouvez le voir, nous avons un pointeur
qui pointe vers le premier élément du
tableau, qui est un. Et la réponse si mot-clé
marque la section du code qui, pour le compilateur,
contiendra des pointeurs. Le mot-clé fixed signifie que nous épinglons l'astérix, soyez très capable. Donc celui-ci en haut
de notre tas et le dernier astérisque être plus égal à
un s'appelle la déférence. Ils font référence. Donc, en gros, si nous allons de l'avant
et faisons quelque chose comme ça, donc astérix p plus est égal à un. Ensuite, nous pouvons utiliser la ligne d'écriture
point de la console astérisque be. Donc maintenant, si vous l'exécutez, vous pouvez voir que nous avons déplacé
notre pointeur avec un index. Il existe donc une liste
d'opérateurs et instructions que nous pouvons utiliser pour manipuler les pointeurs dans la
réponse si le contexte. Nous pouvons donc avoir essentiellement
l'accès membre. Nous pouvons avoir l'indexation, nous pouvons avoir l'
adresse d'une variable, nous pouvons avoir les opérateurs
arithmétiques, nous pouvons avoir des
opérateurs de comparaison, etc. Donc, nous pouvons également avoir des
instructions qui sont
fixes et la pile est logée si bloquée et verrouillée signifie allouer un mémorial
sur la pile. Et si vous voulez vérifier la
réponse concernant les propriétés de couche, nous pouvons avoir des méthodes, des types et des blocs de code, qui peuvent être définis
comme sûrs car le code est requis pour les fonctions
natives qui s'appuient
sur des pointeurs et En tant que code, le introduit des risques de sécurité et de
stabilité du
code qui contient nos sous-blocs doit
être
compilé avec un risque que ce que nous avons corrigé ici. Et dans certains cas, comme
si Dieu pouvait
améliorer les performances puisque les
vérifications des limites du tableau sont supprimées. C'est tout ce que je voulais vous montrer
à propos de l'insécurité. On se voit dans le prochain.
7. Collections génériques avancées C #: Bonjour et bon retour. Dans cette vidéo, nous
allons parler de collections
génériques
afin que nous puissions appeler. Ce sont donc les
langages de programmation qui ont vu le jour. Il y avait généralement une exigence
commune entre eux et les utilisateurs souhaitaient stocker les données de
manière structurée
afin de les récupérer et de les manipuler plus tard dans le temps . s'agissait d'opérations génériques
qui seront généralement effectuées sur ces
ensembles de données, comme impaire ,
supprimer, rechercher, trier,
remplacer, copier ,
cloner, le nombre d'éléments
stockés, etc. C-sharp et dotnet ne font pas
exception à cette situation. Il existe donc essentiellement deux
types de collections qui sont dotées d'un cadre
à notre disposition. premier est janvier, et l'autre
n'est pas générique, mais j'ai dû utiliser la version 2 du dotnet, il n'y a que des collections. Et si vous voulez catégoriser des collections
non génériques, nous pouvons parler de
ArrayList, table de hachage, liste
triée, pile, file d'attente, et les collections génériques au
moins le dictionnaire est la pile de liste
triée et la file d'attente. La principale différence entre les
collections
génétiques et non génétiques
réside donc collections
génétiques et non génétiques dans la valeur des types qu' elles peuvent stocker dans la collection
non générique. Chaque élément peut représenter
la valeur d'un type différent. Alors que le générique signifie que vous pouvez avoir que le même type. Donc, en gros, nous avons besoin du système générique pour l'utiliser. Et cela nous permet de
créer, par exemple, une liste d'entiers
appelée my list. En gros, nous voulons
une nouvelle liste avec, par
exemple, dix valeurs. Cela signifie que nous
avons une liste qui ne
peut stocker que des entiers. Il s'appelle mylist et il a exécuté valeurs à
moitié sans
l'instruction using, nous pourrions le spécifier de
la manière suivante. Donc, en gros, nous pourrions
donner le chemin complet. C'est juste pour intéressant. Pour ton intérêt. Ce que nous pouvons également faire est de
vérifier la table de hachage non générique. Une table de hachage. On devrait appeler ça mon hachage. Et cela va
avoir un nouveau hachage, la barre ou plutôt un ensemble de hachage. Hash set et affiche correctifs
potentiels les correctifs
potentiels. Donc un système qui appelle des élections, ce générique, ce jeu de hachage. Très bien, alors nous
aurons le HashSet. Et cela devrait être comme un entier ou
quelque chose comme ça. Et nous faisons avec les valeurs n, non. Janvier en capacité. Ou ce devrait être HashSet D. Mais ce devrait être hachage
C sharp, une table de hachage de hachage. donc Nous allons donc le faire avec la table de hachage. Alors acceptons-le. Oh, ça devrait être une action d'appel système qui
hache l'arc, mon hachage. Maintenant, nous pouvons continuer. Donc, en gros, appelons ce
nouveau système appelé élections. Le ballon. Super. Ce que nous pouvons faire est
ce qui suit, mon hachage. Et nous aurons d'abord la
part de compétences avec la valeur. Et mon hachage sur le site Ed Lu. Et cela devrait
être appelé deuxième. Maintenant, super. Ce que nous pouvons faire ici
est donc ce qui suit. Donc pour chaque 13 D dans mon hachage. Et je pense que cela va
également provenir
des collections système de cette entrée de
dictionnaire. Super. Ce que nous pouvons également faire, c'est
simplement l'externaliser ici en utilisant un système
de collecte. Et maintenant, nous pouvons le supprimer. Super. Nous
aimerions donc les parcourir et utiliser la ligne droite de la
console. Et nous aurions la
touche D égale cette valeur. Et utilisez la console pour lire la clé. Pour accepter cette
valeur, exécutons-la. Et si vous l'exécutez, nous devrions voir le résultat
suivant. C'est ainsi que nous
pouvons utiliser la table de hachage. Ce que nous pouvons également faire, c'est
avoir une ArrayList générique. Donc, en gros,
créons-le une liste de tableaux. Ma liste est également égale à une
nouvelle liste de tableaux. Et nous ne donnerons aucun
argument dans ce cas. Et utiliser ma liste pour
ajouter un mile est d'ajouter
à ma liste trois
linéaires et ainsi de suite. Donc, juste pour des raisons de démonstration, et pour chaque guerre d'objets
pour un élément de ma liste,
deux, nous allions de l'avant et l' élément de ligne d'écriture point de
console. Super. Maintenant, ce que nous pouvons faire c'est de voir la sortie à l'
écran après l'exécution. Et en gros, c'est tout. Il existe donc un autre concept appelé
boxe et déballage. Et ce concept est
très important lorsque nous travaillons avec
des génériques dans C Sharp. En général, le concept et sa réalisation offrent
certains avantages
des collections de types forts
ainsi que fournissent un code
de meilleure qualité et
des performances améliorées. Il existe deux catégories principales
pour le type de données C dièse. L'un est appelé type de valeur et l'autre type de référence. La boîte est le
processus de conversion d'un type de valeur en type de
référence. Et en arrière-plan, le CLR alloue
un nouvel objet dans le tas, puis copie la valeur des types de valeur value
dans cette instance. Par exemple, nous avons un entier qui est un
b avec la valeur 99, un objet B, qui
est égal à a. Et modifions-le de cette façon. Et nous avons a, C
avec l'entier b. Et maintenant, nous pouvons
utiliser la ligne droite de la console, voir ,
plus b, plus a. Et voilà. n'y a donc pas d'espace entre les espaces qui ne
soit pas trompeur. Et on y va. Techniquement, c'était
tout ce que je voulais montrer. Toi. Rendez-vous dans le prochain.
8. C # Advanced Explicit vs Implicit Conversions: Bonjour et bon retour. Dans cette vidéo, nous allons
poursuivre notre voyage vers le C-dièse. Et nous allons parler de la conversion de
type
explicite et implicite. existe donc Il existe donc deux catégories principales de langages
de programmation. Le premier est une tabulation statique, et le second est typé
dynamiquement. Donc, vous
les avez tapés statiquement comme C-Sharp, C, C plus, plus et ainsi de suite. Et typé dynamiquement est comme Python et Ruby et ainsi de suite. Et la saisie dynamique est parfois appelée
dactylographie par canard. Donc en gros, si ça
ressemble à un canard, marche comme un
canard et cogne comme un canard. Alors c'est probablement un canard. Nous allons
examiner les fonctionnalités fournies par
C-sharp concernant le typage statique dans C-Sharp.
Lorsqu'une variable est déclarée, elle ne peut pas être déclarée à
nouveau ni assignée une valeur d'un autre type. Tapez. Le type est implicitement convertible en un type de variable
donné. Ceci est décidé pendant le type de
compilation et pose une restriction quant à la façon dont un développeur utiliserait les variables de
déclaration, bien que cela entraîne également
un ralentissement de l'exécution. Les
langages typés de manière statique sont donc généralement plus rapides que les langages
typés dynamiquement, mais les deux ont leurs avantages
et ces avantages. Donc, par exemple, si
nous disons que nous avons un entier qui
est j en C-dièse, nous ne pouvons pas faire ce qui suit. Affectez une chaîne en tant que valeur. Cela
ne va tout simplement pas le couper. Mais ce que nous pouvons faire est d'
attribuer une valeur de dix ou de faire ce qui suit plutôt que 0. Ils sont censés fonctionner. Et cela nous donnerait une annonce ou parce que l'entier et une chaîne ne sont pas
implicitement convertibles, il peut arriver un
moment où nous devons
copier une valeur d'une
autre valeur ici, la valeur d'un variable
vers une autre variable, comme passer un entier à
une méthode qui prend un double argument long
ou reste un pour pousser des variables entre les classes. C-sharp fournit donc des moyens de convertir un type en un autre. L'un est implicite, l'
autre est explicite. Le troisième est défini par l'utilisateur, et le quatrième est la conversion
avec des classes d'enveloppe. La conversion de type est donc également
appelée casting ou typecasting. Conversions implicites. Que devons-nous savoir à leur sujet ? En gros, lorsque nous
parlons de conversion implicite, il s'agit pas d'une syntaxe spéciale
pour cette conversion de type. C'est le
type de moulage le plus sûr. Aucune donnée n'est perdue. Par exemple, conversion
de types ou de classes d'entiers
plus petits en plus grands en
classes de base. Il s'agit d'une table de
conversion numérique implicite,
ce qui est pratique
lorsque nous voulons
déterminer quels entiers
sont compatibles. Et vous pouvez le trouver ici du
côté de Microsoft. Et par exemple, pour une conversion
implicite, nous pouvons utiliser ce qui suit. Cachons ça. Nous avons donc un entier appelé nombre 128, et nous aurions un double, qui est un plus grand, et
c'est égal au nombre. Et l'amplitude est un exemple
de conversion implicite de
classe en classe de base
serait quelque chose comme ça. La classe A est égale à la nouvelle classe. Et nous aurions
la classe de base C, qui est égale à a. Ceci n'est qu'un exemple parce qu' elles ne sont pas bien définies, mais voici comment vous
pouvez et devez le faire. Et il existe un certain nombre
de conversions, sous-types qui sont tous
considérés comme implicites. Par exemple, les conversions
d'identité, conversions numériques
implicites, etc. Maintenant que nous avons éliminé la
conversion implicite, nous devrions parler de
X plus des versions calmes. Ce type de moulage
implique donc également un opérateur de coûts. Et le processus est généralement associé à une
perte d'informations ou
à un échec de conversion entre des conversions généralement
non métriques. J'ai mentionné que lorsque nous convertissons
d'un type de données de plus grande précision
à une précision inférieure et parfois, la conversion d'une classe
de base une classe de base de
données est également mentionnée ici. Un exemple de
conversion explicite serait mon pi. Et nous
dirions que nous avons
un entier a et que nous aimerions que
la valeur soit un entier de
mon secteur associé à a. Et si nous utilisions ligne droite de
la console avec a et mon b, nous obtiendrions la clé de cupidité suivante de
Guanzhong. Sauvegardons-le et exécutons-le. Nous pouvons donc voir que la décimale, les nombres après le
point où la coupure. Dans ce cas, nous pouvons
parler de conversions exécutées
entre classes. Nous avons donc, par exemple, une classe OPA, qui est la voiture. Et ce serait un
exemple de la classe supérieure. Et nous aurons une voiture C, qui sera égale à o. Et nous aurions l'
OPA o égal à c. C'est
donc un exemple conversion
explicite entre
classe et classe de base. Et en gros, c'est tout. Ce que je voulais te montrer. Rendez-vous dans le prochain.
9. Fonctions cordées d'expression avancée C #: Bonjour et bon retour. Maintenant, ce que nous aimerions
apprendre en c-sharp, c'est le sujet, l'expression, mais
cela fonctionne avec la syntaxe. Mais funk, synthé Don't Save. Ok. Ainsi, avec la version
six du langage C Sharp, cette fonctionnalité a été ajoutée
au langage de programmation. C'est ce qu'on appelle les membres du
corps d'expression. L'idée derrière cette
fonctionnalité était de rendre le code plus
lisible et plus concis. Et nous allons
voir dans cette vidéo comment cette nouvelle fonctionnalité peut être
intégrée à notre code. Nous avons donc le
concept des membres dans C-Sharp, et il est lié à la programmation
orientée objet. Les nombres nous permettent de
modifier le comportement de notre classe et de changer la
façon dont elle interagit avec les autres classes et de la
laisser et des
informations encapsulées selon les besoins. Les membres sont donc la colle qui maintient l'application ensemble. Quels sont donc
les membres disponibles ? Nous avons des constructeurs, des
destructeurs, des getters et des setters de
propriétés,
des méthodes et des indexeurs. L'expression mais
dans les membres peut être appliquée à n'importe lequel des éléments que j'ai mentionnés
ci-dessus, mais nous devons
déterminer lequel est disponible dans notre version
actuelle. Ainsi, les versions prises en charge
à partir de la version six, le getter de propriété et les méthodes. À partir de la version sept,
le constructeur, secteur de propriété du
destructeur et les indexeurs. Prenons un exemple pour le constructeur et le destructeur. Donc, en gros, nous
aurons un serveur de classe. Dans notre classe, nous aurons
le nom de la chaîne publique et
le nom de la chaîne du serveur public est égal à name, égal à name. Et nous devons nous
assurer que c'est le M majuscule et que c'
est le N majuscule. accord, maintenant, nous pouvons avoir notre destructeur
pour le serveur. Et nous pourrions simplement dire sur la ligne droite de la console
que la fin est proche. Très bien. Maintenant, ce que nous aurions ici, appelons-le copain de
classe publique. Et nous aurions notre
public statique, vide principal. Et nous aurions le serveur, qui est un serveur du nouveau serveur. Ensuite, ici, ou plutôt contrôleur de
domaine. Ensuite,
nous pourrions utiliser le point de la console,
écrire un nom à la ligne et utiliser la touche de console. Attendez l'invite. Maintenant, si nous l'
exécutons, nous pouvons voir l'ODE suivant. Et oui, en gros c'est ça. C'est ainsi que nous
pouvons utiliser sur les membres. Ce que nous pouvons également faire est de l'
utiliser essentiellement sur des accesseurs. Donc, par exemple, si mon serveur est censé avoir
un processeur public dans V, alors nous pourrions avoir
le get renvoyer
le processeur v Scott v, et le secteur renvoyer
le caractère de soulignement V
CPU égal à la valeur. Et oui, nous aurions aussi le caractère
privé int underscore V CPU. C'est ainsi que nous pourrions l'appliquer à la source d'accès. Nous pouvons donc aller de l'avant et utiliser
un vCPU égal à dix. Et nous pourrions
l'ajouter à notre sortie. Si nous l'
exécutons, nous pouvons voir que ce serveur possède dix cœurs. Et nous pourrions également
utiliser un indexeur. Donc techniquement, si nous définissons la chaîne publique et
appelons ce réseau, il peut s'agir d'une nouvelle
chaîne avec cinq valeurs. Et nous pourrions utiliser
la chaîne publique. Et cet int je reçois des cartes
réseau. Et les cartes réseau
sont égales à la valeur. Et là, nous avons les cartes réseau
avec cette chaîne. Et nous devrions avoir ce I. Et celui-ci avec l'indice. C'est ainsi que nous
l'utiliserions sur les indexeurs et nous pourrions également l'utiliser sur des méthodes. Donc, en gros, si nous
définissons notre public void, la console pourrait démarrer en ligne
droite. Et puis dites que l'
état est égal à Started. Et pour que cela fonctionne, nous devons définir l'état String
privé du pub. Et c'est en quelque sorte ça. C'est donc tout ce
que je voulais vous dire sur l'expression,
mais elle fonctionne. Il s'agit donc d'une façon plus récente
et plus concise d'utiliser vos cours
avec tous leurs avantages. Rendez-vous dans le prochain.
10. Préférence d'opérateur avancé C #: Bonjour et bon retour. Dans cette vidéo, nous
allons parler de priorité des
opérateurs dans C-Sharp. Créons donc un nouveau
projet pour cela. Donc, en gros, l'ordre des
termes et de l'expression dans n'importe quel langage de programmation est déterminé par le résultat
de l'évaluation. Et la
priorité des opérateurs dans C-Sharp détermine la façon dont le regroupement de ces termes et
expressions se produit. Et nous allons passer en revue les éléments essentiels
pour savoir ce que vous devez connaître cette technique et créer des applications
sémantiquement correctes. Il existe donc trois types
d'opérateurs
différents qui sont des opérateurs unaires, binaires et ternaires. Et ceux-ci définissent le nombre
d'opérandes et d'opérateurs pouvant prendre. Le United en prend un, le binaire en prend deux et la tannerie en prend
trois. Nous devons
parler d'associativité. Donc, fondamentalement, il existe deux
types d'associativité, l'un est de gauche à droite
et de droite à gauche. La priorité des opérateurs n'a de sens que s'il existe opérateurs de priorité
supérieure et inférieure dans une expression. Dans ce cas, la priorité
est de gauche à droite. Par exemple, int x est égal sept plus trois divisés par deux. L'ordre dont nous devons nous souvenir est que lorsque
nous parlons d'urine, nous avons cette force suivante. Nous avons donc la taille
de la fin, de l'étoile. Les préfixes plus,
moins , négation,
plus, , négation,
plus, plus et
moins. Et puis nous avons le type cast. Lorsque nous parlons d'expressions
conditionnelles, nous avons le point d'
interrogation et la colonne. Et nous avons des affectations
composées simples, comme égal à égal
divisé par égal, et ainsi de suite. Et nous pouvons fondamentalement changer la priorité des
opérateurs par des parenthèses est, et c'est ce que je veux dire par là. Dans le premier cas,
nous allons d'abord diviser trois par deux, puis ajouter sept. Dans le second cas, nous ajouterions 37
puis diviserions par deux. C'est tout ce que je
voulais montrer. Toi. Rendez-vous au prochain.
11. Points d'entrée et de sortie de la méthode avancée C #: Bienvenue. Dans cette vidéo, nous allons
parler des méthodes, des points
d'entrée et de sortie. Ainsi, chaque application C, C-Sharp possède un anthropologue
appelé méthode principale. Cette méthode est invoquée premier et quelle que soit
la logique
métier implémentée dans votre point d'accès, elle
est contrôlée. À partir d'ici. Dans ce guide, nous allons
découvrir comment CRM CLR, afin que Common Language Runtime sache quelle méthode
appeler et quand l'appeler. Et nous allons
voir la différence dans ces contextes entre
les applications exécutables
et les bibliothèques. CLR est donc le temps d'exécution du
langage courant. Son objectif est de
traduire votre code afin que le matériel
de votre machine puisse comprendre vos intentions. Lorsque vous écrivez le
code en do dièse, on parle
de code source. Le compilateur
spécifique au langage
va transformer ce
code en un langage appelé MSAL ou langage
intermédiaire Microsoft. Et parfois, il est également
appelé CIR, ou langage intermédiaire commun. Et fondamentalement, l'état intermédiaire
du code possède également métadonnées spécifiques au
langage
et, une implémentation de type et l'implémentation réelle
de chacune de nos classes, fonctions, méthodes, et ainsi de suite. Maintenant, le CRM CLR
intervient et fournit un service et l'environnement d'exécution pour votre code et le GIT,
le compilateur de temps d'ajustement vit
également dans cette RAM, qui transforme le code
en code machine, qui est à son tour exécuté par
le processeur de votre ordinateur. L'exemple le plus simple est ce que
vous pouvez voir à l'écran. Alors Ponzo, cette bonne
ligne, bonjour tout le monde. Et lorsque nous exécutons ce code, nous pouvons voir que le Hello World est imprimé
sur la console. Et après ça, il se ferme. Ainsi, lorsque nous avons une application qui est comparée à un fichier exécutable, nous avons deux
approches distinctes pour les points d'entrée. L'un est synchrone et l'
autre est asynchrone. Le type de fonction principale
est toujours statique. Et nous avons la possibilité
de choisir si nous devons
renvoyer le code de statut après que l'application existe ou non. Et nous devons utiliser
integer sinon void. Les
méthodes synchrones sont donc celles-ci. Donc si on va ici et qu'on fait
ça, Curly de base, allez. Nous avons un main qui
ne renvoie rien sans arguments. L'un est avec des arguments, et l'autre main renvoie un entier
sans arguments et l'autre est avec argument. Et l'autre type
devrait ressembler à ça. Nous avons donc quelque chose qui
s'appelle tâche sur domaine. Et il peut également avoir des versions arguments
et non arguments. Pourquoi est-ce dupliqué ? Les points de sortie servent de mécanisme de contrôle et retransfèrent le
contrôle à l'appelant. Soit avec la valeur
de retour d'un type spécifique, soit vide. La principale méthode pour atteindre
les points de sortie signifie que notre application est fermée. Donc, par exemple, si nous
disons que nous retournerons 0, alors ce
sera notre point de sortie, pour
ainsi dire, dans une fonction. C'est tout ce que je
voulais te montrer. On se voit dans le prochain.
12. Contraintes de paramètres génériques avancés C #: Bonjour et bon retour. Dans cette vidéo, nous
allons
parler des contraintes de
paramètres génériques. générique est donc devenu une partie de
C-sharp avec la version 2 du langage et le CLR, le temps d'exécution du langage commun. Il a introduit
un nouveau concept de paramètres de type qui
vous permet de concevoir des classes et des méthodes qui diffèrent la spécification
d'un ou de plusieurs onglets jusqu'à ce que la classe ou la méthode soit déclarée et instancié
par le code client. Par exemple, si nous
devions créer une classe, class generic array d, et dire que nous avons
le public void. Résumez les données. C'est ainsi que vous pouvez
définir une classe générique. Fondamentalement, ces classes et ces méthodes combinaient trois caractéristiques
distinctes. L'un est la réutilisabilité, le
second est la sécurité du type et le troisième est l'efficacité. Les génériques sont plus souvent
utilisés conjointement avec des collections et des méthodes
qui les utilisent. Un nouvel espace de noms a été introduit, appelé système
qui collecte, ce générique, qui contient plusieurs nouvelles classes de
collection basées sur des génériques. Nous avons également la possibilité de créer des types génériques personnalisés. Nous devons donc également parler des
paramètres. Nous appelons donc paramètre un
espace réservé pour un type spécifique que le client
spécifie lorsqu'il crée une instance
d'un type générique. Une classe générique
ne peut pas être utilisée telle
quelle, car il s'agit simplement d'un plan pour ce type et
nous devons déclarer, puis instancier un type
construit par type de volume spécifique. Et nous pouvons avoir un
exemple pour cela. Donc, par exemple, si nous
avons ce tableau générique, qui est un entier, alors c'est comme ça
que nous l'instancions. Et voyons les solutions
potentielles. Nous n'en avons pas un. Ça va ? Dans cet
exemple, nous avons montré l'instanciation d'
instanciation pour le Blueprint d'
un tableau générique avec des types entiers. Et dans ce cas le paramètre t est
substitué au moment de l'exécution. Et avec l'argument type qui nous permet de créer un type sûr et efficace
en utilisant une définition de classe. Il existe certaines règles de nommage, donc les
paramètres de type génériques doivent avoir noms
descriptifs et un préfixe type
descriptif T, ou quelque chose comme ça. Nous avons également huit contraintes dont nous devons être conscients. Permettez-moi donc de le copier
et de le coller ici. Donc, quand d est un strike, l'argument doit
être un type value, sauf maintenant la balle,
quand c'est class, l'argument doit
être un type de référence et il s'applique aux
classes quand t ne l'est pas. Maintenant, l'argument doit
être non, non libéral. Quand il n'est pas géré,
l'argument doit être un M et chaque type,
c'est une classe de base. L'argument doit être traité à partir
d'une classe de base. Lorsque d est une nouvelle instance, l'argument doit avoir un constructeur de compteur
parent moins. Quand il s'agit d'une
interface, l'argument doit déjà
être implémenté
dans une interface spécifique. Et quand c'est toi, l'argument doit
être ou papa avec de l'argument
fourni pour toi. Alors pourquoi utilisons-nous des contraintes ? L'application de contraintes ou de paramètres de type
spécifiques nous
permet d'augmenter le nombre d'opérations et d'appels de
méthode autorisés par rapport à ceux pris en charge. Et ce que nous
aimerions faire, c'est
créer une démonstration
pour l'examen. Permettez-moi simplement de commenter ce point. Supposons que nous ayons une classe, classe
générique avec t, où t est une classe. Et nous pouvons dire que nous avons
un t privé en lecture seule, qui est un champ. Et nous avons une classe
générique publique, le champ ou plutôt la valeur. Et ce
champ de soulignement est égal à value. Nous avons également la méthode générique
t publique avec le compteur de fond T. Et nous pouvons continuer et utiliser
la ligne droite de la console. Et disons que le type
du compteur inférieur
est à la fois T et que la valeur est valeur. Ou plutôt le mètre inférieur ou le mètre. Ça va ? Et la méthode générique. Et les femmes doivent s'assurer
que nous retournons dans ce domaine. Et nous pouvons utiliser la ligne droite de la
console. L'impression indiquant que
le type de paramètre renvoyé est dipôle. Valeur T. Ce champ de score. Très bien, ici nous pouvons
instancier notre classe. Nous pouvons donc avoir une chaîne de classe
générique a, qui est égale à la nouvelle chaîne de
classe générique hello world. Et nous pouvons utiliser l'appel de méthode
générique a point. Et nous pouvons utiliser la ligne d'écriture point de la
console, pas la ligne droite, la touche de lecture pour
faire une pause pendant une seconde. Et donnons à cela
la chaîne d'argument. Très bien, exécutons-le. Et comme vous pouvez le voir, nous avons une chaîne avec
la chaîne de valeur. Et on y va. Ce sont donc les messages
que nous pouvons voir. Techniquement, c'est tout ce que
je voulais te montrer. On se voit dans le prochain.
13. Types de génériques ouverts et fermés C # Advanced: Bienvenue. Dans cette vidéo, nous
allons parler des types
génériques ouverts et fermés. Ainsi, avec la version
2 de C Sharp, un nouveau concept a été
inclus, est introduit, qui
est appelé génétique. L'idée de base était de permettre à type
spécifique tel que
float, double ou string d'être transmis en
tant que paramètre à des méthodes, des classes et même des interfaces. Il s'agit d'une
limitation très importante des collections,
à savoir l'absence, voire
l'absence de vérification de type. Cependant, cela vous permet d'
ajouter les objets de n'importe quel type d'interconnexion,
car ils sont tous descendants de la classe de base de
l'objet. Cela contredit la définition de
base du C, C-dièse comme étant un type sûr et comprend la sécurité de type. Dans ce guide, nous
examinerons plus en détail ce que sont les
génériques et ce que signifient les propriétés
ouvertes et fermées. Les types dans C Sharp ont
deux catégories principales. L'un est appelé valeur et l' autre types de référence. Les deux peuvent
être des types génériques qui prennent des paramètres de
type individualisés. Donc, le mois de janvier fermé. Ainsi, l'une des
fonctionnalités les plus puissantes et C-sharp, qui ont permis aux développeurs de définir des
types de structures de données
comme des collections. Et ce
n'est pas seulement le résultat d'
une meilleure qualité de code,
mais en coulisses,
cela ajoute également un bon coup de pouce aux
performances. Voyons à
quoi cela ressemble. Nous aurons un appareil de classe
publique. Et cet appareil aura un nom public d0, Get and Set. Et la catégorie T publique. Avec le Gatt et le plateau. Nous allons mettre le public en attente. Ça va ici. Ce seront donc les génériques de la classe
publique. Et ce que nous
aimerions faire, c'est avoir le public statique, vide principal. Et à l'intérieur du principal, nous aurions le périphérique
avec la chaîne a en
tant que nouveau contrôleur de domaine de périphérique. Et oublions simplement le nom. D'accord, oui, est-ce
qu'on devrait faire ça ? Et nous avons le flotteur
b de l'appareil avec le nouveau flotteur d'appareil. Et fermons-le simplement. Et nous pouvons modifier le a, ce nom pour qu'il soit le contrôleur de
domaine. Et la catégorie A
pour être cette chose. Et cela vaut aussi pour le B. serveur DNS sera
dans cette catégorie. Et appelons-le production. Et ce que nous pouvons faire, par
exemple, c'est tenir bon. Cela devrait être 1 f et
2 f. Donc console, droite, ligne, a, nom et une catégorie. Et il en va de même pour le B, O, K et utilisez le deux-points. Donc, lisez la clé pour conserver la console. Pourquoi on y jette un coup d'œil ? Allons-y. Nous avons créé une classe générique qui représente un appareil. Et en fonction du
type du générique, nous pouvons initialiser les valeurs. Et ce que nous pouvons également faire, c'est
créer un mois de janvier ouvert. Nous aimerions donc que ce
code le démontre. Nous allons donc avoir un cours public, ou aller avec le T. Et nous devons utiliser la réflexion du
système. Et ici, nous aurons
le public en M, g. Et nous aurons un
woo hoo égal à 0. Pour l'utiliser, nous devons
créer une instance. Nous aurons donc un vide statique
public. Tiens bon. C'est dans la
génétique végétale sont publiques. Objet statique. Est-ce que ça va fonctionner ? Et cela va
avoir le type de type g enum pour cela. Prends le champ rouge plus frais. Woo Hook. Et nous aimerions
en obtenir la valeur. Et maintenant, ce que nous pouvons
faire est de créer un nouvel
objet d'instance qui s'exécutera. Et nous aurons la bonne ligne de
console. Dites-nous ce qui suit. Est-ce que c'est générique ? Et nous utilisons le foo
qui type info et qui est une définition
de type générique. Voici comment vous pouvez
définir les génériques ouverts. Et en utilisant la réflexion pour obtenir un
champ constant, le Woo-hoo. Le CLR convertit automatiquement l'entier en une
instance de type ouvert. Donc, en gros, c'était ça. Ce que je voulais
vous montrer dans cette vidéo. Rendez-vous à l'axone.
14. Paramètres et déjà : C # Advanced Out: Bonjour et bon retour. Dans cette vidéo, nous allons examiner deux fonctionnalités incluses dans la version C sharp
seven. Ces fonctionnalités ont
fondamentalement changé la façon dont les développeurs travaillaient et dont les
applications étaient développées. Le paramètre app est
très pratique lorsque les méthodes doivent renvoyer
plus d'une valeur. Et ce paramètre est passé par référence et
transforme essentiellement le paramètre formel, un alias pour l'argument
qui doit être très capable, très similaire au mot-clé
reference. Mais la principale différence
est que ce dernier doit être initialisé au
préalable. Le supprime essentiellement les variables
temporaires, donc les variables factices qui sont
utilisées dans le code de l'application. objectif principal de ce chat est de fournir une variable
réutilisable
qui réduit l'allocation de mémoire et améliore la lisibilité
et la maintenabilité. abord, nous allons
examiner le paramètre OUT. Donc, en gros, il y a trois règles. Le paramètre peut être transmis sans déclaration
ni initialisation. Il peut utiliser le type var dans la liste des paramètres de
méthode. Nous n'avons pas besoin d'avoir
le même nom pour notre paramètre dans la
fonction et dans le noyau. Faisons donc une démonstration pour cela. Nous avons une chaîne
statique publique, SLA. Avec le double a et le double B. À l'intérieur de cette fonction, nous
aimerions avoir un résultat qui provient du
calcul autour de a fois b. Ou plutôt, comment
devons-nous le faire ? B divisé par a. Et nous aimerions multiplier par 100
et nous avons besoin de deux chiffres. C'est donc ce que nous
aimerions avoir. Et nous aurons la
chaîne SLA égale au nombre total d'heures disponibles. Heures. Et le SLA en est le résultat. Maintenant, ce que nous aimerions
faire, c'est revenir au SLA. Et ce que nous aimerions
faire ensuite, c'est modifier
la signature de notre
fonction. Et nous dirions que notre double résultat et notre SLA de chaîne de sortie seront
d'autres paramètres. Et nous devons supprimer l'
initialisation de cela. Nous pouvons désormais utiliser cette fonction
appelée. Donc console en ligne droite. Et nous aimerions utiliser
ce que nous utiliserions le SLA. Et en gros, nous aimerions
avoir le nombre total d'heures
disponibles avec huit heures. Et nous aimerions avoir le nouveau
résultat et le sortir. String SLA et utiliser les téléphones sont essentiels. Pour le sauver. Très bien, commençons. Et comme vous pouvez le voir, c'est le résultat. Ce que nous pouvons également faire,
c'est utiliser cette carte. Les variables de cette carte portent
le symbole de soulignement. Par exemple, si nous créons une variable
appelée Coupa avec 12345, alors allez-y et
faites le trait de soulignement. Underscore, underscore équivaut à coupon. Ensuite, nous pouvons
utiliser la ligne droite de la console, écrire
la
première et la seconde. Alors laisse-moi te montrer. C'est donc essentiellement le simple, c'est un exemple simple pour la défausse et comment l'utiliser. Et notre tâche était de
créer deux variables à partir desquelles étaient
nommées variables du coupon et de
supprimer le reste des valeurs. Et si nous pouvons dire
quelque chose comme ça, le vrai pouvoir de cette carte est quand nous la
combinons avec la variable externe. Donc, par exemple, si nous avons
public void, sorry, static, void B, S avec la
chaîne d t. Alors si le temps que dry barre le SDR et out underscore, alors nous pourrions dire que les cônes sur cette droite la
date de la ligne est valide. Sinon, la date de la ligne
droite de la console est à Guanzhong. Gauche. Très bien.
N'oublions pas celui-ci. Et si on peut aller de l'avant et appeler le PS avec l'O2, 292022. Nous devrions voir ce
qui suit sur notre écran. Et on y va. Techniquement, c'est tout ce que je voulais vous
montrer dans cette vidéo. On se voit dans le prochain.
15. Directives de préprocesseur avancée C #: Bonjour et bon retour. Dans cette vidéo, nous
allons
parler des directives de préprocesseur dans C-Sharp. Donc, fondamentalement, ce concept appartient au
domaine des langages compilés. sont des langages compilés
ou
des langages qui prennent du code de niveau supérieur
comme C-Sharp ou C. Et à l'aide du compilateur, il le traduit
en code machine. Le compilateur est une couche d'
abstraction entre différentes architectures
de fabricants. Il sait comment traduire des
blocs de code vers
différentes architectures. Donc, oui, des processeurs Intel
ou AMD. Et le processeur
lui-même ne
garantit pas le code final
de la machine. Comme son nom l'indique, il ne s'agit que de pré-traiter
les instructions. Nous avons un niveau de langue supérieur. Ensuite, nous avons un préprocesseur plutôt qu'un langage de haut niveau, qu'un compilateur et un assembleur, chargeur et l'éditeur de liens. Les directives du préprocesseur peuvent donc être l'instruction if sous forme de
feuille et if et ainsi de suite. Et nous allons
examiner un exemple simple. Par exemple, si nous
voulons utiliser cette directive, nous pourrions dire que si debug, alors nous aimerions
dire que console système, mode de débogage en ligne
droite. Nous aimerions dire point de la console
système, écrire une ligne et connaître le bogue. Et apportez-le ici. Et nous pouvons terminer cela
avec l'instruction endif. Et ici, nous avons défini une
directive de pré-processeur qui dit que cela ne doit être
pris en compte qu'en mode débogage. Sinon, nous n'
affichons aucun débogage. Et nous pouvons
exécuter cette solution soit en mode
release, soit en mode débogage. Et par défaut, le mode de
débogage est R1, et c'est la sortie
que nous devrions voir. Allons-y donc et utilisons les appels
système ou la touche de lecture. Si nous exécutons la solution, vous pouvez voir que nous
fonctionnons en mode débogage. Et oui, c'était la démo. Nous avons donc défini un indéfini. Ces directives
peuvent être utilisées pour définir ou non des directives
pour le préprocesseur. Et le cas
d'utilisation le plus courant est celui où
nous voulons
définir des conditions supplémentaires pour
la compilation elle-même. Cela se fait donc généralement en
tandem avec la directive def. Et en gros, nous pourrions aller de
l'avant et définir le développement. Et en cas de fraude, nous aimerions dire que nous avons défini debug
et undefined, brace et end if. Et nous devrions le
mettre dans le premier. Cela fonctionne. Donc,
ce que nous pouvons également faire est d'utiliser l'avertissement ou
l'annonce ou, en gros, nous pourrions dire que
si ce n'est pas corroder, pas tester et pas Deb, alors nous pouvons lancer
un message d'erreur indiquant que ne peut pas combiner. Nous omettons un
message d'avertissement indiquant que l'exécution est codée en dur. Et nous pouvons mettre fin à
cette déclaration if. Et si nous exécutons cette solution, nous ne voyons rien. Mais dès que je
supprime celui-ci, nous voyons qu'il y a des
adultes dans la compilation et nous pouvons voir le
message d'erreur que nous ne pouvons pas compiler. C'est donc un comportement
que nous pouvons implémenter. Ce que nous pouvons faire, c'est également
utiliser la directive align. Donc la ligne active nous permet modifier la
numérotation des diapositives du compilateur et même le nom de fichier pour les adultes et les avertissements. Supposons que nous
souhaitions modifier le nom de fichier indiqué lorsqu'
un avertissement est généré. Mettons-le ici
et disons cette ligne,
une, voulant que la ligne C S. Maintenant, si nous supprimons ceci, nous devrions être en mesure d'
exécuter notre solution. Nous avons cette sortie. C'est bon ? Maintenant, ce que nous aimerions faire, c'est en savoir plus sur
region et n. region. Ces directives sont donc utiles
lorsque nous travaillons avec éditeur de code
Visual Studio
ou avec le studio lui-même. Et il n'y a pas de
sortie spéciale de ce régime actif, mais il vous permet de marquer des régions spécifiques qui
seront extensibles et réduites, réduire CBO par l'
éditeur de votre choix. Par exemple, nous
pouvons dire qu'une région utilise et nous pouvons dire que
c'est la région finale. Et maintenant, nous sommes
capables de le réduire. Et nous avons également le pragma, l'avertissement pragma
et la somme de contrôle pragma. En termes simples, la directive
pragma peut être utilisée pour affecter la façon dont les
rapports de compilation ou les avertissements sont gérés et donner des instructions spéciales
aux compilateurs. Il existe donc deux variantes de base. L'un manque, l'
autre est une somme de contrôle. Lorsque nous utilisons want, nous avons la possibilité de spécifier disabled
ou restore, suivi d'une liste d'avertissements qui doivent être pris en compte ou
rien ne suppose que tout type
de demande rien ne suppose que tout type checksum congénital, il génère une somme de contrôle du fichier source qui
aura le débogage. Par exemple, si nous avons le pragma suivant défini
le pragma suivant et l'exécutons, vous verrez qu'aucun problème
n'a été trouvé. En gros, c'est
tout ce que je voulais
vous montrer à propos des
directives de préprocesseur. Rendez-vous dans le prochain.
16. Indices de surcharge avancés C #: Bienvenue. Dans cette vidéo, nous
allons parler des indexeurs de
surcharge dans C-Sharp. Dans C-Sharp, nous avons donc de nombreuses
structures de données différentes disponibles. Cela nous permet de stocker et récupérer des données spécifiques
au moment où nous en avons besoin. Dans cette vidéo, nous
allons en savoir plus sur les indexeurs et
en particulier sur la façon dont vous pouvez les
surcharger en
faisant correctement. Lorsque nous parlons d'indexer surchargeant l'idée
derrière cela, la force, la classe à se comporter comme une structure de données et à garder une
trace de ses instances qui nous permettent de récupérer
ces instances lorsque nous ferait avec un
tableau, un tableau de liste. abord, nous effaçons le sujet dans les indexeurs, puis nous tournons
notre regard pour ajouter la surcharge. Nous allons donc créer un nouveau
projet dans la charge. Il s'agit donc d'une
syntaxe générale, essentiellement de modèle pour cela. Et nous allons l' examiner dans
un exemple pratique. Par exemple, supposons que
nous ayons une classe d'étudiants. Et ici, nous avons un tableau de chaînes
privé. Et nous appellerons cela indexeurs, qui est une nouvelle chaîne
avec des valeurs Dan. Et nous avons une chaîne publique. Et ça pointe vers l'indice. Et ce que nous aimerions
faire est ce qui suit. Nous aurons le gatt, qui renverra l'
index des indexeurs et l'ensemble, qui va définir l'
indice à une valeur spécifique. Ici, dans l'
ensemble, ce que nous aimerions
faire est de créer une nouvelle instance des élèves, appelée école
primaire. Et ici, nous aimerions avoir le
premier élément des écoles primaires avec mon nom, et le deuxième élément
des écoles primaires avec le nom de mon frère. Et le
deuxième élément de l'école primaire reçoit le nom de
ma sœur. Et ce que nous aimerions
faire est de prendre une boucle
for et d'itérer de 0 à I less than et d'imprimer la ligne droite de la
console. Et à l'école primaire. C'est l'élément. Utilisez ensuite la
touche de lecture de la console pour conserver l'invite. Maintenant, comme vous pouvez
le voir sur la console, nous avons les trois noms. Et bien sûr, il
y a un clignotement ici car le reste de
la liste est vide. Maintenant, que se passe-t-il ici ? Nous avons un cours en classe, les étudiants se comportent comme un tableau
étrange et permettent stocker
jusqu'à dix noms
d'étudiants dans le domaine. La classe est instanciée et trois étudiants sont insérés. Et si nous devions définir les éléments suivants, donc école primaire, TAM, mère, alors nous devrions
avoir une exception. Parce qu'il
n'y a pas de dixième élément. La taille ne
nous permet tout simplement pas de voir quels sont les
points importants ici. Il existe donc deux
types d'index de base. Une et deux dimensions. recherche d'index peut être surchargée
et elle n'est pas égale aux propriétés. Elle
permet d'indexer un objet et de définir un accesseur. Nous allons assigner. Pourtant, nous allons récupérer une valeur. La valeur est utilisée lorsque
vous la définissez. Et les indexeurs sont appelés tableaux
intelligents ou propriétés
paramétrées, ce qui peut être un
peu trompeur. Et les indexeurs ne peuvent pas être membres
statiques car ils le sont
en tant que membres de la classe. Alors, comment surcharger
les indexeurs ? Créons une nouvelle classe. Appelons ces guides. Et nous avons une chaîne privée, tableau et des noms de guide, qui est une nouvelle chaîne. Les valeurs de Dan. Nous aurons la chaîne publique, cet index int
va renvoyer la valeur de l'index des noms
guides. Et l'ensemble va
définir la
valeur d'index des noms de guide sur la valeur spécifiée. Et nous pourrions avoir le public pendant ce temps
avec l'indice flottant. Et nous devrions avoir les mêmes fonctions
Get et Set. Et nous aurons la
chaîne publique, ce double identifiant. Modifions-la. Et nous l'aurions réglé sur un. Et ici, nous n'
aurions pas de définition fixe. Les deux renvoient quelque chose
qui est appelé, c'est en lecture seule. Et maintenant, dans notre principal, si nous commentons cela, nous pouvons instancier les guides. Et nous aurons une valeur double, le k, et c'est **** 0. Et ici, le premier
élément du guide serait écrit. Et l'élément
basé sur l'index flottant des guides serait sur des guides. Et ce que nous pouvons faire, c'est
utiliser la ligne droite de la console. Et nous aimerions
imprimer l'élément guide k. Et nous aimerions
imprimer le premier élément. Et nous aimerions
imprimer le premier élément
plus le
premier élément basé sur le flotteur. Ça va ? Ce que nous pouvons voir
ici, c'est que nous avons accédé à
différentes versions de celui-ci en fonction du type d'
indexeur que nous avons utilisé. Et ici, nous avons un index
qui est un entier. Et ici, nous en avons une
qui est une valeur flottante. Et nous pouvons les référencer
et les manipuler en
fonction de cette valeur de retour. Et nous avons un dernier exemple que nous aimerions
examiner, et il s'appellerait plus de thé
multidimensionnel
que je viens de mentionner. Et ici, nous aurons
la chaîne privée. Et nous avons cette virgule. Et nous avons les noms des guides, ce qui équivaut à
une nouvelle chaîne dix fois. Ensuite, nous aurions
la chaîne publique, cet int x et int y. Et nous aurions le get, qui renvoie les noms de
guide x
et y. Et nous aurons l'ensemble
qui va définir le guide les noms x
et y vers la valeur. Et si nous allons de l'avant
et que nous l'
instancions, utilisez-les tous. Les diamants sont désormais égaux
à un nouveau multidimensionnel. Ensuite, utilisez le a d'abord. Il y aura le Danio et un autre. Ensuite, nous pouvons utiliser des
boucles imbriquées pour itérer sur j est égal à 0, j
inférieur au terme j plus plus plus. Et utilisez la ligne droite de la console. Et nous aimerions
utiliser le a et le y ou le j. Et ce que nous aimerions
faire, c'est ajouter la vérification. Donc, si a x et
y sont égaux à null, alors nous utilisons les téléphones toute cette ligne
lumineuse avec la chaîne f. X et y sont vides. Alors faisons ce x, et faisons ça y. Sinon, désolé, je et j. Et j. Sinon, nous aimerions
utiliser cette impression. Très bien. Maintenant, en ce qui concerne la sortie, voici
ce que nous pouvons voir. Pourquoi techniquement c'est ça. C'est ainsi que vous pouvez surcharger
les indexeurs dans C-Sharp. On se voit dans le prochain.
17. attributs prédéfinis C # Advanced Common: Bonjour et bon retour. Dans cette vidéo, nous
allons examiner l'objectif des
attributs prédéfinis courants dans C-Sharp. Les attributs permettent donc
aux développeurs d'associer des métadonnées ou des
informations déclaratives à leur projet et à leur code. L'une des méthodes que je
préfère utiliser est classes ou des
fonctions de
demain obsolètes alors que le développement de l'application
se poursuit ? Et nous allons
d'abord examiner ce que
sont les attributs et voir quelques
exemples de cela. Les attributs sont donc des endroits dans votre code où nous
pouvons les définir. Et ce sont comme des assemblys, des méthodes, des types, et
la liste est longue. Une fois que vous avez associé l'attribut à la partie de code que
nous avons
sélectionnée, nous avons la
possibilité de l'interroger avec une technique appelée réflexion. Dans le framework .net, chaque
type et chaque composant, comme assemblys et les classes, ont leurs propres métadonnées
définies par défaut, qui peuvent être étendues par des
informations de métadonnées
personnalisées, comme
nous le sommes sur le but. Et lorsque nous appliquons
des informations de métadonnées, nous avons la
possibilité de choisir la portée. Nous pouvons l'appliquer à des assemblages
entiers ou uniquement à des
parties spécifiques de notre code. Les attributs ont la
capacité spéciale d'aller plus loin, d'être configurés
avec des paramètres. Enfin, la
particularité des métadonnées est que notre
application peut inspecter ses propres métadonnées ainsi que d'autres
métadonnées de progression. Cela nous permet d'intégrer la vérification
de compatibilité
et d'autres fonctionnalités intéressantes. Il y a donc ce
code squelette que nous pouvons utiliser. Et cela va nous indiquer qu'
il s'agit
d'un paramètre positionnel, il a de la valeur et ainsi de suite. Supposons que nous ayons le code
suivant qui représente la machine à pull-over
et qu'elle ait deux fonctions. L'une consiste à démarrer
la machine et l'autre à installer les mises à jour. Nous avons donc le serveur de classe
public, et il a le nom de chaîne
privé. Et il a le nom de la
chaîne publique, le nom de la propriété. Et définir le nom est égal à la valeur. Désolée, soulignement du nom. Et nous avons le
nom de la chaîne publique, le nom du constructeur. Il s'agit de spécifier un nom. Et nous avons le serveur de mise à jour public
void, qui passe
directement à la console. Ce serveur de mise à jour. Et nous avons le point de départ. Et cela indiquera que
nous redémarrons le service. Super. Ce que nous
aimerions faire maintenant , c'est
clore notre cours. Ouais. Et au fur et à mesure que le
projet évolue, nous aimerions ajouter la fonction
suivante qui va
rendre obsolète le serveur de
mise à jour et gérer à la fois la mise à jour
et l'installation et le reste démarrer la tâche
avec une étape supplémentaire. Alors,
comment pouvons-nous faire savoir aux développeurs que la nouvelle fonction
sera introduite, qui couvre ces derniers. C'est tout. Ce que nous pouvons faire est d'ajouter la nouvelle définition de ligne ou plutôt de
fonction. Ensuite, dites au
serveur de mise à jour que c'est obsolète. Et ce que nous aimerions faire, c'est dire à la
dune d'utiliser cette méthode, utiliser le début à la place. Et nous pouvons également avoir
ces fausses chutes ici. Maintenant, nous avons ceci, de cette façon. Ça va ? Le
point clé ici est cette ligne, et elle doit être précise
avec les noms de fonctions. Sinon, le compilateur
renverra une erreur indiquant que la méthode
à laquelle nous faisons référence est introuvable. Donc, ce que nous aimerions
faire est de copier celui-ci et Sûr que c'est également correct. Et elle doit être précise
pour les noms des fonctions. Sinon, le compilateur
lancera une annonce ou indiquera que la méthode à laquelle nous faisons
référence est introuvable. Le deuxième argument est vrai
ou faux. Lorsque nous le définissons sur false, le compilateur émet
un avertissement, mais la compilation
sera traitée. S'il est défini sur true, une exception est levée et
la compilation s'arrête. Et c'est aussi un concept qui s'appelle le ciblage par
attributs. Et il pointe vers l'entité laquelle l'attribut
est ciblé. Dans ce cas, la
fonction a est la cible. Nous pouvons maintenant parler d'attributs
prédéfinis. Ces attributs
faisaient référence à un ensemble d'attributs
intégrés à la
bibliothèque de documents par Microsoft. Et nous devons être
conscients qu'il s'agit d'une classe de base pour les attributs, appelée system
that attribute. Et chaque attribut
prédéfini du client hérite de cette classe de base. Les
attributs prédéfinis les plus courants sont la sérialisation, la sérialisation, obsolète, DLL,
important et méthode humide. Ce que nous pouvons faire, c'est définir les attributs de
nos clients. Ainsi, toute personne utilisant
le framework .net et définissant son
coût en absolus, que ce soit pour un usage privé
ou privé, empaquetée dans une
bibliothèque publique ou une application. Ce que nous aimerions faire c'est créer
la démonstration suivante. Nous devons donc
importer cette réflexion dans le système. Ce que nous voulons faire,
c'est définir une classe. Et l'utilisation de l'attribut de cette classe sera l'
attribut cible de cette classe. Et la classe sera
appelée attribut de l'entreprise, qui héritera de
la classe de base de l'attribut. Et nous aurons le nom de la chaîne privée, l'emplacement de la chaîne
privée. Et le
nom de chaîne public avec l'écart. Cela renvoie le nom. Et l'ensemble, qui
va définir le nom égal à la valeur. Et nous aurons l'emplacement
public de la chaîne. Et nous aurions un constructeur. Donc, l'attribut de société publique et la chaîne company et
l'emplacement de la chaîne. Et nous aimerions que le nom
soit égal
à celui de l'entreprise et que l' emplacement soit égal à l'emplacement. Ça va ? Maintenant que
ce n'est plus le cas,
nous pouvons avoir une nouvelle classe de base d'
attributs laquelle l'entreprise sera imaginaire. Et il y aura quelque
chose à Atlanta. Ceci, on va l'
appeler serveur de classe. Et il aura un nom de chaîne
privé. Et la chaîne privée. Ce nom de chaîne public. Avec le GET. Viens. Cela renvoie le nom et l' ensemble qui renvoie
name est égal à la valeur. Très bien, nous avons donc
ce cours public. Appelons ce serveur
de l'entreprise, désolé. Et nous allons
réaffecter ces fonctions. Nous avons donc ces
fonctions obsolètes et nous avons le reste commencer et l'ajouter
aux fonctions de dressage. Et ici, dans l'ensemble, nous pouvons créer un serveur a à partir du nouveau contrôleur de domaine
du serveur de l'entreprise. Et pourquoi pleure-t-il ? Il n'a pas
de constructeur, bien entendu, car il doit être défini. Donc public, serveur d'entreprise, chaîne, nom, et le nom
est égal au nom. Très bien, nous avons maintenant
le constructeur et nous aurons
les informations sur le membre. Info est égal au type ou à
un type de renommée, mais plutôt au serveur de l'entreprise. Et le tableau d'objets
avec l'attribut va être l'info,
obtenir des attributs personnalisés. L'attribut de l'entreprise
et un faux. Ça va ? Ensuite, nous pouvons utiliser la boucle foreach pour parcourir chaque attribut d'objet
dans les attributs. Ensuite, il suffit d'utiliser
l'attribut d'entreprise C égal à
l'attribut de l'entreprise, attribut. Toi. Et des cônes sur la bonne ligne. Signe dollar, citation, a, nom et lieu ou non. B.C, ces lieux, désolé. Et nous pouvons utiliser ceux de
la touche trois pour
conserver l'invite. Très bien, comme vous pouvez le voir, nous avons pu obtenir l'attribut à partir d'une instance
spécifique. C'est ainsi que vous pouvez utiliser les
attributs prédéfinis courants dans C-Sharp. voit la prochaine fois.
18. C # Advanced Lire seulement les autoproperties: Bienvenue. Dans cette vidéo, nous allons
parler de trois, les seules
propriétés automatiques de C-Sharp. Par conséquent, lisez uniquement les
propriétés automatiques. Qu'est-ce qu'ils sont ? Nous divergeons et six ont un
C-sharp sorti en 2015. Donc, sept ans ne
se sont pas écoulés avec le visa
Studio Ultimate. Il s'agissait d'une
fonctionnalité unique mise en œuvre. C'est ce qu'on appelle la propriété
automatique en lecture seule et parfois appelée propriété automatique en lecture seule. Dans cette vidéo, nous
allons donc prendre,
prendre le concept de
champs et de propriétés
et voir comment les deux
peuvent être en lecture seule et comment ils sont
implémentés en nous concentrant sur
l'aspect de propriété automatique. Donc les peurs contre les propriétés. Ces deux concepts
s'articulent autour l'idée d'abstraction.
Avec la classe. Vous pouvez avoir des champs
et des propriétés. Les champs sont des
membres variables normaux ou appartiennent à une classe. Pourquoi j'ai écrit « voiture » ? Une classe de voitures ? Et les propriétés sont une
abstraction qui
permet d'obtenir ou même de
définir leurs valeurs. Par exemple, nous pourrions créer la classe de champ public et nous aurions
désolé, classe, d'accord. Nom de chaîne
privée et fonction de chaîne privée. Et ce que nous pouvons faire, c'est définir ces soi-disant champs dans un constructeur de
construction. Donc le serveur public guéri, nous aurions le
nom de la chaîne, la fonction de chaîne. Ici. Ce que nous aimerions
faire, c'est dire que ce nom est égal à name. Et cette fonction est
égale à fonction. Lorsque nous définissons des champs, nous devons
nous assurer qu'ils sont privés. Cela garantit que nous ne
violons pas le concept
d'encapsulation. En résumé, l'encapsulation signifie que nous créons les champs, mais que nous regroupons les
champs ou les données avec des méthodes et des fonctions
capables de les manipuler. Et nous n'exposons pas ces
données à des fins de manipulation directe. Et ce code actuel
n'est pas vraiment suffisant
car nous
ne sommes pas en mesure de les récupérer. Donc, ce que nous devons
faire est de définir le nom de
chaîne public suivant, name. Et nous utiliserions pour obtenir pour
renvoyer le nom et l'ensemble, l'ensemble, le nom à la valeur. Nous aurions la fonction de chaîne
publique, nous obtiendrions
la fonction et la
définirons sur value. Et nous avons maintenant la possibilité de lire
et de modifier les propriétés. Voyons voir notre rhume. champ serveur a est donc égal à un
nouveau champ sandwich. Et je m'appelle DC. La fonction sur le
fil d'argent est plutôt une. Et la fonction est le contrôleur de
domaine. Ça va ? Maintenant, nous pouvons
utiliser la ligne droite de la console, l'impression, un nom
et une fonction. Et n'oubliez pas la
console à trois touches. Donc, lorsque nous exécutons
cet exemple, voici le résultat. Nous avons donc réussi à les
définir et à y accéder, et nous avons
initialisé notre classe avec un constructeur
plus tard, les champs ont été modifiés à l'aide
des accesseurs de propriété. Et nous avons également respecté le principe de l'
encapsulation. Maintenant que nous avons clarifié le concept, nous pouvons le pimenter avec
l'aspect lecture seule. Lorsque nous voulons créer
un champ en lecture seule, il suffit d'utiliser
le mot clé Read Only. Donc, si nous modifions
ceci en lecture seule, alors nous pouvons voir que le trait de soulignement
du nom sera rouge. Et dans ce cas
d'un nombre de peur, cela signifie que nous n'avons qu'une seule
chance
d'initialiser le champ avec une valeur. Cela se produit lorsque nous appelons le constructeur constructeur et que nous recevons une
annonce ou une telle tentative. Cela peut donc être retiré en toute sécurité. Si nous devions l'exécuter
à nouveau, vous verrez qu'
il fonctionne correctement. Mais si j'essaie de dire que
le nom est égal à nouveau nom,
ce que je devrais voir, c'est qu'il s'agit d'une propriété en lecture seule
et qu'elle ne peut pas être modifiée. Ça va ? Donc en cas de numéro de
champ, d'accord ? Et nous avons vu le résultat. C'est ainsi que vous pouvez utiliser propriétés Alto
en lecture seule dans C-Sharp. voit à l'intérieur.
19. Syntaxe avancée C # pour les littéraux: Bienvenue. Dans cette vidéo,
nous allons parler de la façon dont vous pouvez reconnaître la
syntaxe pour l'alphabétisation, y compris les
séquences de saut de platine Unicode et les traits de
soulignement en C-dièse. Alors allons droit au but. Plus tard, nous en C-Sharp et rien de
plus que des valeurs fixes. Ces valeurs sont utilisées par
des variables ou des constantes. Il existe de nombreux types de
littéraux, tels que les entiers, les virgules
flottantes, les caractères, les
chaînes de caractères, les booléens. Et si nous
examinons les littéraux entiers, ce serait un exemple. Et c'est un type de littérature
qui concerne les nombres entiers. Et il existe essentiellement
trois sous-types, décimal, octal et hexadécimal. Il s'agit de la décimale. Ce que nous pourrions faire, c'est
créer l'octo, qui est le, oh, allez. Et huit. Et maintenant 028. Et nous pouvons avoir l'hexadécimal, qui est 0 x un, C par exemple. Et en gros, ce que nous pourrions faire est d'utiliser les
cônes ou la ligne de gauche à droite. Et disons que le nom
de la variable a une valeur. Et fais-le pour
les trois. C'est pour le O et le H.
Et n'oubliez pas le
deux-points, alors lisez la touche. Donc, si nous l'exécutons, c' est
ce que nous
avons à l'écran. Notez donc comment le nom de nous permet de faire
référence au nom d'une variable dans notre interpolation de
chaîne. L'autre chose que nous
pouvons ne pas remarquer est
la façon dont les valeurs s'affichent en cas
de nombre hexa et octal. Et ils aiment essentiellement
les préfixes de préface. Nous ne voyons ni le
préfixe hexadécimal ni le préfixe. Ce que nous pouvons faire est
de créer des littéraux flottants. Nous allons donc créer le
float f k égal 283848. Et nous pourrions avoir l' octo
flottant F B, qui serait
28 ou 27 moins cinq. Et nous pourrions The, sorry, d et roman. Oui, maintenant ça semble aller mieux. Nous pourrions donc avoir le 28e F. Et maintenant, ce que nous pouvons faire, c'est
imprimer les valeurs. Donc le a, le B et le C. Et si nous l'
exécutons, notez comment il a également la notation différente lorsqu' il est imprimé à l'écran. Il s'agit de la
notation scientifique des flotteurs. Et nous pouvons également avoir des littéraux de
caractère. Donc car c est égal à a, ou nous pouvons définir la version
Unicode. Donc tu dois trois O, six. Et imprimons ça. Ca, ca, tu vois ça. On se voit. Allons-y. Il s'agit donc du caractère Unicode pour le point d'
interrogation, par exemple. Et nous pouvons également avoir des littéraux de
chaîne. Et nous pouvons également avoir
les littéraux booléens. Imprimons-les. C'est donc le S. Et ça va être l'abeille. Ça va être l'abeille. Allons-y. Et ce que nous pouvons avoir, ce sont également des séquences d'échappement
Unicode. par exemple
les séquences d'échappement
que nous pouvons utiliser. L'Unicode me
les a mis dans des barres obliques inverses. Nous pouvons donc avoir le caractère
arc, le retour arrière, le saut de formulaire
, le retour chariot, nouvelle ligne, les prises horizontales,
verticales, les guillemets simples, les guillemets doubles et la barre oblique inverse également. Et nous devons également
parler du trait de soulignement. D'après mon expérience, ce sujet est l'un des plus divisés parmi les développeurs. L'une des raisons à cela
est qu'il y a ceux qui apprennent le C dièse
en tant que première langue, essayant de suivre
les meilleures pratiques
et les guides de style de codage. Et il y a aussi ceux qui viennent d'horizons
différents, comme C, C plus Python
ou n'importe quel langage. Et ils ont tendance à nommer
les variables différemment. Et donc, bien sûr, chaque
entreprise peut avoir ses propres directives de codage
ou de style. Et ce que tu peux faire c'est aller
voir le flic du style. Et aussi le British Heart. Ce sont des outils qui vous
permettent de créer une
version basée sur un style ou un guide de style
vérifié de votre application. C'est tout ce que je
voulais vous montrer dans cette vidéo. Rendez-vous dans le prochain.
20. C # Advanced Returning ne lire que des références provenant des fonctions: Bienvenue. Dans cette vidéo, nous
allons parler de trois références en lecture seule
tournantes à partir de fonctions. Donc, cette rubrique que
vous avez tous tourne autour du code de sécurité de type et de
mémoire. Nous divergeons donc et l'un des développeurs publiés par
C-sharp pourrait passer des arguments à
des méthodes par référence. Au fur et à mesure que le temps passait et que la
programmation changeait, nouveaux défis ont surgi qui ont forcé l'ajout de nouvelles fonctionnalités
à C-sharp. Avec la version
sept de C-sharp, deux
fonctionnalités très importantes ont été ajoutées. L'un était la possibilité
de déclarer des références à des variables locales et
l'autre était de
renvoyer par référence à
partir de méthodes. Nous allons jeter les bases nécessaires pour comprendre les deux
types d'arguments. L'argument passe. Quelle est donc la différence
entre la valeur et le financement ? Il s'agit de deux
types principaux dans C-Sharp, et nous avons également la possibilité de
définir des types personnalisés, mais ce n'est pas dans le
cadre de cette vidéo. Donc, via les types de référence, montrent caractéristiques de performance
différentes si nous regardons sous le capot, parce
que la nature même de cette implémentation où
vous n'
avez pas de surcharge mémorise les données que vous pouvez stocker dans un type spécifique, comme une
chaîne entière double, ont
un type
spécifique, une taille spécifique et les types de référence doivent
ajouter des champs supplémentaires. L'un est l'en-tête de l'objet et l'autre est
la table de méthodes. L'en-tête d'objet est utilisé par le Common Language
Runtime pour stocker des informations supplémentaires.
Il s'agit essentiellement d'un gros masque. Jetons donc un coup d'œil à struct. Donc
structure en lecture seule publique, une dynamique. Et cette structure
aurait la chaîne publique, chaîne Bob Lake par
nom, avec le GET. Et le double public. En fait, ratio avec l'EEG
et le public int, cas
initiaux et taux
public de double mortalité. Nous pouvons maintenant avoir une instance ou un constructeur
pour la pandémie. Et il aurait
le nom de la chaîne, double ratio et int
et double rate. Et maintenant, en période de pandémie, nous aurions le
nom du virus égal au nom, le ratio est égal
au ratio en fait. Et l'affaire l'est, désolée. En fait, le ratio doit
être égal au ratio. Et dans le cas initial, cela devrait être
égal à k is, is, et le taux de mortalité
devrait être égal au taux. Et nous pouvons voir que les
accesseurs sont lus, ne
sont définis qu'avec get
et que l'ensemble est manquant. Et nous ne lisons pas
seulement les mots clés qui indiquent à la CRL que notre structure va
être immuable. Cela signifie qu'au fil du temps, les
champs ne peuvent pas être modifiés. Maintenant, nous aimerions
combiner cet homme, L'aspect mentionné ci-dessus, qui est la structure et les valeurs de
passage par référence pour créer une démonstration
pour ce sujet. Ce que nous aimerions faire c'est créer ceci. Très bien, donc l'
alignement est bon. Classe publique, simple,
ref, lecture seule. Et nous aurons le tableau int statique
avec le nouveau int three. Et il va y en avoir 123. Et l'int statique
get index, int index. Et nous renvoyons un indice à la RAF. Et nous aurions le vide statique
public pour notre quoi. Cela devrait être fermé. Et ici, nous
aimerions utiliser les cônes toute cette
ligne brillante pour obtenir l'indice. Tiens bon. C'est là qu'il
faut le mettre. Obtenez d'abord l'index et utilisez
les cônes ou la touche de lecture. Et nous pouvons voir la
valeur qui est un. Donc, dans ce code, nous
voyons un tableau statique d'entiers d'
une taille de trois. Et notre méthode GET
index prend un index comme
argument et renvoie un int dans
un pot à partir de notre
tableau, qui est du radon. Si nous passons l'indice
qui est supérieur la longueur du tableau
ou inférieur à 0, nous obtenons une exception de l'exception d'index hors
plage. Donc, si nous voulons créer
un exemple plus complexe, nous pouvons le faire de la manière
suivante. Supposons que nous ayons struct, qui représente les
salles de classe. Cela a donc le constructeur, qui prend un
nom et la taille. Et il dispose également d'une baie privée
d'utilisation actuelle. Et il a un nom et les propriétés de
taille, et ainsi de suite. Maintenant, ce que nous pouvons faire, c'est créer ce qui suit. Nous avons donc un bar
qui s'appelle rooms, et c'est une nouvelle salle de classe. Et ici, nous aimerions
avoir les nouvelles salles de classe. Math avec dix personnes. Et les nouvelles salles
de classe sont plus riches avec 20. Et n'
oublions pas de le fermer. Nous pouvons avoir l'école du var
et elle a de nouvelles salles de classe. Et à l'école. Ce magasin
va prendre les pièces
qui vont s'initialiser. Ensuite, nous pouvons utiliser les
téléphones sur toute la bonne ligne pour imprimer l'école qui est
utilisée. 10. Si vous l'exécutez, vous pouvez voir les différentes utilisations de la
classe. C'est
ainsi que vous pouvez créer vos propres références
en lecture seule qui seront renvoyées par des
fonctions dans C Sharp. Techniquement, c'est
tout ce que je voulais te montrer. On se voit dans le prochain.
21. Méthode avancée C # sans nom: Bienvenue. Dans cette vidéo, nous
allons
parler de méthodes sans nom. Il s'agit donc d'un ensemble de fonctionnalités en C-dièse qu'il est très
important de comprendre. Cet ensemble de fonctionnalités
s'articule autour de lambda, d'expressions lambda, de délégués
et de méthodes anonymes. Nous allons voir
comment vous pouvez les utiliser. abord, nous allons
parler des délégués. Donc, généralement, fonctionne ou met en pause un ou plusieurs paramètres
ou rien du tout. Habituellement, ils renvoient
quelque chose ou effectuent des opérations spécifiques avec
des données ou des textes qu'ils possèdent. Nous parlons de délégués
lorsque nous voulons
passer la fonction elle-même
en tant que paramètre. Voyons ce que
C-sharp a à offrir. abord, nous
aimerions créer un délégué. Par exemple, nous aurions le serveur Linux de
chaîne statique public, qui a le
nom de chaîne, l'état de la chaîne. Nous aurions le contrôle si l'état est égal à
up, puis nous revenons. Le serveur est. Sinon, ce
que nous aimerions faire. Si l'état est en panne. Ensuite, nous pouvons retourner
le serveur en panne. Et enfin, retournez l'état inconnu. Très bien. Cela fonctionne-t-il un problème avec devrait l'avoir
entre guillemets doubles. Super. Très bien. Nous devons
maintenant créer
une réaction d' état de chaîne déléguée avec le serveur de chaînes
et l'état de chaîne. Et nous devons définir la chaîne statique
publique Windows Server avec le
nom de la chaîne et l'état de la chaîne. Et ce que nous aimerions faire pour
renvoyer le serveur est dans l'état. L'état avec le
signe dollar, bien sûr. Et nous devrions le
déplacer ici dans le programme. Et ici, nous aimerions
créer une réaction d'État. Linux est synonyme de réaction d'un nouvel état. Et nous utiliserions
le serveur Linux. Et la réaction d'état Windows, nouvelle réaction d'état
Windows Server. Et nous aimerions faire
la console suivante, ligne
droite, Linux, bind et plus. Et nous aurions
un autre Linux qui est LDAP et qui aurait les éléments suivants. Nous aimerions donc avoir cette réaction de l'État ou simplement la
voir en direct. Quel est donc le problème ? Comme vous pouvez le voir, aucun problème. Le serveur est opérationnel, il
fonctionne
donc comme prévu. Et oui, nous pourrions encore étendre ses
fonctionnalités avec la vérification à distance ou l'ouverture de
tickets si vous êtes dans une grande
infrastructure d'entreprise, mais techniquement, allons-y. Nous allons donc maintenant
parler de méthodes anonymes. Ainsi, dans la section précédente, nous avons discuté de la façon dont les
délégués sont des
types de
référence et utilisés pour référencer toute méthode
ayant la même signature. Contrairement à elles,
les fonctions anonymes
consistent toutes à analyser bloc de
code ou du code en
tant que paramètre délégué. Créons l'exemple
suivant. Délégué public. État vide, état de chaîne. Et dans le vide statique principal, ce que nous aimerions faire, c'est
créer la
portée extérieure, qui est de 99. Et l'État S
va être délégué. Et il s'agira d'un délégué d'état de
chaîne. Et en gros, ce que nous
aimerions
faire est d'utiliser une ligne droite de console. Et l'État a été saisi. Faisons en sorte que ce soit une chaîne F
et fermons la console. bonne ligne. Signe dollar. La valeur de étendue
externe est en dehors de la portée. Et nous allons
envoyer D ici. Et si nous l'
exécutons, nous devrions également fermer
celui-ci. Nous devrions voir ce qui suit. L'état supérieur et le troisième, et la valeur de la portée
externe est 99. C'est ainsi que vous pouvez
définir des méthodes anonymes. Le dernier devrait
être des paramètres lambda que nous vérifions quelles expressions
lambda. Il s'agit d'une
fonction anonyme qui peut contenir des expressions
et des instructions. Nous allons donc créer ce qui suit. Nous aurons la chaîne
de fonction, string. Et ce
sera un nom bienvenu. Et nous définissons le nom de bienvenue de
retour. Le poids, bien sûr,
le signe du dollar. Et n'oubliez pas de le fermer. Nous pouvons maintenant utiliser la ligne droite de la
console pour imprimer le pouce de la fortune. Danielle. Si nous l'exécutons, vous pouvez voir que nous
utilisons l'expression lambda. Nous pourrions créer un autre exemple. Donc int, int n 34 est égal x et renvoie x fois trois. Ensuite, nous pouvons
imprimer l'entrée 0.5. Il devrait être 15. C'est tout ce que je voulais
vous montrer dans cette vidéo sur les expressions
Lambda, les délégués et les méthodes
anonymes. Rendez-vous dans le prochain.
22. LINQ avancé C #: Bienvenue. Dans cette vidéo, nous
allons examiner la syntaxe de requête intégrée
au langage, qui est la
version longue de Linked Cue. Et il a été introduit dans un autre framework dotnet avec la version 3.5 en 2007. Le concept de base
était d'étendre le framework et, avec lui, le langage C-sharp avec des capacités d'expression de
requête. Par exemple, si nous devions
créer un exemple, nous pouvons créer une chaîne
ArrayList. Et qu'il contient liste des
serveurs avec la
nouvelle chaîne de liste. Et nous aimerions avoir le contrôleur de
domaine Bottle Bell Loom. Et prothétique, c'
est-à-dire le DNS. Et à la clé, qui
est le, l'ACP. En gros, c'est
la structure que vous pouvez définir
dans la fonction principale. C'est ainsi que nous avons pu le
démontrer. Donc d c est égal à list, server list, où S, S contient Domain Controller. Et déplaçons-le
ici à l'intérieur du bâtiment principal. Nous pouvons maintenant utiliser la ligne droite de
la
console, l'impression, les DC. Comme vous pouvez le voir, voici la liste des EECS. Et il a essentiellement
une exécution différée. Donc, afin d'
approfondir la file d'attente liée et les autres avantages
qui peuvent en découler, nous devons comprendre ce qu'est l'exécution
différée. Dans la plupart des cas,
lors de
la compilation, les expressions de lien sont évaluées sur un ensemble de données spécifique et les variables sont initialisées
avec les valeurs filtrées. En mettant en œuvre l'exécution
différée, nous pouvons économiser de précieuses ressources CPU
et RAM. Parce que le concept nous
permet de ne pas
évaluer une
expression spécifique ou de retarder l'évaluation jusqu'à ce que la valeur réalisée soit
réellement requise. Il y a deux cas
où c'est très utile. La première est lorsque votre
application travaille sur plusieurs gigaoctets de données,
voire plusieurs téraoctets de données. Ensuite, vous avez enchaîné
plusieurs requêtes qui entraînent différentes
manipulations des ensembles de données. Nous avons donc un mot clé dont
nous devons parler. Et c'est le rendement. Afin d'approfondir
notre compréhension des différentes exécutions, nous devons introduire un
mot-clé appelé yield. Et cela a été introduit avec
la version 2 de C-sharp. C'est avec le Vita pour évaluation
différée et
l'amélioration des performances des requêtes LINQ. Et le mot-clé yield
est context you are, ce qui signifie qu'
il peut être utilisé
comme nom de variable
sans aucun problème. Nous allons donc créer une
petite application. Ici. Nous aimerions avoir
un serveur de classe publique. Et il a un nom de chaîne
et une fonction de chaîne. Et nous avons le nom de
chaîne public avec Get. C'est censé
renvoyer le nom. Et l'ensemble, qui
est censé définir le nom est égal à la valeur. Et nous avons la même chose
pour la fonction jusqu'à présent, fonction de chaîne sombre. Et nous utilisons la fonction,
oubliez la réponse. Très bien. Nous aurons également un
constructeur, donc un serveur public. Et ce constructeur
va prendre le nom et la fonction. Et définir la fonction
est égale à la fonction. Le nom est égal au nom. Ça va ? Et en gros, il s'
agit de la classe du serveur. Et nous allons avoir
un autre cours public, qui est le programme intérimaire. Et ici, nous aimerions
créer un
nombre incalculable de statiques publics pour le
serveur, la base de données du serveur. Et ici, nous devons
définir ce qui suit. Nous allons avoir une
matrice de serveurs avec les serveurs. s'agit simplement d'une nouvelle
instance du serveur. Et cette instance sera remplie par le nouveau serveur ou mauvais prêt
et le contrôleur de domaine. Et nous allons
avoir n'importe quoi et n'importe où. Et l'un d'eux sera le HCP et le DNS. Très bien. C'est maintenant fermé. Et ce que nous
aimerions faire, c'est avoir le serveur S pour chaque serveur dans les serveurs et le rendement de retour S. Maintenant, nous avons supprimé les traits de
soulignement. Et ce que nous pouvons faire
dans le domaine, c'est
d'utiliser ForEach dans Server DB. Utilisez simplement la ligne droite de la
console, signe
dollar, et utilisez le nom du point S et
la fonction du point S. Maintenant, si nous l'exécutons, vous pouvez voir que nous avons démontré
l'exécution différée et que nous sommes en mesure d'itérer
sur l'INR I innombrables. Et la clé, c'est le rendement. Voici donc le retour S, qui nous permet d'itérer sur chaque élément de notre liste de serveurs. Et il ne renvoie pas
la liste complète à fois pour sauvegarder le MOD connu
et améliorer les performances. Il s'agit également d'un
exemple d'exécution différée. Comme la boucle for each
sortait les
termes un par un. Et nous devrions considérer différence entre Lizzie
et une exécution impatiente. Donc ou évaluation non plus. L'utilisation de l'évaluation différée signifie qu'un
seul élément de la collection source est traité pendant l'appel de l'itérateur. Donc quelque chose comme ça. Et un itérateur peut
être une classe habituée ou une boucle foreach ou abide
selon le contexte. C'est tout ce que je voulais vous
montrer dans cet exemple.
On se voit dans le prochain.
23. Interpolation à cordes avancée C #: Bienvenue. Dans cette vidéo, nous allons parler de l'interpolation de
chaînes. L'interpolation de chaîne
a quelque chose à voir avec l'impression
sur la console. Et c'est essentiellement
une tâche courante. Nous pouvons imprimer un simple message d'
état, le résultat d'une action
spécifique. Ça n'a pas vraiment d'importance. Ce qui importe, c'est la flexibilité de
nos relevés d'impression. Et il importe également de savoir comment cela
s'intègre dans le flux des programmes. Par exemple, nous devrions
considérer ce qui suit. L'interpolation de chaîne peut donc
utiliser trois types de variables, substitution, l'accès au tableau, les expressions et les appels de méthode. L'aspect le plus important de l'interpolation de chaîne est
le signe dollar. Donc, par exemple, chaîne où, où elle devrait avoir
score et chaîne quoi ? Tomate. Et vous pouvez utiliser la
ligne d'écriture point de la console pour imprimer. J'ai acheté et utilisé la ligne d'écriture point de la console, pas la ligne droite, la console, lu T. Et si nous l'exécutons, vous pouvez voir que ces valeurs de variables
étaient bien interpolateur. Et fondamentalement, ce que nous pouvons faire c'est d'
interpeller les tableaux également. Créons donc un tableau d'
entiers
contenant les nombres pairs 2468. Et maintenant, nous pouvons utiliser la ligne d'écriture
point de la console qui politique. Donc le premier, le deuxième, le troisième, le quatrième sont des nombres pairs. Et on y va. Ce
devrait être le premier, et ce devrait être des nombres pairs. Très bien, maintenant la sortie
semble être correcte. Ce que nous pouvons faire, c'est
également interpeller des expressions ou les intercaler
avec des expressions. Nous avons donc deux valeurs, x, x est égal à huit et y est égal à dix. Nous pouvons utiliser
ce qui suit pour
imprimer une sortie bien formatée. Donc X plus Y est égal X plus Y. Et nous pourrions
diviser le temps et peut-être le moins. Et si cet exemple est aigu, nous devrions voir ce
qui suit sur la sortie. Vous avez donc la
possibilité d'évaluer les expressions lors
de l'interpolation. Vous pouvez également créer une
fonction qui aura la puissance int quatrième int x
statique. Et elle devrait renvoyer x
fois x fois x fois x. Et ici sur la console. Et nous pourrions écrire x à la quatrième puissance x. De
cette façon, nous interpolons
l'appel de fonction lui-même, et nous pouvons également interpeller
avec des alignements. Créons donc une variable
worker, qui est un nouveau dictionnaire
de chaîne et de chaîne. Ici, nous pouvons dire que nous avons le John,
égal à DevOps. Cependant, John équivaut
à monter de niveau pour ajouter. Ici, nous pouvons
utiliser la ligne droite de la console. L'imprimé que nous avons. Ce devrait être le moins 15. Et nous devrions aider la position avec les 20. Et utilisez la boucle for each. Chez les travailleurs. Ici, imprimez la clé de titre. Et la valeur du titre
doit être un K majuscule, K. Et si nous l'exécutons, vous pouvez voir que nous
avons le rythme ici. Dans ce cas. Tiens bon. Ça devrait se passer comme ça. Ça semble mieux. C'est tout ce que je voulais vous montrer à
propos de l'interpolation de chaînes. Rendez-vous au prochain.
24. C # Advanced Value et assignation de type de référence: Bienvenue. Dans cette vidéo, nous allons parler
d'un sujet intéressant en C-Sharp, s'appelle la valeur et l'affectation du type de
référence, donc bien et graphique. Créons donc le projet. Donc, selon le système
de type d'un langage de programmation, il existe deux catégories principales. Il existe des langages de
programmation fortement et faiblement typés. Ces catégories définissaient la
façon dont les règles de saisie s'appliquaient lors de la compilation et de l'
exécution du code source. En 1974, Barbara
Liskov et Stefan Zeros ont défini un
langage de programmation fortement typé de la façon suivante. Chaque fois que l'objet
est passé de la fonction appelante
à la fonction
d'appel son type doit être compatible avec le type
déclaré dans la fonction de code. Nous allons donc
donner un peu de contexte et examiner comment et quelle est la
différence entre les deux. Donc, dans le
framework dotnet et touchez le langage de
programmation c-sharp, il existe deux types principaux. L'un est appelé valeur et l'
autre est un type de référence. C'est un autre terme
appelé contextes. Et il y a deux
contextes en do dièse. L'un est dit sûr et l'
autre non sûr. Nous l'expliquerons plus tard, mais il convient de mentionner
que dans des contextes dangereux, nous avons un troisième type
appelé pointeur. Pour l'instant, cela suffit, nous connaissons le contexte sûr
quand le contexte l'est, lorsque le code s'exécute sous la supervision du CLR. Il existe quatre types qui
entrent dans la catégorie des
types de référence. Chaînes, tableaux,
classes et délégués. Et le reste des types
appartiennent à la catégorie de type. Donc bool en voiture, décimal, et ainsi de suite. Regardons le type de valeur. Supposons que nous ayons une fonction, public statique, vide au carré. Et il reçoit un
double comme argument. Et ce que nous allons
faire, c'est utiliser la ligne droite de la console
et en gros x fois x. Maintenant nous pouvons déclarer une variable a, qui est Stan, et
utiliser la console. Ou plutôt appelez simplement
le carré double a. Et donnez-lui une touche de lecture point de
console. Maintenant, si nous l'
exécutons, nous devrions voir la sortie comme 100. Que se passe-t-il dans les
coulisses ? La valeur de ce contenu est
allouée sur la pile et un seul espace en mémoire basé sur le type est réservé
dans la mammaire, cette variable
détient directement la valeur. Donc, si nous devions
copier cette valeur une autre variable et affectation, la valeur est copiée. Vous aurez donc la valeur
de ces résultats deux fois, deux fois sur la pile
pour chaque variable. Tous les types de données prédéfinis
dans les bras et même les structures. Ou de cette façon. Les types de valeur sont
créés lors de la compilation. ce fait, ils sont protégés du
ramasseur de déchets. Il ne peut pas y accéder. Examinons maintenant le type
de référence. Supposons que nous ayons un serveur de classe
publique. Et ce serveur aura un nom
de chaîne, public et CPU et
public en RAM, ou tout simplement le doublera. Donc maintenant, ce que nous pouvons faire est créer le public
et annuler l'initialisation. Et nous allons avoir une catégorie et le
serveur S comme arguments. Donc, dans le cas où la
catégorie est petite, alors ce que nous aimerions
faire est de créer ou plutôt d'attribuer le type small. Et ce que nous aimerions, désolé. Type de chaîne publique. Donc, comme le type doit être petit, comme le processeur doit être un et S, la RAM doit être deux. Comme si la catégorie était moyenne. Ensuite, nous affecterons un peu plus de
ressources et nous l'appellerons moyen. Voyons deux cœurs, quatre Go de RAM. Si la catégorie est grande, nous aimerions attribuer les quatre grands processeurs et
huit Go de RAM. Dans le cas contraire, nous
aimerions lancer une nouvelle exception. Nouveau système, cette exception d'
argument et cette catégorie doivent être
petites, moyennes ou grandes. Ça va ? Maintenant, nous
pouvons créer un serveur. Le serveur va
être un nouveau serveur. Nous pouvons appeler l'initialisation. Tiens bon. Il devrait en être ainsi. Mettez-le au carré. Pourquoi cela ne fonctionne-t-il pas ? Nous avons ça. Nous avons
le serveur initialisé. Et ça devrait être tout près d'ici. Initialisez donc le serveur et un
logo et c'est déjà défini. Donc, faisons en
sorte que ce
soit et qu' il n'y ait pas d'argument
étant donné le serveur initial. Alors faisons-le petit. Et Lee. Nous avons donc la chaîne
et le serveur S. Pourquoi n'est-ce pas type de référence de classe
publique ? Et nous avons le serveur ici, et le serveur de chaînes et de programmes. Nous avons donc le petit
support et nous avons le serveur S,
public static void. Super. Maintenant, ce que nous devrions être capables de
faire est d'utiliser la ligne droite de la
console des cônes avec le signe dollar et de simplement
afficher les attributs. Donc, soyez cpu, tapez
et B que Graham. Et divisons-les. Ça va ? Donc, en gros, c'est ça. Nous avons une classe qui est
du type référence. Et c'est important à noter car la fonction
appelée initialize server, qui est en cours d'initialisation,
prend deux arguments. Le premier est
un type de valeur et le second
un type de référence. Le type où
la classe est passée, la fonction changera les propriétés publiques
de la classe transmise par
référence en fonction de la
catégorie. On passe. Si nous passons une catégorie
qui n'est pas implémentée qu'une
nouvelle annonce ou son trône. est donc tout ce que je
voulais vous montrer dans cette vidéo sur
la valeur et le type. Rendez-vous dans le prochain.
25. Opérateur de propagation de Null avancé C #: Bonjour et bon retour. Dans cette vidéo, nous
allons parler l'
opérateur de propagation dans C-Sharp. Donc, en 2016, il se passe beaucoup de
choses. Le 12 novembre,
il y a eu un événement
appelé tête de connexion Visual Studio par Microsoft
sur le cylindre est publié la version d'aperçu de Visual Studio 2015 et
la version C sharp six. Cette nouvelle version a
intégré de nombreux changements que les développeurs et la technologie
de l'époque nécessitaient. Juste pour mentionner quelques-unes
de ces fonctionnalités, c'était la propriété
auto en lecture seule
est l' expression de l'
initialiseur de propriété automatique, MAIS les membres de la fonction informatique utilisant statiques et les nouveaux opérateurs
conditionnels. Dans ce guide,
nous allons donc examiner les opérateurs
conditionnels, ou plus communément appelés opérateurs
de propagation. Il y a aussi
des gens qui appellent cette fonctionnalité un opérateur de
navigation sûr. Pour le comprendre, nous devons introduire
deux nouveaux opérateurs. L'objectif principal de
ces opérateurs est de
rendre l'exécution du code plus fluide et de remplacer l'exception de référence
nulle un ajout ou une gestion significatifs. Voyons un exemple pour
l'opérateur d'accès membre. Avant le do dièse. C-dièse, le code ci-dessous n'
aurait
entraîné aucune exception de référence. Nous avons donc ce stagiaire ou grossier. Nous avons le vide statique principal. Donc, en gros, c'est le code. Et oui, nous avons un
serveur et c'est tout. Ce que nous aimerions
faire maintenant, c'est surmonter ce problème et nous pouvons le
faire de la manière suivante. Nous allons donc avoir un serveur de classe
public avec
le nom de chaîne public, qui a un getter et un setter. Maintenant, ce que nous aimerions
faire, c'est l'initialiser. Et nous aurons un tableau de serveurs, qui s'
appellera serveurs. Et nous aurons une
baie de serveurs avec cinq serveurs. Maintenant, ce que nous aimerions
faire, c'est avoir un serveur, S1 sera le nouveau serveur. Et le S1, ce nom. Ça va être le premier. Nous allons
avoir un serveur, S2. Et S2, le nom
sera le deuxième. Maintenant, ce que nous aimerions
faire, c'est assigner
aux serveurs et aux serveurs. Deuxième. Et puis vas-y. Pour chaque serveur S, N serveurs. Et utilisez simplement la ligne d'écriture
point S de la console, ce nom. Très bien. La vraie clé ici est
que maintenant si nous l'exécutons, nous devrions voir le résultat
suivant. Donc, fondamentalement, nous avons besoin d'un tableau de cinq ou, dans ce
cas, de deux éléments. Et l'enquête sera
remplie de serveurs, leur propriété
de nom
sera également initialisée. Ensuite, nous parcourons le
serveur et vérifions auprès l'
opérateur d'accès membre si le nom du
service est initialisé. Bon, maintenant vous vous
demandez peut-être où se trouve la démonstration de l'élément
x, cet opérateur. Et nous pouvons facilement convertir
la boucle de la façon suivante. Donc, si nous commentons cela, nous pourrions utiliser la
ligne droite de la console et simplement dire que les serveurs remettent en question ou faisons pas de cette
façon.
Mais tout au long. De cette façon. Pour int I est égal à 0, je suis inférieur à deux I plus, plus. Et ici, nous aimerions avoir
le point d'interrogation, le point d'
interrogation, le nom, le
double point d'interrogation du serveur interrogation, le nom, le
double point d'interrogation et dire qu'aucun
nom n'a été spécifié. Maintenant, allons-y pour cinq. Quelle est l'erreur ? Oh, il faut que je le ferme. Très bien. Ce n'est donc pas défini sur un objet. Très bien, convertissons-le. Il s'agit donc essentiellement
de la démonstration pour l'opérateur de
propagation neuronale. C'est la syntaxe pour cela, et c'est ainsi que vous pouvez l'utiliser. C'est tout ce que je
voulais vous montrer dans cette vidéo. On se voit dans le prochain.
26. Expressions de Clojures et de lambda avancés C #: Bonjour et bon retour. Dans cette vidéo, nous
allons
parler des fermetures avec des expressions
lambda. C-sharp, la capacité
qui permet à une méthode ou à
une fonction de référencer
la variable non locale, dont les valeurs sont appelées fermeture. Cette fonctionnalité est
couramment utilisée en conjonction avec la fonction
lambda, qui ne sont rien de plus que fonctions
anonymes
que les développeurs utilisent sur les fonctions principales pour fournir un moyen de flexibilité. Parlons d'abord des
variables non locales. Ainsi, dans C-Sharp, il est possible d'
accéder à une variable en dehors de la portée d'une
fonction. Et considérez les variables normales x car elles sont appelées variables
non locales. Si vous, vous pouvez également entendre développeurs faire référence à
ce type de Fourier, mais comme capturé très capable. En gros, ce que nous pouvons faire pour démontrer
ici est ce qui suit. Nous avons une chaîne statique, best, une chaîne quasi-linéaire, et nous
avons un vide statique. Foo est le meilleur. Et nous pourrions dire que nous voulons que la console affiche la
bonne ligne. Le meilleur est le meilleur. Ça va ? Et nous devrions déplacer
ce trou ici. Ce que nous pouvons faire est d'
utiliser la touche de
lecture point de la console et d'appeler la fonction
who's the best. C'est essentiellement à cela que ressemblent les variables
capturées. Et quelles sont les fonctions
Lambda. Nous avions déjà eu une
vidéo sur les lambdas, mais essayons de la réitérer. Il y a donc beaucoup
d'articles sur Lambda et ce sont des fermetures. Et certaines personnes ont tendance à être d'accord pour dire
qu'il y en a, mais elles ne sont qu'
une partie de la vérité. Et je crois que l'Inde, comme le parti d'opposition, fonctions
Lambda peuvent être
mises en œuvre comme des fermetures, mais ce ne sont pas
des fermetures elles-mêmes. Cela
dépend vraiment du contexte dans lequel vous utilisez votre application
ou l'environnement. Lorsque vous créez
une fonction lambda qui n'
utilise aucune variable locale, elle doit être implémentée en
tant que fermeture. Les expressions lambda peuvent donc
prendre deux formes de base, les expressions lambda et
les instructions lambda. Donc, pour une
expression d'exception lambda, nous pouvons donner cet exemple. Il prend donc deux valeurs booléennes et vérifie si
elles sont égales. Et nous pouvons également avoir des
lambdas de déclaration. Et ils ressemblent à
quelque chose comme ça. Nous avons donc maintenant une chaîne et ensuite elle accueillerait cette
chaîne avec le message. Nous devons donc noter que la fermeture l'accolade
se termine également par un point-virgule. Lorsque nous travaillons avec des
lambdas d'instructions, nous créons généralement
plusieurs expressions les
encapsulons
dans notre fonction. Ce que nous aimerions
faire, c'est prendre un virage serré et combiner les
lambdas et les fermetures. Nous avons donc fermeture de
classe partielle statique
publique, démo. Ici. Ce que nous aimerions
faire, c'est créer un vide statique public. À l'extérieur. Ce sera
notre fonction. Et à l'intérieur de la fonction, nous aurons une variable
locale Nord. Et il est dit que Lambda basé sur la
fermeture. Maintenant, nous allons avoir le
funk, les enfiler tous. Et nous aimerions l'
utiliser comme Lambda. Et nous aurons
la chaîne locale. Il s'agit de Lambda et du
retour local Plus. Très bien. Après cela, nous aurons un
message de chaîne, qui est une démo. Et nous aimerions utiliser la ligne droite de la console
pour imprimer le message. Et dans le domaine, ce que
nous pourrions faire est d'utiliser la
démo de fermeture à l'extérieur. Et c'est ça. Alors lançons-le. Et ici, nous pouvons voir comment
cela a été démontré. Nous voyons donc dans cet exemple que les
variables non locales n'ont pas changé. Cependant, il
se peut que la situation ne soit pas toujours vraie. Si la variable change, la fonction de référencement
sera impactée. Parfois, c'est exactement
le cas que nous voulons atteindre. Par exemple, nous pouvons avoir
une fonction qui enregistre un changement de
terminal dans un état de fonction avec une fonction Lambda. De cette façon, chaque changement
d' état se traduirait par
un logo différent. Nous pouvons maintenant
le démontrer avec des fermetures, et voici comment nous le ferions. Nous aurons donc une
variable foo, qui est stem, et la fonction
qui s'appelle bar. Et il revient simplement pour la ligne droite de la console. Et nous utiliserions le bar complet. Et nous pouvons changer la
valeur de foo à 20. Et après cela, nous
aurons un combattant
égal à bar. Et nous pourrions utiliser la ligne droite de la
console pour
imprimer le combattant avec le combattant. Et c'est ainsi que nous pourrions
mettre en œuvre des fermetures. Techniquement, c'est tout ce que je voulais vous montrer
dans cette vidéo. C'est ainsi que vous pouvez utiliser des fermetures
avec des expressions lambda. On se voit dans le prochain.
27. C # Advanced Foreach et les énumérateurs: Bonjour et bienvenue. Dans cette vidéo, nous
allons parler de la compréhension des générateurs
et des recenseurs. Et je suis recenseur en C-Sharp. L'un des concepts s'
appelle des générateurs, l'autre des itérateurs. Nous allons examiner comment ces idées sont
intégrées dans C-Sharp et voir comment vous
pouvez les
utiliser pour notre propre avantage. Un générateur est généralement une
fonction ou une routine spéciale implémentée dans le
langage qui contrôle le comportement d'une boucle. Les bières du générateur ont
une étrange ressemblance. Deux fonctions qui
renvoient un tableau. Ils ont des paramètres et peuvent être appelés pour générer une
séquence de temps phi. Sans générateurs,
supposons que nous ayons une fonction qui renvoie une liste d'entiers d'
environ 1 million à la fois. Cela signifie que les besoins, la liste doit être
constituée en mémoire, allouer de l'espace pour
toutes les valeurs, puis transmettre ces valeurs
chaque fois qu'elles en ont besoin. Si nous avons les
ressources nécessaires, c'est bon. Mais les gens
s'efforcent toujours de trouver quelque chose pour
ce genre de problèmes. Et les générateurs sont nés. Et les itérateurs sont comme la contrepartie
des générateurs. Et le concept
remonte à 1974. Vers le langage de programmation C. De par sa conception, un
itérateur doit permettre au programmeur de parcourir
des conteneurs spécifiques, et il est le plus souvent
utilisé pour les listes. Voyons un exemple
d'implémentation, nous avons une liste de
chaînes à itérer,
qui est une nouvelle chaîne de liste. Et pour être itéré
a une fonction d'ajout. Et on peut dire
que c' est amusant de programmer. Maintenant, nous pouvons convertir cette liste
en générateur très simplement. Nous pourrions simplement
dire que c'est un I et une chaîne numérique. Et fondamentalement, nous devons également
le changer de cette façon. J'énumère donc arc, ficelle et accroche. Nous avons celui-ci. Et c'est ce
qui doit être itéré. Et nous devons également changer
l'autre. Je m'incline donc pour être itératif. Et ce que nous pouvons faire maintenant est de
prendre la boucle for-each et de dire élément
string dans I innumerable et d'utiliser l'élément de ligne droite de la
console. Et si nous allons de l'avant et lisons la
clé pour attendre la sortie, c'est
ce que nous
allons voir. De cette façon, nous avons remplacé
la liste par un générateur, ce qui réduit l'empreinte
mémoire. Et ici, en gros, il n'
y a pas de déclaration de rupture. Et pourtant il ne va pas à l'infini, donc il sait s'arrêter quand on veut comme épuiser la liste que l'on
aimerait itérer. Et nous pouvons voir que le thé prend un exemple
pratique ou plus pratique également. Nous aimerions donc créer une
petite application qui peut traiter les nombres s'ils sont
impairs ou pairs différemment. L'énumérateur oculaire
nous fournit une solution élégante, qui implique
deux méthodes statiques. La première
méthode statique serait donc celle-ci. Et nous allons devoir
utiliser le thread système. Et ce que nous aimerions faire, c'est qu'il en soit de même pour le processus
d'audit. Donc même traiter quel processus. Alors allons-y. Que se passe-t-il ici ? Nous prenons un
numérateur oculaire comme argument. Et si le courant est 0, nous disons que la liste a été traitée en sortant plutôt que d'
attendre cinq secondes. Si c'est modulo deux, alors nous disons que le numéro
appelle même le processeur. Et on y va. C'est pour les nombres pairs
et impairs. Et maintenant, dans notre main, ce que nous pouvons faire est de
créer une liste int, qui s'appelle MyList. Et voici une nouvelle
liste d'entiers avec valeurs
Dan pour I
va de 0 à I, moins de dix I plus plus. Et nous aimerions utiliser le point my list add
pour ajouter de nouveaux éléments. Ensuite, nous
aurons l'enquêteur oculaire. Et ça va
prendre un entier. Ma liste en m est égale à
ma liste, prends un numérateur. Ma liste en nombre, passe ensuite. Traitez ou montez
le nombre, et c'est tout. Alors allons-y. Et comme vous pouvez le voir, la sortie indique que la
liste a été traitée en quittant. C'est ainsi que vous pouvez utiliser pour chaque
énumérateur oculaire dans C-Sharp. Rendez-vous dans le prochain.
28. Les membres de C # Advanced Static vs les membres d'instance: Bienvenue. Dans cette vidéo, nous allons expliquer
comment
distinguer les membres statiques
et les membres d'instance. programmation orientée objet s'articule donc autour de deux termes principaux dans. L'un est un objet et l'
autre des instances. de programmation spécifique met en œuvre différentes idées
théoriques Le
langage de programmation spécifique met en œuvre différentes idées
théoriques. Dans ce guide, nous
allons examiner statiques et les membres
d'instance. Nous déciderons des termes
et de leur contenu, façon dont vous pouvez les utiliser
dans des règles très simples. Nous distinguons donc également trois
types de nombres différents. Nous pouvons avoir des
champs ou des propriétés
statiques, des méthodes statiques et des classes
statiques. Commençons donc par les cours. Qu'est-ce qui se passe avec les classes
statiques et non statiques ?
Les classes sont
statiques ou non statiques. Et nous avons une classe non statique. Il peut contenir des méthodes, des propriétés et même des événements. Et vous pouvez l'appeler même sans instancier la classe. Par exemple,
créons un projet pour cela. Il y a ce non. Par exemple, créons une classe que nous
appellerions non statique. Et ici, nous allons avoir une
chaîne statique publique, sans instance. Et sur la ligne d'
écriture point de la console, nous imprimons. Je n'ai pas besoin de savoir. Dan Shi a montré. Tiens bon. Nous devrions être renvoyés. Très bien. Et ce que nous pouvons également faire,
c'est définir notre chaîne publique à
l'intérieur de notre classe interne . Un autre exemple. Et ici, nous
ne renvoyons aucune instance ici. Soit. Si vous allez au principal, après avoir la bonne touche. Ce que nous pouvons faire est d'utiliser
la ligne droite de
la console , l'impression, le résultat
de
la fonction non statique no
instance. Et aussi la ligne droite de la console. Et un autre pas comme ça. Donc, en gros, si nous
exécutons cet exemple, vous verrez que nous
appelons la fonction de la classe sans instanciation. Sans utiliser le modificateur
public, nous pouvons appeler les
étoiles connues de la classe de démonstration
statique et non statique, et nous n' héritons rien dans notre classe principale. Et vous devez également connaître le mot clé public lorsque nous
invoquons une autre instance de la méthode depuis
notre classe principale et niveau
d'accessibilité
est correct cette fois. En gros. Dans un autre libellé, lorsque nous parlons des membres de
l'instance, nous avons parlé
des membres de la classe qui ne peuvent pas être appelés accessibles sans
instancier la classe. Ceux auxquels on peut accéder
sont appelés membres. Donc, par exemple, si je donne cette chaîne publique non statique un
nombre égal à n'importe quoi, alors nous pouvons accéder à celle-ci. Alors qu'en est-il des méthodes statiques ? Par exemple, si nous
avons cet exemple, cela s'appellera un membre
statique, une méthode statique. Et lorsque vous définissez
une méthode statique, nous autorisons l'accès à partir de cette
méthode uniquement aux membres statiques de la classe et nous ne pouvons pas
accéder aux membres de l'instance. Et si je devais accéder à cette variable membre
à partir de la méthode statique, cela fonctionnerait toujours correctement. Nous devons maintenant parler de propriétés
statiques ou de champs. Ainsi, lorsque nous avons un champ statique, nous devons garder à
l'esprit que ce champ n'
identifie qu'un seul
emplacement de stockage en mémoire. Et quel que soit le nombre d'
instances
que nous créons , il ne s'agira que d'une
copie d'un champ statique. Le plus souvent, en raison de leur nature
naturelle, les propriétés
statiques sont
utilisées pour stocker des données qui sont censées être partagées par
toutes les instances de la classe. Et si vous voulez un
exemple pour cela, nous pouvons créer une classe
appelée counter. Ici, nous aurions le public static int down Cs égal 0
et le compteur public. Ce que nous aimerions faire est
d'utiliser les instances plus égal à un pour augmenter
le compteur d'instances. Et lorsque nous créons une nouvelle instance à partir du compteur, nous pouvons utiliser
la ligne droite de la console. Imprimez le nombre
d'instances. Ici, nous allons
utiliser le numéro de classe de compteur, ou plutôt des instances pour
imprimer le nombre d'instances. Actuellement, si nous exécutons cette
solution, nous en verrons une. Mais si vous créez
quelques instances supplémentaires. Disons que c'est le compte 123. Et si nous voulons imprimer
le nombre de nouvelles instances, nous verrons que nous avons un
total de quatre instances. Et en gros, c'est tout. C'est donc ce que je
voulais vous montrer dans cette vidéo. On se voit dans le prochain.
29. Inférence de type avancé C #: Bonjour et bon retour. Dans cette vidéo, nous allons
parler de dactylographier
le financement c-sharp. C-dièse est un langage fortement
typé. Est-ce qu'une déclaration
est appelée explicite. Cela signifie que nous devons
spécifier une nouvelle variable. Sinon, le compilateur
lancera une annonce ou avec la version
trois de C-sharp, un nouveau mot-clé a été introduit, et il s'appelle voir. Cela permet aux
développeurs de stocker n'importe quel type de valeur de
manière implicite, ce qui signifie que le
compilateur décidera pour nous pendant la compilation, lorsque nous avons exécuté la première
affectation. ce qu'il faut devenir en tant que
type de cette variable. Et il peut être facilement
intégré avec link Q, qui est la requête
intégrée au langage. Avant l'introduction
de l'inférence de type, définissez
explicitement ce
que sera une chaîne ou entier ou autre avant la compilation
composée. Nous définissons donc une chaîne avec
la valeur par défaut et ainsi de suite. Et maintenant, nous devons
parler de link q. Donc q signifie language
integrated query. Il s'agit d'un ensemble de technologies
basées sur l'intégration de capacités de requête directement
dans le langage C Sharp. Il est très similaire à celui de la requête. L'objectif était de
filtrer les données en fonction critères
spécifiques et de prendre en charge la
plupart des types de données Slack, sequel, Zemo, etc. Et nous allons créer un exemple qui est
censé le démontrer. Nous allons donc créer un serveur de classe
publique. Dans la classe publique, nous aurons un nom String
public, qui a un getter et un setter. Et nous aurons un système d'exploitation
String public avec le getter et le setter. Et après cela, ce que
nous aimerions
faire pour créer une nouvelle énergie solaire. Et il ne s'agit
pas simplement d'un nouveau serveur, mais d'une liste de serveurs. Et nous aimerions avoir
ceci en tant que nouvelle liste de serveurs. Ici. Ce que nous aimerions
faire est le suivant. Nous voulons donc instancier
ces serveurs. Viens. Et nous avons un nouveau serveur, qui va avoir
un nom, qui est comme, qu'en est-il de loom et d'
un système d'exploitation, qui sera quand ? 2019. Et nous en ferons encore un peu plus. Si grand garçon. Ce sera un modèle CentOS
huit et Ricky, ce qui va être neuf. Et maintenant, ce que nous pouvons
faire est de créer une requête serveur, qui proviendra
du serveur dans les serveurs. Et nous aimerions que le système
d'exploitation du serveur soit filtré sur IBM
nine et fermez-le. Nous avons donc cette liste et nous devons ajouter le nouveau serveur sélectionné, exploitation du serveur de noms, et simplement le fermer. Et après cela, nous pouvons utiliser
le serveur var foreach, requête
serveur et simplement utiliser le serveur de ligne droite de la console. Et donnons-lui que
les cônes sont à peu près trois clés et lançons-le. Comme vous pouvez le voir, nous avons
ici le résultat du filtre. Et que voyons-nous ici ? Nous utilisons deux espaces de noms
supplémentaires. L'un est appelé générique et
l'autre est une file d'attente liée. Et le premier nous fournit la mise en œuvre de
la structure de données de liste, où nous stockons nos serveurs. Et les secondes annonces, les capacités de lien vers
notre application après l'initialisation de la
liste avec les serveurs. Et c'est là
que la magie opère. Nous définissons donc d'abord notre variable qui contient
la requête est arts, puis la requête est terminée. Ce qui recherche des serveurs
moins chers ou pas moins chers, mais plutôt le
système d'exploitation étant WAN 19. Le mot-clé walk nous
permet de décider du type de corps
pendant l'exécution. Techniquement, c'est tout je voulais
vous montrer dans cette vidéo. On se voit dans le prochain.
30. Fonctions locales avancées C #: Bonjour et bon retour. Dans cette vidéo, nous
allons
parler des fonctions locales
dans C-Sharp. Donc, les fonctions locales, cette fonctionnalité est devenue une partie de C-sharp
avec la version 7. Et l'idée qui sous-tend cette fonctionnalité est la
définition d'une fonction. Nous avons fait une autre fonction. Et c'est similaire au fonctionnement des décorateurs
Python. Si vous êtes familier avec le concept et si vous
souhaitez le reformuler, nous pouvons dire que la fonction
locale est
une fonction privée d'une
fonction et de sa portée. Et elle est limitée à la fonction dans laquelle elle a été définie. Nous analyserons ce sujet
plus en détail dans cette vidéo. Le type de fonction de
recherche ressemble donc au type
de la fonction conteneur. Cependant, il n'y a pas d'application
stricte des règles du côté du compilateur. Et lorsque nous avons
une fonction locale, nous pouvons également utiliser des modificateurs asynchrones et
non sécurisés. Donc, peu sûr fait référence aux pointeurs
C-sharp à async fait référence
à asynchrone. Et des lieux communs où
les fonctions locales sont définies. Nos constructeurs de méthodes, source d'accès aux
propriétés, accesseurs d'
événements, expressions
lambda, analyseurs ou
destructeurs
phi et fonctions locales. Et une caractéristique très utile de la fonction locale
est qu'elle permet aux exceptions d'
apparaître immédiatement lorsque nous utilisons des itérateurs, par
exemple, les exceptions ne sont
apparues que lorsque nous les énumérons. Nous allons donc créer une
petite démonstration. Ici. Nous aimerions avoir
un message vide, une chaîne, disons. Et nous utilisons la console. C'est vrai ? Ligne. Dis. Utilisons les cônes ou la touche de
lecture pour obtenir des informations. Maintenant, ce que nous aimerions faire, c'est dire le message, bienvenue. Et si nous l'exécutons, nous devrions voir le résultat
suivant. Maintenant, il s'agit essentiellement la forme la plus simple
de fonctions locales. Dans notre cas, nous avons la
fonction appelée message, qui prend une chaîne
comme argument et envoie le message à la
console. Et créons une autre démonstration
avec des portées variables. Ainsi, par exemple, nous
avons ici int k égal 11 et le double j
égal quatre-vingt-dix-neuf virgule neuf. Et nous aurions
la lunette vide. Et nous utilisons la
ligne droite de la console pour imprimer le nom. La valeur du nom de. Il doit s'agir d'une chaîne F. Et nous soumettrions également deux
arguments. Donc, dans X en Y, c'est X
et Y. Et nous aimerions aussi utiliser
le K et le J. Viens. K et J. J et K. Et nous n'avons pas besoin de ce nom. En fait, nous en avions besoin. Ce que nous aimerions
faire maintenant, c'est utiliser la portée. Faisons en sorte que ce soit une chaîne
plutôt que 1299 et exécutons simplement. Comme vous pouvez le voir ici, les variables locales appelées k et j sont accessibles
pour la fonction telles qu'elles sont définies dans
la fonction conteneur. Et ce que nous aimerions
faire , c'est créer une fonction
générique. Donc vide la fonction générique. Et nous aurons la
valeur avec la valeur X. Et passons à celle-ci. Et nous aurions les cônes
sur la droite est égal à celui-ci comme le précédent. Et nous appellerons cette fonction. Neuf, 11 que si vous l'exécutez, la valeur de x est 11. Les fonctions génériques combinent le
type, la sécurité et l'efficacité. Et ils sont souvent
utilisés avec des collections et des méthodes
qui les utilisent. Et nous pouvons également référencer
le paramètre externe dans la fonction
locale
déclarée dans la même portée. Ainsi, par exemple, nous
pourrions créer le void my string x out string S. Et S est égal au signe dollar. C'est celui-là. Et maintenant, nous aurions le message de
chaîne égal à null. Et nous aurions le message My
out 12 and out, l'appel de fonction,
et utiliserions simplement la console ce message de ligne
droite. Maintenant, nous l'exécutons. Vous pouvez voir que la
valeur de x est 12e. L'atmosphère est variable, capture le message et
fonctionne en tandem avec la chaîne comme argument
de la fonction. Et nous pourrions
aussi utiliser le mot-clé params void, my forearms, firearms in array. Et des cônes. J'ai la ligne lumineuse. Et ici, nous pouvons dire que le numéro provient de la canalisation. Et nous aurions un élément. Et pour chaque élément du tableau. De cette façon, notre
boucle for a l'air bien. Et nous aurions le test, qui est un nouveau tableau d'entiers
ayant le 123456789. Et maintenant, nous pouvons utiliser le
bas hier. Et on y va. En gros,
voici comment vous pouvez utiliser les fonctions locales dans C-Sharp. On se voit dans le prochain.
31. Accesseurs d'événement personnalisés avancés C #: Bonjour et bon retour. Dans cette vidéo, nous allons
voir comment
créer des
accesseurs d'événements personnalisés dans C-Sharp. Donc, afin de comprendre l'axe des événements
clients, nous devons
clarifier pourquoi ils sont nécessaires et les cas d'utilisation. Nous présenterons ici le concept d'événements
et examinerons les événements et les accessoires qui peuvent être utilisés pour
interagir entre les classes. Et quels sont les événements. Prenons donc un exemple vivant. Nous avons une interface
utilisateur graphique qui comprend des boutons, du texte, des zones, des étiquettes, etc. Chaque composant est
composé de sa propre classe. Chaque classe fournit des
fonctionnalités. Par exemple, vous pouvez
saisir du texte dans la zone de texte, cliquer sur un bouton, etc. Et nous classons les cours par éditeurs
ou par abonnés. L'éditeur est une classe qui envoie ou déclenche les événements. Et l'abonné est
celui qui a reçu le, reçoit l'événement en
fonction de ses actions spécifiques. Il y a donc quelques
règles pour les événements. L'éditeur détermine
quand un événement est déclenché, l'abonné détermine
quelle action est entreprise lorsqu' un événement spécifique
auquel il est abonné est déclenché. événements avec nos abonnés ne
sont jamais augmentés. Et les événements sont déclenchés principalement
en raison d'interactions utilisateur ce soit sur une application Web ou
une interface utilisateur graphique. Par défaut, l'événement a plusieurs abonnés et
lui permet de gérer les gestionnaires appelés de manière synchrone
sauf s'ils sont définis manière
asynchrone asynchrone. Les événements sont basés
sur le gestionnaire d'événements, délégué et la classe de base
des journaux d'événements. Pour créer un événement, nous devons créer un
délégué qui conserve les détails des
abonnés à un événement et créer un
événement public
visible de l'extérieur par une classe et utilisé
pour créer abonnements. Ensuite, nous créons la méthode dans une classe qui
déclenchera l'événement lui-même. Par exemple, nous allons
procéder comme suit. Appelons cette
classe publique une machine. Et cette
machine de classe publique est supposée
avoir quelque chose appelé
private int utilization, qui va être 0,
private int safe utilization, qui sera niveau
d'utilisation sous lequel la machine peut être utilisée
en toute sécurité. Et nous aurons un délégué
public. Void stress limit x
c did event handler, qui aura la
source de l'objet et les arguments d'événement E. Et nous aurons un gestionnaire public de
dépassement de limite de stress d'
événement . Nous aurons un public que
nous éviterons du stress. Niveau. C a fait des arguments d'événement E. Et fondamentalement, ce que
nous aimerions
faire est que la limite de stress
dépasse le point d'interrogation. Invoquer. Ce E. Amenons-le ici
pour qu'il soit plus visible. Et nous aurons un int public, quatre mois, qui
aura le getter. Et cela retournera l'utilisation. Et nous aurons
le vide statique. La machine. Stress
limitera x c did object, source event args e. Et nous aimerions
avoir la machine, qui est égale à la source de la
machine. Les uns. C'est bon, Line. Avertissement de niveau de stress. Vous aimeriez que le Mac soit à
la fois mauvais pendant des mois et
que la personne signe. Maintenant, ce que nous pouvons faire est de créer le
test de résistance public void, int utilisation. Et maintenant, nous aimerions, j'ai l'ancienne utilisation égale à souligner l'utilisation. Et
l'utilisation
soulignée devrait être augmentée avec
la nouvelle utilisation. Et si l'ancienne utilisation est inférieure
à égale pour économiser l'utilisation et que l'utilisation est
supérieure à l'utilisation sûre. Ensuite, nous pouvons appeler le niveau de
stress dépassé les nouveaux chiens. D'accord, en gros,
ce
sera le test de résistance
pour notre classe. Et dans notre fonction principale. Ce que nous pouvons faire, c'est
créer une nouvelle machine. Et nous pouvons ajouter un nouveau
gestionnaire d'événements de limite de contrainte à la machine. Limite de stress. Viens. Z l'a fait. Et nous aimerions
utiliser les poèmes sur ligne droite pour dire
que l'utilisation est, il cette ligne droite pour dire
que l'utilisation est, il s'agira
d'une machine à cordes F qui forme mal des ions
avec un signe pour cent. Et nous pouvons utiliser la machine. Ce test de résistance. Disons que ça
va faire 60 ans. Nous écrirons
l'utilisation, puis créerons un autre
test de résistance pour le cinquième. Et faisons le 75 et utilisons les forums ou acceptons d'
attendre l'invite. Maintenant, si nous exécutons cet exemple, vous pouvez voir que l'utilisation
ne changera pas. Je veux dire, cela va changer, mais une fois que nous avons dépassé
l'utilisation, nous recevons l'avertissement pour
que l'événement personnalisé soit déclenché. Il s'agissait donc d'un exemple qui vous montre
comment écrire vos
accesseurs d'événements personnalisés dans C-Sharp. On se voit dans le prochain.
32. Conversions définies par l'utilisateur avancé C #: Bonjour et bon retour. Dans cette vidéo, nous allons
parler de la façon dont vous pouvez écrire des
conversions personnalisées définies par l'utilisateur dans C-Sharp. Il n'y a plus ces
conversions en C-Sharp ou tous les jours de piétons
pour la plupart des développeurs. Et nous l'utilisons pour vérifier que les
entrées ont bien défié le flux de travail de notre application. Il s'agit de conversions intégrées, conversions intégrées
et de fonctionnalités de prise en charge dans C Sharp qui
vous permettent de maintenir flexibilité et
la cohérence dans l'ensemble votre application par défaut, il existe deux principaux
types de conversion. L'un s'appelle x plus c, l'autre est implicite. C-sharp vous permet
également de
définir vos propres conversions. Jetons un coup d'œil aux conversions
explicites. Donc, par exemple, nous
avons un Pi flottant, qui est trois pour F. Et
nous avons un double B pi, qui va être par. Et nous pouvons utiliser la ligne droite de la
console, l'impression par d pi. Jetons un coup d'œil à la sortie. Comme vous pouvez le voir, dans le premier cas, nous avons les trois
points 14 comme valeur. Et le troisième. Le second cas est un
peu plus long. Donc, en gros, ce que nous voyons, c'est comment float
est converti en double. C'est la différence
entre la précision. C'est pourquoi nous voyons
des valeurs différentes. Et ce que nous pouvons également
faire, c'est d'aller l'
avant et d'appeler
cela E pi, d Pi. Et ici, nous disons simplement que nous voulons avoir une valeur double. Et ça va
être les trois qui ont 14 ans. Et nous aimerions en créer
une version flottante. Et F DEP. Ce que nous aimerions
faire, c'est utiliser le float sur d, d, p, y. Et maintenant nous pouvons écrire
ces valeurs. Exécutons notre exemple. Comme vous pouvez le constater, nous avons utilisé la conversion
explicite pour créer les nouvelles valeurs. Nous pouvons maintenant
examiner comment vous pouvez définir vos propres conversions
personnalisées. Par exemple, nous avons la classe publique
appelée conversions. Et nous avons le type personnalisé
de classe publique. Et celui-ci aura un numéro public int avec
son getter et son setter. Le public bool, magic,
getter et setter. Et nous aurons un opérateur int
statique, valeur int de type
personnalisé. Dans cette fonction,
nous aimerions renvoyer un nouveau type personnalisé avec
le nombre égal à la valeur. Et la magie, c'était faux. Et cet opérateur booléen public, désolé, n. Après cela, nous pouvons définir notre opérateur à
puces X public statique, int, custom type, magic. Et nous aimerions revenir
du chiffre magique. Très bien, maintenant nous
avons notre propre classe et nous pouvons créer un entier
qui s'appelle un nombre. Et il
aura la valeur trois. Après cela, nous pouvons créer un type magique personnalisé
égal à un nombre. Et nous pouvons utiliser la ligne droite de la console
pour imprimer à partir de int un nombre en magic avec la valeur magic number. Et si nous fermons cette
ligne et que nous l'exécutons, vous pouvez voir que nous avons
converti le nombre entier trois en une
conversion définie par l'utilisateur, qui a la valeur trois. Techniquement
, c'est ainsi que vous pouvez créer vos propres
conversions personnalisées définies par l'utilisateur dans C-Sharp. voit la prochaine fois.
33. C # a avancé la fin: Bienvenue. Voici ma dernière
vidéo de cette série. Dans cette série, vous avez appris de nombreuses
techniques utiles dans C-Sharp, comment vous pouvez améliorer
votre application, comment vous pouvez implémenter
des fonctionnalités
avancées qui vous permettront de créer
des applications. Nous avons vu à travers de
nombreux exemples comment vous pouvez utiliser
tout l'arsenal que C-sharp a à
vous fournir afin de rendre vos programmes ou applications
plus efficaces. Et tous ces exemples
seront téléchargés dans un dépôt GitHub que vous
pourrez cloner et reproduire les exemples que vous voyez dans les vidéos. Rendez-vous dans le prochain. Et j'espère que cela vous a été
instructif. Et je tiens à
vous remercier de m'avoir regardée. Au revoir.