Partager via


Vue d’ensemble des techniques orientées objet 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 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 :

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.