Partage via


Tutoriel : Créer des types en C#

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 :

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.

  1. Lorsque votre espace de code est chargé, créez un fichier dans le dossier didacticiels nommé tuples.cs.

  2. Ouvrez votre nouveau fichier.

  3. 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}.");
    
  4. Exécutez votre programme en tapant les commandes suivantes dans la fenêtre de terminal intégrée :

    cd tutorials
    dotnet tuples.cs
    

    Les 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#.

  5. 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}.");
    
  6. 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 tapez dotnet tuples.cs dans 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 pt2 contient la X valeur ( pt 6) et pt2.Y est 10. Les tuples sont des types structurels. En d’autres termes, les types tuples n’ont pas de noms comme string ou int. 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.

  7. 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);
    
  8. Essayez-le en tapant dotnet tuples.cs dans la fenêtre de terminal. La variable subscript a deux membres, dont les deux sont des entiers. Les deux subscript et pt représentent les instances du même type de tuple : un tuple contenant deux int membres.

    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.

  9. 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);
    
  10. 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.

  1. Ajoutez le code suivant pour déclarer et utiliser un record type pour représenter un Point:

    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 record doivent suivre les instructions exécutables dans une application fichier.

  2. Ajoutez le code suivant précédant la record déclaration :

    Point pt3 = new Point(1, 1);
    var pt4 = pt3 with { Y = 10 };
    Console.WriteLine($"The two points are {pt3} and {pt4}");
    

    La record déclaration est une seule ligne de code pour le Point type qui stocke les valeurs X et Y dans les propriétés en lecture seule. Vous utilisez le nom Point partout où vous employez ce type. Les types correctement nommés, tels que Point, fournissent des informations sur la façon dont le type est utilisé. Le code supplémentaire montre comment utiliser une with expression pour créer un point qui est une copie modifiée du point existant. La ligne pt4 = pt3 with { Y = 10 } indique «pt4 a les mêmes valeurs que pt3, à l'exception de Y qui est affecté à 10». Vous pouvez ajouter n'importe quel nombre de propriétés à modifier dans une seule expression with.

    La déclaration précédente record est une seule ligne de code qui se termine par ;. Vous pouvez ajouter un comportement à un type record en 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.

  3. Supprimez le ; et ajoutez les lignes de code suivantes après la déclaration record.

    {
        public double Slope() => (double)Y / (double)X;
    }
    
  4. Ajoutez le code suivant avant la record déclaration, après la ligne contenant l’expression with :

    double slopeResult = pt4.Slope();
    Console.WriteLine($"The slope of {pt4} is {slopeResult}");
    
  5. Tapez dotnet tuples.cs dans la fenêtre de terminal pour exécuter cette version.

    Vous avez ajouté de la formalité au tuple représentant une valeur X et une valeur Y. Vous l’avez défini record comme un type nommé et inclus un membre permettant de calculer la pente. Un type record est une abréviation pour un type record class : un type class qui inclut un comportement supplémentaire.

  6. Vous pouvez également modifier le Point type pour le rendre ainsi record struct :

    public record struct Point(int X, int Y)
    

    Un record struct est un type de struct qui inclut le comportement supplémentaire ajouté à tous les types de record.

  7. Essayez cette version en tapant dotnet tuples.cs dans 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.

Étape suivante