Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 essentiellement un bloc de mémoire alloué et configuré en fonction du blueprint. 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 appelée premier pilier ou principe de programmation orientée objet. Une classe ou un struct peut spécifier la façon dont chacun de ses membres est accessible pour coder en dehors de la classe ou du struct. Les membres non destinés aux consommateurs en dehors de la classe ou de l’assembly sont masqués 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 pas de variables ou de méthodes globales comme c’est le cas dans certains 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.
- Domaines
- 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é code client. D’autres méthodes et propriétés peuvent uniquement être utilisées dans la classe ou la structure elle-même. Il est important de limiter l’accessibilité de votre code afin que seul le code client prévu puisse y accéder. Vous spécifiez la façon dont vos types et leurs membres sont accessibles au code client à l’aide des modificateurs d’accès suivants :
- public
- protégé
- interne
- protégé interne
- privé
- privé protégé
L’accessibilité par défaut est private
.
Héritage
Les classes (mais pas les structs) prennent en charge le concept d’héritage. Une 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 pas d’implémentation. Bien que les classes abstraites ne puissent pas être instanciées directement, elles peuvent servir de classes de base pour 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 de ces classes.
Pour plus d’informations, consultez 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 de l’espace System.Collections.Generic de noms est définie avec un paramètre de type. Le code client crée une instance d’un List<string>
ou List<int>
pour spécifier le type que la liste contient. Pour plus d’informations, consultez Génériques.
Types statiques
Les classes (mais pas les structs ou enregistrements) peuvent être déclarées en tant que 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 lorsque le programme se charge, et ses membres sont accessibles via le 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, d’un struct ou d’une méthode dans un fichier de code et une autre partie dans un fichier de code distinct. Pour plus d’informations, consultez 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’objet.
Types anonymes
Dans les situations où il n'est pas pratique ou nécessaire de créer une classe nommée, vous utilisez des types anonymes. Les membres de données nommés définissent des types anonymes. Pour plus d’informations, consultez Types anonymes.
Membres 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 appartenaient 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
Vous pouvez ajouter le record
modificateur à une classe ou à un struct. Les enregistrements sont des types avec un comportement intégré pour l’égalité basée sur la valeur. Un enregistrement (soit 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 si elles font référence au même objet.
- Syntaxe concise pour la mutation nonstructive.
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 types de données enregistrement. 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.