Constructeurs (Guide de programmation C#)

Chaque fois qu’une instance de classe ou qu’un struct est créé, son constructeur est appelé. Une classe ou un struct peut avoir plusieurs constructeurs qui prennent des arguments différents. Les constructeurs permettent au programmeur de définir des valeurs par défaut, de limiter l’instanciation et d’écrire un code flexible et facile à lire. Pour obtenir plus d’informations et d’exemples, consultez Constructeurs d’instances et Utilisation de constructeurs.

Plusieurs actions font partie de l’initialisation d’une nouvelle instance. Ces actions ont lieu dans l’ordre suivant :

  1. Les champs d’instance sont définis sur 0. Cela est généralement effectué par le runtime.
  2. Les initialiseurs de champs s’exécutent. Initialiseurs de champs dans l’exécution de type le plus dérivé.
  3. Les initialiseurs de champs de type de base s’exécutent. Initialiseurs de champs commençant par la base directe via chaque type de base vers System.Object.
  4. Les constructeurs d’instances de base s’exécutent. Tous les constructeurs d’instances, en commençant par Object.Object via chaque classe de base vers la classe de base directe.
  5. Le constructeur d’instance s’exécute. Le constructeur d’instance pour le type s’exécute.
  6. Les initialiseurs d’objets s’exécutent. Si l’expression inclut des initialiseurs d’objets, ceux-ci s’exécutent après l’exécution du constructeur d’instance. Les initialiseurs d’objets s’exécutent dans l’ordre textuel.

Les actions précédentes se produisent lorsqu’une nouvelle instance est initialisée. Si une nouvelle instance de struct est définie sur sa valeur default, tous les champs d’instance sont définis sur 0.

Si le constructeur statique n’a pas été exécuté, le constructeur statique s’exécute avant l’une des actions du constructeur d’instance.

Syntaxe du constructeur

Un constructeur est une méthode dont le nom est le même que celui de son type. Sa signature de méthode inclut uniquement un modificateur d’accès facultatif, le nom de la méthode et sa liste de paramètres ; elle n’inclut pas de type de retour. L’exemple suivant affiche le constructeur d’une classe nommée Person.

public class Person
{
   private string last;
   private string first;

   public Person(string lastName, string firstName)
   {
      last = lastName;
      first = firstName;
   }

   // Remaining implementation of Person class.
}

Si un constructeur peut être implémenté comme une seule instruction, vous pouvez utiliser une définition de corps d’expression. L’exemple suivant définit une classe Location dont le constructeur a un seul paramètre de chaîne nommé name. La définition de corps d’expression assigne l’argument au champ locationName.

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

Constructeurs statiques

Les exemples précédents ont tous montré des constructeurs d’instances qui permettent de créer un objet. Une classe ou un struct peut également avoir un constructeur statique qui initialise les membres statiques du type. Les constructeurs statiques sont sans paramètre. Si vous ne fournissez pas de constructeur statique pour initialiser les champs statiques, le compilateur C# initialise tous les champs statiques vers leur valeur par défaut telle que répertoriée dans l’article Valeurs par défaut des types C#.

L’exemple suivant utilise un constructeur statique pour initialiser un champ statique.

public class Adult : Person
{
   private static int minimumAge;

   public Adult(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Adult()
   {
      minimumAge = 18;
   }

   // Remaining implementation of Adult class.
}

Vous pouvez également définir un constructeur statique avec une définition de corps d’expression, comme l’illustre l’exemple suivant.

public class Child : Person
{
   private static int maximumAge;

   public Child(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Child() => maximumAge = 18;

   // Remaining implementation of Child class.
}

Pour obtenir plus d’informations et d’exemples, consultez Constructeurs statiques.

Dans cette section

Voir aussi