Techniques de programmation avancées C # | Dániel Ernő Szabó | Skillshare

Vitesse de lecture


1.0x


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

Techniques de programmation avancées C #

teacher avatar Dániel Ernő Szabó, Pythonista in the making

Regardez ce cours et des milliers d'autres

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

Regardez ce cours et des milliers d'autres

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

Leçons de ce cours

    • 1.

      Introduction avancée C #

      0:47

    • 2.

      C # a avancé le programme d'installation

      1:32

    • 3.

      C # Advanced Logical and Bitwise

      7:05

    • 4.

      C # Advanced Const vs Read only

      6:18

    • 5.

      Portée et visibilité avancées C #

      8:29

    • 6.

      C # Advanced Unsafe

      8:02

    • 7.

      Collections génériques avancées C #

      10:21

    • 8.

      C # Advanced Explicit vs Implicit Conversions

      6:50

    • 9.

      Fonctions cordées d'expression avancée C #

      7:50

    • 10.

      Préférence d'opérateur avancé C #

      3:01

    • 11.

      Points d'entrée et de sortie de la méthode avancée C #

      4:14

    • 12.

      Contraintes de paramètres génériques avancés C #

      8:04

    • 13.

      Types de génériques ouverts et fermés C # Advanced

      7:48

    • 14.

      Paramètres et déjà : C # Advanced Out

      7:47

    • 15.

      Directives de préprocesseur avancée C #

      8:29

    • 16.

      Indices de surcharge avancés C #

      13:23

    • 17.

      attributs prédéfinis C # Advanced Common

      14:05

    • 18.

      C # Advanced Lire seulement les autoproperties

      6:16

    • 19.

      Syntaxe avancée C # pour les littéraux

      7:20

    • 20.

      C # Advanced Returning ne lire que des références provenant des fonctions

      9:18

    • 21.

      Méthode avancée C # sans nom

      8:52

    • 22.

      LINQ avancé C #

      8:54

    • 23.

      Interpolation à cordes avancée C #

      7:19

    • 24.

      C # Advanced Value et assignation de type de référence

      10:41

    • 25.

      Opérateur de propagation de Null avancé C #

      6:14

    • 26.

      Expressions de Clojures et de lambda avancés C #

      7:57

    • 27.

      C # Advanced Foreach et les énumérateurs

      6:52

    • 28.

      Les membres de C # Advanced Static vs les membres d'instance

      7:40

    • 29.

      Inférence de type avancé C #

      7:00

    • 30.

      Fonctions locales avancées C #

      9:02

    • 31.

      Accesseurs d'événement personnalisés avancés C #

      9:16

    • 32.

      Conversions définies par l'utilisateur avancé C #

      6:22

    • 33.

      C # a avancé la fin

      1:05

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

Généré par la communauté

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

58

apprenants

--

projets

À propos de ce cours

Bienvenue,

C'est la suite de mon précédent cours C # où des techiniques de programmation plus avancés sont discutés et montrés comment utiliser le langage.

Le langage de programmation C # a été conçu par Anders Hejlsberg de Microsoft en 2000. Il a ensuite été approuvé comme norme internationale par Ecma (ECMA-334) en 2002 et ISO/IEC
(ISO/IEC 23270) en 2003. Microsoft a présenté C # avec . NET Framework et Visual Studio, tous deux fermés à source.
À l'époque, Microsoft n'avait pas de produits open-source. Quatre ans plus tard, en 2004, un projet libre et open-source appelé Mono a commencé,
fournissant un compilateur multi-plateformes et un environnement d'exécution pour le langage de programmation C #.
Une décennie plus tard, Microsoft a publié Visual Studio Code (éditeur de code), Roslyn (compilateur) et A Plateforme NET (cadre logiciel), qui supportent
tous C # et sont libres, open-source et cross-plateforme. Mono a également rejoint Microsoft mais n'a pas été fusionné. NET.As de 2021, la version la plus récente du langage est C #

10.0, qui a été publié en 2021 dans . NET 6.0.

Ce cours va consolider les connaissances pour vous permettre de créer vos propres applications C # avec facilité.

Happy Coding !

Rencontrez votre enseignant·e

Teacher Profile Image

Dániel Ernő Szabó

Pythonista in the making

Enseignant·e

Hello, I'm Dániel Ernő.

I currently work as a devops engineer. I have several years of experience with various platforms and I'm here to teach some advanced techniques which may attribute your job security ;)

Cheers,

Daniel

Voir le profil complet

Level: Beginner

Notes attribuées au cours

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

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

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

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

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

Transcription

1. 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.