1. Comment bien créer un objet
L'opérateur new en C# — c'est un peu le bouton magique qui transforme un "plan" (notre classe) en un vrai exemplaire (objet) avec lequel tu peux vraiment bosser. Pour faire simple : la classe définit ce que l'objet sait faire et ses propriétés, et new — crée cet objet dans la mémoire de l'ordi.
Sans l'opérateur new, nos classes seraient juste des plans sans construction : tu peux les admirer, en discuter, mais impossible de sauter dessus ou de renverser du thé sur un fauteuil en alcantara.
Si la classe — c'est la recette de pizza, alors l'opérateur new — c'est le cuistot qui, grâce à cette recette, prépare une vraie pizza délicieuse. L'objet, c'est le résultat : la pizza dans la boîte, prête à être mangée.
Syntaxe
Voyons comment utiliser ce fameux new. Voilà la syntaxe de base, si on a une classe Contact :
Contact cont = new Contact();
- Contact à gauche — c'est le type de variable qu'on crée.
- cont — le nom de la variable (choisis des noms qui ont du sens, sinon tu vas galérer au debug plus tard).
- new Contact() — appel de l'opérateur new qui crée un objet du type Contact.
Dans la mémoire
Quand ce code s'exécute, le système d'exploitation réserve un bout de mémoire pour le nouvel objet, et te renvoie une référence (adresse) où cet objet "vit". Cette référence est stockée dans la variable cont.
Schéma
+------------------+ +--------------------+
| variable cont | ---------> | Objet Contact |
+------------------+ +--------------------+
|
| (contient nom, téléphone, email, ...)
|
adresse
2. On crée des objets contact
Dans les exemples précédents, on a inventé cette classe :
public class Contact
{
public string Name;
public string Phone;
public string Email;
}
Maintenant, créons un nouvel objet du type Contact :
Contact friend = new Contact();
friend.Name = "Ivan Ivanov";
friend.Phone = "+1-999-123-45-67";
friend.Email = "ivan@example.com";
Console.WriteLine($"Nom : {friend.Name}, Téléphone : {friend.Phone}, Email : {friend.Email}");
Ce qui se passe ici :
- On crée un objet avec new Contact().
- On assigne des valeurs à ses champs.
- On affiche les données à l'écran.
Exemple 2 :
Ajoutons la gestion de plusieurs contacts — créons un autre objet :
Contact boss = new Contact();
boss.Name = "Anastasia Sergeevna";
boss.Phone = "+1-888-765-43-21";
boss.Email = "nastya@company.com";
Console.WriteLine($"Boss : {boss.Name}, Téléphone : {boss.Phone}");
Ça ne te rappelle pas remplir un formulaire pour chaque pote ? C'est exactement comme ça que les objets fonctionnent : chaque instance créée a ses propres valeurs uniques, stockées séparément des autres !
3. Utiliser un tableau d'objets
Si on doit stocker non pas un ou deux, mais, disons, dix contacts, c'est logique de les garder dans un tableau :
Contact[] contacts = new Contact[3]; // tableau pour 3 objets
contacts[0] = new Contact();
contacts[0].Name = "Denis";
contacts[0].Phone = "+7-911-111-22-33";
contacts[1] = new Contact();
contacts[1].Name = "Maria";
contacts[1].Phone = "+7-915-123-45-67";
contacts[2] = new Contact();
contacts[2].Name = "Petr";
contacts[2].Phone = "+7-921-543-21-00";
// On affiche tout le monde à l'écran
for (int i = 0; i < contacts.Length; i++)
{
Console.WriteLine($"Contact {i+1} : {contacts[i].Name}, {contacts[i].Phone}");
}
Important : on utilise new pour chaque élément du tableau ! Juste créer le tableau ne crée pas les objets eux-mêmes, ça prépare juste la place pour les références.
4. L'opérateur new et la valeur par défaut
Parfois on se demande — et si je déclare juste une variable du type Contact sans lui assigner un objet via new, qu'est-ce qui se passe ?
Contact someContact;
someContact.Name = "Erreur"; // Erreur de compilation !
Si tu écris :
Contact someContact = null;
alors si tu tentes d'accéder à someContact.Name ton programme va "planter" avec l'exception tristement célèbre :
System.NullReferenceException: La référence d'objet n'indique pas une instance d'objet.
Pour éviter ça, initialise toujours tes objets avec new avant de les utiliser.
5. Appeler le constructeur
Quand tu écris new Contact(), à ce moment-là, une méthode spéciale est appelée — le constructeur. Pour l'instant, notre classe n'a pas de constructeur explicite, donc c'est le constructeur par défaut qui est appelé, il crée l'objet et met tous les champs à leur valeur par défaut (null pour les types référence et zéro pour les numériques).
Dans la prochaine leçon, tu verras comment créer tes propres constructeurs — par exemple, pour passer direct le nom et le téléphone. Pour l'instant, on n'a qu'un constructeur sans paramètres.
Exemples de la vraie vie
Travailler avec des objets via l'opérateur new — c'est le quotidien de tout dev C#. Imagine :
- Tu crées un utilisateur sur un site — dans le code, un nouvel objet User apparaît.
- Tu ouvres une commande sur un site e-commerce — un nouvel Order apparaît.
- Tu ajoutes des infos sur un livre — nouvel objet Book.
Dans n'importe quelle appli moderne en C#, tu verras des milliers de lignes avec l'opérateur new.
Mémoire avant la création de l'objet
Contact firstContact; // Variable, mais ne pointe sur rien
+--------------------------+
| firstContact |----> null (rien du tout !)
+--------------------------+
Après la création de l'objet
Contact firstContact = new Contact();
+--------------------------+ +----------------------+
| firstContact |---------------->| Objet Contact |
+--------------------------+ +----------------------+
6. Exemple pratique
Imaginons qu'on veuille permettre à l'utilisateur de créer de nouveaux contacts via le clavier :
Console.WriteLine("Tape ton nom :");
string name = Console.ReadLine();
Console.WriteLine("Tape ton téléphone :");
string phone = Console.ReadLine();
Contact newContact = new Contact();
newContact.Name = name;
newContact.Phone = phone;
Console.WriteLine($"Contact sauvegardé : {newContact.Name}, {newContact.Phone}");
Maintenant, chaque saisie de l'utilisateur va créer son propre objet unique en mémoire, que tu peux stocker, modifier, afficher — bref, faire tout ce que tu veux avec !
7. Erreurs classiques et pièges marrants
Erreur n°1 : t'as oublié d'appeler new avant de bosser avec l'objet.
Si tu déclares une variable mais que tu ne l'initialises pas, tu risques d'avoir soit une erreur de compilation, soit un NullReferenceException à l'exécution. C'est du classique : tu déclares un objet — crée-le direct avec new si tu veux vraiment t'en servir.
Erreur n°2 : t'as créé un tableau d'objets, mais pas les objets eux-mêmes.
Voilà un piège courant : tu crées un tableau du type Contact[], mais tu oublies qu'à l'intérieur, c'est juste une série de null. Essayer d'accéder à contacts[0].Name va faire planter ton code. Il faut d'abord initialiser chaque élément du tableau séparément : contacts[i] = new Contact();.
Erreur n°3 : tu confonds méthode et propriété.
Parfois, les débutants pensent qu'on peut utiliser une méthode comme un champ : ils écrivent student.GetName au lieu de student.GetName(). Ça passe tant que tu n'utilises pas le résultat direct — mais le compilateur va râler si tu tentes de mettre la "méthode" là où il attend une valeur. Vérifie toujours : une méthode doit être appelée avec des parenthèses, même si elle ne prend pas de paramètres.
GO TO FULL VERSION