class / struct

Références

L'actualité

Librairie

L'information

class


Types référence

Un type défini comme class est un type référence. Au moment de l'exécution, quand vous déclarez une variable de type référence, celle-ci contient la valeur null tant que vous n'avez pas explicitement créé une instance de la classe à l'aide de l'opérateur new, ou que vous ne lui avez pas assigné un objet existant d'un type compatible, comme indiqué dans l'exemple suivant :

Quand l'objet est créé, une quantité de mémoire suffisante est allouée sur le tas managé de l'objet spécifié, et la variable contient uniquement une référence à l'emplacement de cet objet. Les types sur le tas managé entraînent une surcharge quand ils sont alloués et récupérés par la fonctionnalité de gestion automatique de la mémoire du CLR (appelée garbage collector). Toutefois, le garbage collector est également optimisé et, dans la plupart des cas, ne nuit pas aux performances.

Déclaration de classes

Les classes sont déclarées à l'aide du mot clé class suivi d'un identificateur unique, comme l'illustre l'exemple suivant :

Le mot clé class est précédé du niveau d'accès. Comme public est utilisé dans ce cas, n'importe qui peut créer des instances de cette classe. Le nom de la classe suit le mot clé class. Le nom de la classe doit être un nom d'identificateur C# valide. Le reste de la définition est le corps de la classe, où le comportement et les données sont définis. Les champs, propriétés, méthodes et événements d'une classe sont désignés collectivement par le terme "membres de classe".

Création d'objets

Bien qu'ils soient parfois employés indifféremment, une classe et un objet sont deux choses différentes. Une classe définit un type d'objet, mais il ne s'agit pas d'un objet en soi. Un objet, qui est une entité concrète basée sur une classe, est parfois désigné par le terme "instance de classe".

Vous pouvez créer des objets en utilisant le mot clé new suivi du nom de la classe sur laquelle l'objet est basé, comme suit :

Quand une instance d'une classe est créée, une référence à l'objet est repassée au programmeur. Dans l'exemple précédent, object1 est une référence à un objet basé sur Customer. Cette référence fait référence au nouvel objet, mais elle ne contient pas ses données. En fait, vous pouvez créer une référence d'objet sans créer d'objet :

Nous vous déconseillons de créer des références d'objet comme celle-ci, sans référence à un objet, car toute tentative d'accès à un objet à l'aide d'une telle référence échoue au moment de l'exécution. Vous pouvez toutefois créer une telle référence pour faire référence à un objet : soit en créant un objet, soit en l'assignant à un objet existant, comme suit :

Ce code crée deux références d'objet qui font toutes deux référence au même objet. Toute modification apportée à l'objet par le biais de object3 est donc reflétée dans les utilisations suivantes de object4. Les objets qui sont basés sur des classes étant désignés par référence, les classes sont appelées des "types référence".

Héritage de classe

Les classes prennent entièrement en charge l'héritage, caractéristique fondamentale de la programmation orientée objet. Quand vous créez une classe, vous pouvez hériter de toute autre interface ou classe qui n'est pas définie comme sealed, et d'autres classes peuvent hériter de votre classe et substituer des méthodes virtuelles de la classe.

L'héritage se fait par le biais d'une dérivation, ce qui signifie qu'une classe est déclarée à l'aide d'une classe de base dont elle hérite les données et le comportement. Pour spécifier une classe de base, ajoutez deux-points et le nom de la classe de base après le nom de la classe dérivée, comme suit :

Quand une classe déclare une classe de base, elle hérite de tous les membres de la classe de base à l'exception des constructeurs.

Contrairement à C++, une classe en C# ne peut hériter directement que d'une classe de base. Toutefois, une classe de base pouvant elle-même hériter d'une autre classe, une classe peut hériter indirectement de plusieurs classes de base. En outre, une classe peut implémenter directement plusieurs interfaces.

Une classe peut être déclarée abstract. Une classe abstraite contient des méthodes abstraites qui ont une définition de signature, mais aucune implémentation. Les classes abstraites ne peuvent pas être instanciées. Elles peuvent être utilisées uniquement à travers des classes dérivées qui implémentent les méthodes abstraites. En revanche, une classe sealed ne permet pas à d'autres classes de dériver d'elle.

Les définitions de classe peuvent être fractionnées entre différents fichiers sources.

Exemple

L'exemple suivant définit une classe publique qui contient une propriété implémentée automatiquement, une méthode et une méthode spéciale appelée un constructeur. Les instances de la classe sont ensuite instanciées à l'aide du mot clé new.