Chargement...

Constructeurs

Écrivez une classe Box avec un champ int nommé size et un constructeur Box(int n) qui pose size = n;. Dans Pine, gardez Main et construisez une box avec Box b = new Box(4);, puis écrivez b.size. Gardez les deux types dans le même fichier d'enseignement pour que dotnet run reste simple. Lancez avec dotnet run. L'écran doit montrer une ligne : 4. Le nombre passé à new atteint le constructeur, et le constructeur le stocke sur l'objet avant que Main continue. Poser le champ à la construction — dans le constructeur — est ce que cette page enseigne. Gardez la classe publique de démarrage nommée Pine.

Une méthode qui tourne quand new construit

Un constructeur porte le même nom que la classe. Il n'a pas de type de retour void ni d'autre type de retour. Quand Main écrit new Box(4), C# construit l'objet et exécute ce constructeur avec 4 comme n. Après la fin du constructeur, la variable tient l'objet prêt. C'est tout le travail de cette page : passer une valeur à new, laisser le constructeur la stocker sur le champ, puis écrire le champ pour voir que le stockage a marché.
Ouvrez le fichier Pine. Le nom de la classe de démarrage reste Pine. Cette page ne renomme pas le démarreur. Supprimez tout reste c.fill = 3; si cette assignation Cup est encore tout ce que vous avez dans Main. Supprimez tout reste de classe Cup. Supprimez toute ligne ReadLine. Le fichier que vous gardez n'attend pas de frappe.
Hors des accolades de Pine — toujours dans le même fichier — écrivez public class Box. À l'intérieur des accolades, déclarez int size;. Puis écrivez le constructeur : Box(int n) { size = n; }. Utilisez un nom de paramètre différent de size sur cette page pour que l'assignation soit claire sans le mot this. Il n'y a pas de Main dans Box sur cette page. Enregistrez le fichier avant de lancer.
La ligne de champ seule ne met pas 4 dans l'objet. Le corps du constructeur fait ce travail quand new l'appelle. Si vous sautez le constructeur et ne déclarez que le champ, un new Box(4) plus tard ne correspondra pas, et la compilation se plaindra de l'appel. Gardez les deux pièces dans Box : le champ et le constructeur qui y écrit.

Box with constructor

csharp
using System;

public class Box
{
    int size;

    Box(int n)
    {
        size = n;
    }
}

Pine passe 4 dans new Box

Pine garde public static void Main(). À l'intérieur de Main, écrivez Box b = new Box(4); puis Console.WriteLine(b.size);. L'argument 4 entre dans le paramètre du constructeur n. Vous n'avez pas besoin d'une ligne séparée b.size = 4; sur cette page — le constructeur a déjà stocké la valeur. La ligne d'écriture est là pour que vous puissiez faire confiance à ce que le constructeur a fait sans deviner. Vous n'écrivez pas c.fill = 3; sur cette page. C'était la leçon sur les champs.

Pine builds one box

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Box b = new Box(4);
        Console.WriteLine(b.size);
    }
}

public class Box
{
    int size;

    Box(int n)
    {
        size = n;
    }
}

Relisez le fichier conservé depuis le haut. using System; prépare les noms courts. public class Pine est le démarreur. public static void Main() est l'endroit où le runtime commence. L'expression new Box(4) construit un Box et appelle Box(int n) avec n égal à 4. Le corps écrit size = n, donc le size de cet objet devient 4. Puis Main écrit b.size et l'écran montre 4. Rien d'autre ne doit s'imprimer.
Lancez avec dotnet run. Le programme écrit une ligne et s'arrête. Il n'attend pas que vous tapiez. Si dotnet run attend, ReadLine est encore dans le fichier. Supprimez cette ligne et gardez new Box(4) plus l'écriture dans Pine, avec le constructeur dans Box. L'écran montre 4. Si l'écran montre 3, un chemin restant c.fill = 3; tourne encore. Si l'écran montre ok, une vieille démo Chip peut encore être dans le fichier. Vous ne réinstallez pas le SDK .NET pour un écran qui montre la mauvaise ligne.
Si vous écrivez new Box() sans argument alors que le seul constructeur exige un int, la compilation refuse. Faites correspondre l'appel à la liste de paramètres du constructeur. Si vous ajoutez void avant le nom du constructeur, cela devient une méthode ordinaire, pas un constructeur, et new Box(4) n'exécutera pas ce corps comme cette page l'attend. L'en-tête doit ressembler à Box(int n), pas void Box(int n), et pas static int Box(int n).

Comparé à l'assignation après new

Sur la page des champs vous écriviez c.fill = 3; après new Cup(). Cela marche encore. Cette page déplace le stockage dans le constructeur pour que la valeur soit posée pendant la construction de l'objet. Une démo Cup restante avec c.fill = 3; est une autre leçon. Pour cette page gardez Box et Pine et new Box(4). Si Pine a encore c.fill = 3; et que ce fichier n'a pas de classe Cup, retirez cette ligne. La compilation n'inventera pas de Cup pour vous.
Écrire seulement Console.WriteLine(b); ne montre pas un 4 propre. Écrivez Console.WriteLine(b.size); pour voir le nombre stocké. La référence d'objet seule n'est pas la valeur du champ. Vous avez déjà appris ce motif sur la page des champs ; gardez-le ici quand vous vérifiez le travail du constructeur.
Vous pouvez encore assigner un champ après new dans d'autres programmes. Cette leçon choisit simplement le chemin du constructeur pour que la première valeur utile arrive à la construction. Ne mélangez pas les deux styles dans la même démo Pine sur cette page. Un chemin clair suffit : argument à new, stockage dans le constructeur, écriture du champ.

Deux boxes, deux sizes

Chaque new Box(...) exécute à nouveau le constructeur pour un objet séparé. Vous pouvez écrire Box a = new Box(2); et Box b = new Box(9);, puis écrire les deux champs size. Le premier appel stocke 2 sur un objet. Le second appel stocke 9 sur un autre objet. Les deux objets ne partagent pas un seul emplacement size.

Pine builds two boxes

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Box a = new Box(2);
        Box b = new Box(9);
        Console.WriteLine(a.size);
        Console.WriteLine(b.size);
    }
}

public class Box
{
    int size;

    Box(int n)
    {
        size = n;
    }
}

Relancez avec dotnet run. L'écran doit montrer 2 sur une ligne et 9 sur la suivante. Chaque appel de constructeur a stocké son propre argument sur son propre objet. Écrire Box b = a; ne construit pas un second objet — utilisez deux appels new Box(...) quand vous voulez deux sizes. Copier une référence n'est pas la même chose qu'appeler le constructeur deux fois.
Si les deux lignes montrent le même nombre, vérifiez que chaque new passe un argument différent et que vous écrivez a.size et b.size dans cet ordre. Si la compilation s'arrête sur le second new, cherchez une parenthèse manquante ou un mauvais nom de classe restant d'une forme plus ancienne. Les petites fautes dans le second appel sont courantes quand vous collez la première ligne et oubliez de changer l'argument.

Ce que cela laisse pour this

Cette page utilise size = n; avec des noms différents. Une page plus tard — this — montre comment parler du champ propre de l'objet quand les noms se heurtent. Restez ici avec le nom de paramètre clair n. N'inventez pas this.size sur cette page sauf si vous le connaissez déjà ; le but de la leçon est l'appel du constructeur depuis new. Le mot this est le sujet suivant, pas une exigence pour stocker n dans size aujourd'hui.
Ne nidez pas Box dans les accolades de Pine. Sur cette page les deux classes sont sœurs dans le fichier. Si la compilation ne trouve pas Box en compilant Pine, vérifiez que public class Box est dans le même fichier. Si l'écran montre 0, le constructeur peut manquer l'assignation, ou Main peut encore utiliser une forme sans argument qui ne pose jamais size — gardez Box(int n) { size = n; } et new Box(4). Un zéro à l'écran signifie en général que le champ est resté à sa valeur par défaut parce que le stockage n'a pas tourné.

Vous pouvez déclarer int size;, écrire Box(int n) { size = n; }, et construire avec Box b = new Box(4); depuis Pine.Main. Lancez avec dotnet run. L'écran montre 4. Le constructeur tourne quand new construit l'objet. Vous avez passé le nombre à la construction, le constructeur l'a stocké sur le champ, et l'écriture a prouvé le stockage. Voyez le constructeur comme la mise en place qui tourne avant que Main continue après new. Pine reste la porte que vous ouvrez avec dotnet run. La page suivante est this, où vous apprenez une autre façon de nommer les champs propres de l'objet dans ses méthodes et constructeurs.
Gardez l'en-tête du constructeur sans void. Gardez l'argument sur new. Gardez l'écriture sur b.size. Ces trois habitudes sont le point de contrôle de cette page avant d'avancer.

🧠 Testez Vos Connaissances

Prêt à Commencer

Testez Vos Connaissances

Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet

❓
5
Questions
🎯
70%
Pour Réussir
♾️
∞
Temps
🔄
∞
Tentatives

📝 Instructions

  • Lisez chaque question attentivement
  • Sélectionnez la meilleure réponse pour chaque question
  • Vous pouvez refaire le quiz autant de fois que vous le souhaitez
  • Votre progression sera affichée en haut