Vue d’ensemble des classes, des structs et des enregistrements en C #

En C#, la définition d’un type ( une classe, un struct ou un enregistrement) est semblable à un blueprint qui spécifie ce que le type peut faire. Un objet est fondamentalement un bloc de mémoire qui a été alloué et configuré selon le plan. Cet article fournit une vue d’ensemble de ces blueprints et de leurs fonctionnalités. L’article suivant de cette série présente des objets.

Encapsulation

L’encapsulation est parfois considérée comme le premier pilier ou principe de la programmation orientée objet. Une classe ou un struct peut spécifier la façon dont chacun de ses membres est accessible au code en dehors de la classe ou du struct. Les méthodes et les variables qui ne sont pas destinées à être utilisées à partir de l’extérieur de la classe ou de l’assembly peuvent être masquées pour limiter le risque d’erreurs de codage ou d’attaques malveillantes. Pour plus d’informations, consultez le didacticiel de programmation orienté objet .

Membres

Les membres d’un type incluent toutes les méthodes, champs, constantes, propriétés et événements. En C#, il n’existe aucune variable ou méthode globale, à la différence d’autres langages. Même le point d’entrée d’un programme, la Main méthode, doit être déclarée dans une classe ou un struct (implicitement lorsque vous utilisez des instructions de niveau supérieur).

La liste suivante inclut tous les différents types de membres qui peuvent être déclarés dans une classe, un struct ou un enregistrement.

  • Champs
  • Constantes
  • Propriétés
  • Méthodes
  • Constructeurs
  • Événements
  • Finaliseurs
  • Indexeurs
  • Opérateurs
  • Types imbriqués

Pour plus d’informations, consultez Membres.

Accessibilité

Certaines méthodes et propriétés sont destinées à être appelées ou accessibles à partir du code en dehors d’une classe ou d’un struct, appelée code client. D’autres méthodes et propriétés peuvent être uniquement utilisables dans la classe ou le struct proprement dits. Il est important de limiter l’accessibilité de votre code afin que seul le code client prévu puisse l’atteindre. Vous spécifiez comment vos types et vos membres sont accessibles au code client à l’aide des modificateurs d’accès suivants :

L’accessibilité par défaut est private.

Héritage

Les classes (mais pas les structs) prennent en charge le concept d'héritage. Classe qui dérive d’une autre classe, appelée classe de base, contient automatiquement tous les membres publics, protégés et internes de la classe de base, à l’exception de ses constructeurs et finaliseurs.

Les classes peuvent être déclarées comme abstraites, ce qui signifie qu’une ou plusieurs de leurs méthodes n’ont aucune implémentation. Bien que les classes abstraites ne puissent pas être instanciées directement, elles peuvent servir de classes de base à d’autres classes qui fournissent l’implémentation manquante. Les classes peuvent également être déclarées comme scellées pour empêcher d’autres classes d’hériter d’elles.

Pour plus d’informations, consultez les pages Héritage et Polymorphisme.

Interfaces

Les classes, les structs et les enregistrements peuvent implémenter plusieurs interfaces. Pour implémenter à partir d’une interface, le type implémente toutes les méthodes définies dans l’interface. Pour plus d'informations, consultez Interfaces.

Types génériques

Les classes, les structs et les enregistrements peuvent être définis avec un ou plusieurs paramètres de type. Le code client fournit le type lorsqu’il crée une instance du type. Par exemple, la List<T> classe dans l’espace System.Collections.Generic de noms est définie avec un paramètre de type. Le code client crée une instance d’une List<string> ou d’une List<int> pour spécifier le type que contiendra la liste. Pour plus d’informations, consultez Génériques.

Types statiques

Les classes (mais pas les structs ou les enregistrements) peuvent être déclarées comme static. Une classe statique ne peut contenir que des membres statiques et ne peut pas être instanciée avec le new mot clé. Une copie de la classe est chargée en mémoire au chargement du programme, et ses membres sont accessibles par le biais du nom de la classe. Les classes, les structs et les enregistrements peuvent contenir des membres statiques. Pour plus d’informations, consultez classes statiques et membres de classes statiques.

Types imbriqués

Une classe, un struct ou un enregistrement peut être imbriqué dans une autre classe, struct ou enregistrement. Pour plus d’informations, consultez Types imbriqués.

Types partiels

Vous pouvez définir une partie d’une classe, un struct ou une méthode dans un fichier de code et une autre partie dans un fichier de code distinct. Pour plus d’informations, consultez la page Classes et méthodes partielles.

Initialiseurs d'objets

Vous pouvez instancier et initialiser des objets de classe ou de struct et des collections d’objets, en affectant des valeurs à ses propriétés. Pour plus d’informations, consultez Comment initialiser des objets à l’aide d’un initialiseur d’objets.

Types anonymes

Dans les situations où il n’est pas pratique ou nécessaire de créer une classe nommée que vous utilisez des types anonymes. Les types anonymes sont définis par leurs membres de données nommés. Pour plus d’informations, consultez Types anonymes.

Méthodes d’extension

Vous pouvez « étendre » une classe sans créer de classe dérivée en créant un type distinct. Ce type contient des méthodes qui peuvent être appelées comme si elles appartiennent au type d’origine. Pour plus d’informations, consultez méthodes d’extension).

Variables locales implicitement typées

Dans une méthode de classe ou de struct, vous pouvez utiliser la saisie implicite pour indiquer au compilateur de déterminer le type d’une variable au moment de la compilation. Pour plus d’informations, consultez var (référence C#).

Enregistrements

C# 9 introduit le record type, un type de référence que vous pouvez créer au lieu d’une classe ou d’un struct. Les enregistrements sont des classes avec un comportement intégré pour encapsuler des données dans des types immuables. C# 10 introduit le record struct type de valeur. Un enregistrement ( record class soit record struct) fournit les fonctionnalités suivantes :

  • Syntaxe concise pour la création d’un type de référence avec des propriétés immuables.
  • Égalité des valeurs. Deux variables d’un type d’enregistrement sont égales si elles ont le même type, et si, pour chaque champ, les valeurs des deux enregistrements sont égales. Les classes utilisent l’égalité de référence : deux variables d’un type de classe sont égales s’ils font référence au même objet.
  • Syntaxe concise pour la mutation non destructeur. Une with expression vous permet de créer une instance d’enregistrement qui est une copie d’une instance existante, mais avec des valeurs de propriété spécifiées modifiées.
  • Mise en forme intégrée pour l’affichage. La ToString méthode imprime le nom du type d’enregistrement et les noms et valeurs des propriétés publiques.
  • Prise en charge des hiérarchies d’héritage dans les classes d’enregistrements. Les classes d’enregistrement prennent en charge l’héritage. Les structs d’enregistrement ne prennent pas en charge l’héritage.

Pour plus d’informations, consultez Enregistrements.

Spécification du langage C#

Pour plus d'informations, voir la spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.