Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce tutoriel vous apprend à créer des types en C#. Vous écrivez de petites quantités de code, puis vous compilez et exécutez ce code. Le tutoriel contient une série de leçons qui explorent différents types de types en C#. Ces leçons vous enseignent les principes fondamentaux de la langue C#.
Les didacticiels précédents ont fonctionné avec du texte et des nombres. Les chaînes et les nombres sont des types simples : ils stockent chacun une valeur unique. À mesure que vos programmes augmentent, vous devez travailler avec des structures de données plus sophistiquées. C# fournit différents types de types que vous pouvez définir lorsque vous avez besoin de structures de données avec plus de champs, de propriétés ou de comportement. Commençons à explorer ces types.
Dans ce tutoriel, vous allez :
- Créez et manipulez des types de tuples.
- Créez des types d’enregistrements.
- Découvrez les types de struct, de classe et d’interface.
Prerequisites
Vous devez disposer de l’un des éléments suivants :
- Un compte GitHub pour utiliser GitHub Codespaces. Si vous n’en avez pas encore, vous pouvez créer un compte gratuit à GitHub.com.
- Un ordinateur avec les outils suivants installés :
Pour utiliser des espaces de code, vous avez besoin d’un compte GitHub. Si vous n’en avez pas encore, vous pouvez créer un compte gratuit à GitHub.com.
Tuples
Pour démarrer un Espace de code GitHub avec l’environnement du didacticiel, ouvrez une fenêtre de navigateur dans le référentiel codespace du didacticiel . Sélectionnez le bouton Code vert et l’onglet Espaces de code . Sélectionnez ensuite le + signe pour créer un espace de code à l’aide de cet environnement. Si vous avez terminé d’autres didacticiels de cette série, vous pouvez ouvrir cet espace de code au lieu de en créer un nouveau.
Lorsque votre espace de code est chargé, créez un fichier dans le dossier didacticiels nommé tuples.cs.
Ouvrez votre nouveau fichier.
Tapez ou copiez le code suivant dans tuples.cs :
var pt = (X: 1, Y: 2); var slope = (double)pt.Y / (double)pt.X; Console.WriteLine($"A line from the origin to the point {pt} has a slope of {slope}.");Exécutez votre programme en tapant les commandes suivantes dans la fenêtre de terminal intégrée :
cd tutorials dotnet tuples.csLes tuples sont une séquence ordonnée de valeurs avec une longueur fixe. Chaque élément d’un tuple a un type et un nom facultatif.
Conseil / Astuce
Lorsque vous explorez C# (ou tout langage de programmation), vous faites des erreurs lorsque vous écrivez du code. Le compilateur trouve ces erreurs et les signale à vous. Lorsque la sortie contient des messages d’erreur, examinez attentivement l’exemple de code et votre code pour voir ce qu’il faut corriger. Vous pouvez également demander à Copilot de trouver des différences ou de repérer les erreurs. Cet exercice vous aide à apprendre la structure du code C#.
Ajoutez le code suivant après le code précédent pour modifier un élément de tuple :
pt.X = pt.X + 5; Console.WriteLine($"The point is now at {pt}.");Vous pouvez également créer un nouveau tuple qui est une copie modifiée de l’original en utilisant une expression
with. Ajoutez le code suivant après le code existant et tapezdotnet tuples.csdans la fenêtre de terminal pour afficher les résultats :var pt2 = pt with { Y = 10 }; Console.WriteLine($"The point 'pt2' is at {pt2}.");Le tuple
pt2contient laXvaleur (pt6) etpt2.Yest 10. Les tuples sont des types structurels. En d’autres termes, les types tuples n’ont pas de noms commestringouint. Un type de tuple est défini par le nombre de membres, appelé arité, et les types de ces membres. Les noms des membres sont pratiques. Vous pouvez assigner un tuple à un tuple de même arité et de même type, même si les membres ont des noms différents.Vous pouvez ajouter le code suivant après le code que vous avez déjà écrit :
var subscript = (A: 0, B: 0); subscript = pt; Console.WriteLine(subscript);Essayez-le en tapant
dotnet tuples.csdans la fenêtre de terminal. La variablesubscripta deux membres, dont les deux sont des entiers. Les deuxsubscriptetptreprésentent les instances du même type de tuple : un tuple contenant deuxintmembres.Les tuples sont faciles à créer : vous déclarez plusieurs membres entre parenthèses. Toutes les déclarations suivantes définissent des tuples ayant des arités et des types de membres variés.
Ajoutez le code suivant pour créer de nouveaux types de tuples :
var namedData = (Name: "Morning observation", Temp: 17, Wind: 4); var person = (FirstName: "", LastName: ""); var order = (Product: "guitar picks", style: "triangle", quantity: 500, UnitPrice: 0.10m);Essayez cette modification en tapant
dotnet tuples.csà nouveau dans la fenêtre de terminal.
Bien que les tuples soient faciles à créer, ils sont limités dans leurs fonctionnalités. Les types tuples n’ont pas de noms. Vous ne pouvez donc pas transmettre de signification à l’ensemble de valeurs. Les types de tuple ne peuvent pas ajouter de comportement. C# a d’autres types de types que vous pouvez créer lorsque votre type définit le comportement.
Créer des types d’enregistrements
Les tuples sont parfaits pour les cas où vous avez besoin de plusieurs valeurs dans la même structure. Ils sont légers et vous pouvez les déclarer à mesure que vous les utilisez. À mesure que votre programme se développe, vous pouvez constater que vous utilisez le même type de tuple dans tout votre code. Si votre application fonctionne dans l’espace de graphique 2D, les tuples qui représentent des points peuvent être courants. Lorsque vous trouvez ce modèle, vous pouvez déclarer un record type qui stocke ces valeurs et fournit plus de fonctionnalités.
Ajoutez le code suivant pour déclarer et utiliser un
recordtype pour représenter unPoint:public record Point(int X, int Y);Le code précédent doit se trouver en bas de votre fichier source. Les déclarations de type telles que
recorddoivent suivre les instructions exécutables dans une application fichier.Ajoutez le code suivant précédant la
recorddéclaration :Point pt3 = new Point(1, 1); var pt4 = pt3 with { Y = 10 }; Console.WriteLine($"The two points are {pt3} and {pt4}");La
recorddéclaration est une seule ligne de code pour lePointtype qui stocke les valeursXetYdans les propriétés en lecture seule. Vous utilisez le nomPointpartout où vous employez ce type. Les types correctement nommés, tels quePoint, fournissent des informations sur la façon dont le type est utilisé. Le code supplémentaire montre comment utiliser unewithexpression pour créer un point qui est une copie modifiée du point existant. La lignept4 = pt3 with { Y = 10 }indique «pt4a les mêmes valeurs quept3, à l'exception deYqui est affecté à 10». Vous pouvez ajouter n'importe quel nombre de propriétés à modifier dans une seule expressionwith.La déclaration précédente
recordest une seule ligne de code qui se termine par;. Vous pouvez ajouter un comportement à un typerecorden déclarant des membres. Un membre d’enregistrement peut être une fonction ou plusieurs éléments de données. Les membres d’un type se trouvent dans la déclaration de type, entre{et}caractères.Supprimez le
;et ajoutez les lignes de code suivantes après la déclarationrecord.{ public double Slope() => (double)Y / (double)X; }Ajoutez le code suivant avant la
recorddéclaration, après la ligne contenant l’expressionwith:double slopeResult = pt4.Slope(); Console.WriteLine($"The slope of {pt4} is {slopeResult}");Tapez
dotnet tuples.csdans la fenêtre de terminal pour exécuter cette version.Vous avez ajouté de la formalité au tuple représentant une valeur
Xet une valeurY. Vous l’avez définirecordcomme un type nommé et inclus un membre permettant de calculer la pente. Un typerecordest une abréviation pour un typerecord class: un typeclassqui inclut un comportement supplémentaire.Vous pouvez également modifier le
Pointtype pour le rendre ainsirecord struct:public record struct Point(int X, int Y)Un
record structest un type destructqui inclut le comportement supplémentaire ajouté à tous les types derecord.Essayez cette version en tapant
dotnet tuples.csdans la fenêtre de terminal.
Struct, classe et types d’interface
Tous les types concrets nommés en C# sont soit de type class, soit de type struct, y compris les types record. A class est un type de référence. Un struct est un type de valeur. Les variables d’un type valeur stockent le contenu de l’instance inline en mémoire. En d’autres termes, un record struct Point stocke deux entiers : X et Y. Les variables d’un type référence stockent une référence ou un pointeur vers le stockage de l’instance. En d'autres termes, un(e) record class Point stocke une référence à un bloc de mémoire qui contient les valeurs de X et Y.
Dans la pratique, cela signifie que les types valeur sont copiés lorsqu’ils sont attribués, mais qu’une copie d’une instance de classe est une copie de la référence. Cette référence copiée fait référence à la même instance d’un point, avec le même stockage pour X et Y.
Le modificateur record demande au compilateur d'écrire plusieurs membres pour vous. Vous pouvez en savoir plus dans l’article sur les types d’enregistrements dans la section notions de base.
Lorsque vous déclarez un record type, vous déclarez que votre type doit utiliser un ensemble de comportements par défaut pour les comparaisons d’égalité, l’affectation et la copie d’instances de ce type. Les enregistrements sont le meilleur choix lorsque le stockage de données connexes est la principale responsabilité de votre type. Lorsque vous ajoutez d’autres comportements, envisagez d’utiliser struct ou class de types, sans le record modificateur.
Utilisez des struct types pour les types valeur lorsque vous avez besoin d’un comportement plus sophistiqué, mais la responsabilité principale consiste à stocker des valeurs. Utilisez class des types pour utiliser des idiomes orientés objet comme l’encapsulation, l’héritage et le polymorphisme.
Vous pouvez également définir des interface types pour déclarer des contrats comportementaux que différents types doivent implémenter. Les types struct et class peuvent implémenter des interfaces.
Vous utilisez généralement tous ces types dans des programmes et bibliothèques plus volumineux. Une fois que vous avez installé le Kit de développement logiciel (SDK) .NET, vous pouvez explorer ces types à l’aide de didacticiels sur les classes de la section notions de base.
Vous avez terminé le didacticiel « Créer des types en C# ». Vous pouvez en savoir plus sur les types en C# dans les articles suivants :
Nettoyer les ressources
GitHub supprime automatiquement votre Espace de code après 30 jours d’inactivité. Si vous envisagez d’explorer d’autres tutoriels de cette série, vous pouvez laisser votre espace de code provisionné. Si vous êtes prêt à visiter le site .NET pour télécharger le Kit de développement logiciel (SDK) .NET, vous pouvez supprimer votre espace de code. Pour supprimer votre espace de code, ouvrez une fenêtre de navigateur et accédez à vos espaces de code. Vous devez voir une liste de vos espaces de code dans la fenêtre. Sélectionnez les trois points (...) dans l’entrée de l’espace de code du didacticiel Learn, puis sélectionnez Supprimer.