Constructeurs C# : Types, exemples et patterns avancés
Constructeurs C#
Découvrez comment les constructeurs initialisent les objets en C#, couvrant tous les types de constructeurs, patterns et bonnes pratiques.
En C#, un constructeur est une méthode spéciale invoquée automatiquement quand une nouvelle instance d'une classe est créée. Contrairement aux méthodes régulières, les constructeurs :
- partagent le même nom que la classe
- ne retournent pas de valeur
Création d'un constructeur C#
Définissez un constructeur dans une classe en faisant correspondre le nom de la classe :
class Voiture {
// constructeur
Voiture() {
// code d'initialisation
}
}
Ici, Voiture() est le constructeur. Il est invoqué en utilisant le mot-clé new :
new Voiture();
Par exemple :
Voiture voiture1 = new Voiture();
Voir aussi : Classes et objets C#.
Types de constructeurs
Les catégories typiques de constructeurs incluent :
- Constructeur sans paramètre (par défaut)
- Constructeur paramétré
- Constructeur de copie
- Constructeur privé
- Constructeur statique
1. Constructeur sans paramètre
Un constructeur sans paramètres est appelé constructeur sans paramètre ou par défaut. Exemple :
using System;
namespace ConstructorDemo {
class Voiture {
// constructeur sans paramètre
Voiture() {
Console.WriteLine("Constructeur Voiture");
}
static void Main(string[] args) {
new Voiture();
Console.ReadLine();
}
}
}
Sortie
Constructeur Voiture
2. Constructeur paramétré
Les constructeurs peuvent accepter des arguments pour initialiser les champs d'instance :
using System;
namespace ConstructorDemo {
class Voiture {
string marque;
int prix;
// constructeur paramétré
Voiture(string laMarque, int lePrix) {
marque = laMarque;
prix = lePrix;
}
static void Main(string[] args) {
Voiture voiture1 = new Voiture("Bugatti", 50000);
Console.WriteLine("Marque : " + voiture1.marque);
Console.WriteLine("Prix : " + voiture1.prix);
Console.ReadLine();
}
}
}
Sortie
Marque : Bugatti Prix : 50000
3. Constructeur par défaut
Si vous omettez un constructeur, le compilateur fournit un constructeur sans paramètre implicite qui initialise les champs à leurs valeurs par défaut. Exemple :
using System;
namespace ConstructorDemo {
class Program {
int a;
static void Main(string[] args) {
Program p1 = new Program();
Console.WriteLine("Valeur par défaut de a : " + p1.a);
Console.ReadLine();
}
}
}
Sortie
Valeur par défaut de a : 0
Les champs numériques prennent par défaut 0, tandis que les chaînes et objets prennent par défaut null.
4. Constructeur de copie
Un constructeur de copie crée une nouvelle instance en copiant l'état d'un autre objet :
using System;
namespace ConstructorDemo {
class Voiture {
string marque;
// constructeur principal
Voiture(string laMarque) {
marque = laMarque;
}
// constructeur de copie
Voiture(Voiture v1) {
marque = v1.marque;
}
static void Main(string[] args) {
Voiture voiture1 = new Voiture("Bugatti");
Console.WriteLine("Marque de voiture1 : " + voiture1.marque);
Voiture voiture2 = new Voiture(voiture1);
Console.WriteLine("Marque de voiture2 : " + voiture2.marque);
Console.ReadLine();
}
}
}
Sortie
Marque de voiture1 : Bugatti Marque de voiture2 : Bugatti
5. Constructeur privé
Marquer un constructeur private empêche l'instanciation externe, utile pour les patterns singleton ou classes utilitaires.
Exemple
using System;
namespace ConstructorDemo {
class Voiture {
private Voiture() {
Console.WriteLine("Constructeur Privé");
}
}
class VoitureDrive {
static void Main(string[] args) {
// Voiture voiture1 = new Voiture(); // erreur de compilation
Console.ReadLine();
}
}
}
L'erreur :
error CS0122: 'Voiture.Voiture()' est inaccessible en raison de son niveau de protection
Note : Quand un constructeur est privé, tous les membres de la classe devraient être statiques pour permettre l'accès via le nom de la classe.
6. Constructeur statique
Un constructeur statique s'exécute une fois par type, avant qu'aucun membre d'instance ou statique ne soit accédé. Il ne peut pas être appelé directement et ne doit pas avoir de paramètres.
using System;
namespace ConstructorDemo {
class Voiture {
static Voiture() {
Console.WriteLine("Constructeur Statique");
}
Voiture() {
Console.WriteLine("Constructeur Par Défaut");
}
static void Main(string[] args) {
Voiture voiture1 = new Voiture();
Voiture voiture2 = new Voiture();
Console.ReadLine();
}
}
}
Sortie
Constructeur Statique Constructeur Par Défaut Constructeur Par Défaut
Note : Un seul constructeur statique par classe ; il ne peut pas avoir de paramètres ou modificateurs d'accès.
Surcharge de constructeurs C#
Définissez plusieurs constructeurs avec des listes de paramètres différentes pour fournir une création d'objet flexible. Exemple :
using System;
namespace ConstructorOverloadDemo {
class Voiture {
Voiture() {
Console.WriteLine("Constructeur Voiture");
}
Voiture(string marque) {
Console.WriteLine("Constructeur Voiture avec un paramètre");
Console.WriteLine("Marque : " + marque);
}
static void Main(string[] args) {
Voiture voiture = new Voiture();
Console.WriteLine();
Voiture voiture2 = new Voiture("Bugatti");
Console.ReadLine();
}
}
}
Sortie
Constructeur Voiture Constructeur Voiture avec un paramètre Marque : Bugatti
Le compilateur sélectionne le constructeur correspondant basé sur le nombre et les types d'arguments. En savoir plus sur Surcharge de constructeurs C#.
Langue C
- Comprendre les classes imbriquées C# : Définition, utilisation et héritage
- Maîtriser la surcharge de constructeurs en C#
- Comprendre les constructeurs C++ : Par défaut, paramétrés et de copie expliqués
- Maîtriser les constructeurs Java : Types, utilisation et exemples pratiques
- Constructeurs d'enum Java expliqués avec exemple pratique
- Comprendre le Liquide de Refroidissement Moteur : Rôle, Types et Entretien
- Comprendre les Constructeurs Java : Initialisation et Bonnes Pratiques
- Comment le nombre de cylindres façonne la performance des moteurs modernes
- Extensions de garantie auto : comment elles vous protègent et font économiser