Lädt...

Konstruktoren

Schreibe eine Klasse Box mit einem int-Feld size und einem Konstruktor Box(int n), der size = n; setzt. In Pine behalte Main und baue eine Box mit Box b = new Box(4);, dann schreibe b.size. Halte beide Typen in derselben Lehrdatei, damit dotnet run einfach bleibt. Starte mit dotnet run. Der Bildschirm sollte eine Zeile zeigen: 4. Die Zahl, die du an new übergibst, erreicht den Konstruktor, und der Konstruktor speichert sie auf dem Objekt, bevor Main weiterläuft. Das Feld beim Bau setzen — im Konstruktor — ist das Lehrziel dieser Seite. Behalte den öffentlichen Startklassennamen Pine.

Eine Methode, die läuft, wenn new baut

Ein Konstruktor hat denselben Namen wie die Klasse. Er hat keinen Rückgabetyp void und keinen anderen Rückgabetyp. Wenn Main new Box(4) schreibt, baut C# das Objekt und führt diesen Konstruktor mit 4 als n aus. Nach dem Konstruktor hält die Variable das fertige Objekt. Das ist die ganze Aufgabe dieser Seite: einen Wert an new übergeben, den Konstruktor auf dem Feld speichern lassen, dann das Feld schreiben, damit du siehst, dass die Speicherung geklappt hat.
Öffne die Pine-Datei. Der Startklassenname bleibt Pine. Diese Seite benennt den Starter nicht um. Lösche jeden übrig gebliebenen c.fill = 3;, falls diese Cup-Zuweisung noch alles ist, was in Main steht. Lösche jede übrig gebliebene Cup-Klasse. Lösche jede ReadLine-Zeile. Die Datei, die du behältst, wartet nicht auf Tippen.
Außerhalb der geschweiften Klammern von Pine — noch in derselben Datei — schreibe public class Box. Innerhalb der Klammern deklariere int size;. Dann schreibe den Konstruktor: Box(int n) { size = n; }. Auf dieser Seite verwende einen Parameternamen, der sich von size unterscheidet, damit die Zuweisung ohne das Wort this klar bleibt. In Box gibt es auf dieser Seite kein Main. Speichere die Datei vor dem Lauf.
Die Feldzeile allein legt 4 nicht ins Objekt. Der Konstruktorkörper macht das, wenn new ihn aufruft. Überspringst du den Konstruktor und deklarierst nur das Feld, passt späteres new Box(4) nicht, und der Build beschwert sich über den Aufruf. Behalte beide Teile in Box: das Feld und den Konstruktor, der hinein schreibt.

Box with constructor

csharp
using System;

public class Box
{
    int size;

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

Pine übergibt 4 an new Box

Pine behält public static void Main(). Innerhalb von Main schreibe Box b = new Box(4); dann Console.WriteLine(b.size);. Das Argument 4 geht in den Konstruktorparameter n. Auf dieser Seite brauchst du keine eigene Zeile b.size = 4; — der Konstruktor hat den Wert schon gespeichert. Die Schreibzeile ist da, damit du dem Konstruktor ohne Raten vertrauen kannst. Auf dieser Seite schreibst du nicht c.fill = 3;. Das war die Felder-Lektion.

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;
    }
}

Lies die behaltene Datei von oben. using System; bereitet kurze Namen vor. public class Pine ist der Starter. public static void Main() ist der Einstieg der Laufzeit. Der Ausdruck new Box(4) baut eine Box und ruft Box(int n) mit n gleich 4 auf. Der Körper schreibt size = n, also wird size dieses Objekts 4. Dann schreibt Main b.size und der Bildschirm zeigt 4. Nichts anderes sollte gedruckt werden.
Führe es mit dotnet run aus. Das Programm schreibt eine Zeile und stoppt. Es wartet nicht auf deine Eingabe. Wenn dotnet run wartet, steckt ReadLine noch in der Datei. Lösche diese Zeile und behalte in Pine new Box(4) plus die Schreibzeile, mit dem Konstruktor in Box. Der Bildschirm zeigt 4. Zeigt der Bildschirm 3, läuft noch ein übrig gebliebener c.fill = 3;-Pfad. Zeigt der Bildschirm ok, steckt vielleicht noch ein altes Chip-Demo in der Datei. Installiere das .NET SDK nicht neu wegen eines Bildschirms mit der falschen Zeile.
Schreibst du new Box() ohne Argument, während der einzige Konstruktor ein int braucht, lehnt der Build ab. Passe den Aufruf an die Parameterliste des Konstruktors an. Setzt du void vor den Konstruktornamen, wird daraus eine gewöhnliche Methode, kein Konstruktor, und new Box(4) führt diesen Körper nicht so aus, wie diese Seite es erwartet. Die Kopfzeile muss wie Box(int n) aussehen, nicht void Box(int n), und nicht static int Box(int n).

Vergleich mit Zuweisung nach new

Auf der Felder-Seite hast du c.fill = 3; nach new Cup() geschrieben. Das funktioniert weiterhin. Diese Seite verlegt die Speicherung in den Konstruktor, damit der Wert gesetzt wird, während das Objekt gebaut wird. Ein übrig gebliebenes Cup-Demo mit c.fill = 3; ist eine andere Lektion. Für diese Seite behalte Box und Pine und new Box(4). Hat Pine noch c.fill = 3; und diese Datei keine Cup-Klasse, entferne diese Zeile. Der Build erfindet kein Cup für dich.
Allein Console.WriteLine(b); zeigt kein sauberes 4. Schreibe Console.WriteLine(b.size);, um die gespeicherte Zahl zu sehen. Die Objektreferenz allein ist nicht der Feldwert. Dieses Muster hast du auf der Felder-Seite gelernt; behalte es hier, wenn du die Arbeit des Konstruktors prüfst.
Du kannst in anderen Programmen weiterhin ein Feld nach new zuweisen. Diese Lektion wählt einfach den Konstruktorweg, damit der erste nützliche Wert beim Bau ankommt. Mische beide Stile nicht im selben Pine-Demo auf dieser Seite. Ein klarer Weg reicht: Argument an new, Speichern im Konstruktor, Feld schreiben.

Zwei Boxen, zwei sizes

Jedes new Box(...) führt den Konstruktor erneut für ein eigenes Objekt aus. Du kannst Box a = new Box(2); und Box b = new Box(9); schreiben und dann beide size-Felder ausgeben. Der erste Aufruf speichert 2 auf einem Objekt. Der zweite speichert 9 auf einem anderen. Die beiden Objekte teilen keinen gemeinsamen size-Platz.

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;
    }
}

Starte erneut mit dotnet run. Der Bildschirm sollte 2 in einer Zeile und 9 in der nächsten zeigen. Jeder Konstruktoraufruf hat sein eigenes Argument auf seinem eigenen Objekt gespeichert. Box b = a; baut kein zweites Objekt — nutze zwei new Box(...)-Aufrufe, wenn du zwei sizes willst. Eine Referenz kopieren ist nicht dasselbe wie den Konstruktor zweimal aufzurufen.
Zeigen beide Zeilen dieselbe Zahl, prüfe, ob jedes new ein anderes Argument übergibt und du a.size und b.size in dieser Reihenfolge schreibst. Stoppt der Build beim zweiten new, suche eine fehlende Klammer oder einen falschen Klassennamen aus einer älteren Form. Kleine Tippfehler im zweiten Aufruf sind häufig, wenn du die erste Zeile einfügst und das Argument vergisst zu ändern.

Was diese Seite für this lässt

Diese Seite nutzt size = n; mit unterschiedlichen Namen. Eine spätere Seite — this — zeigt, wie du vom eigenen Feld des Objekts sprichst, wenn Namen kollidieren. Bleibe hier beim klaren Parameternamen n. Erfinde auf dieser Seite kein this.size, es sei denn, du kennst es schon; das Lehrziel ist der Konstruktoraufruf von new. Das Wort this ist das nächste Thema, keine Voraussetzung, um n heute in size zu speichern.
Verschachtele Box nicht in den Klammern von Pine. Auf dieser Seite sitzen die beiden Klassen als Geschwister in der Datei. Wenn der Build Box beim Kompilieren von Pine nicht findet, prüfe, ob public class Box in derselben Datei steht. Zeigt der Bildschirm 0, fehlt dem Konstruktor vielleicht die Zuweisung, oder Main nutzt noch eine Form ohne Argument, die size nie setzt — behalte Box(int n) { size = n; } und new Box(4). Eine Null auf dem Bildschirm bedeutet meist, dass das Feld beim Standard blieb, weil die Speicherung nie lief.

Du kannst int size; deklarieren, Box(int n) { size = n; } schreiben und mit Box b = new Box(4); aus Pine.Main bauen. Starte mit dotnet run. Der Bildschirm zeigt 4. Der Konstruktor läuft, wenn new das Objekt baut. Du hast die Zahl beim Bau übergeben, der Konstruktor hat sie auf dem Feld gespeichert, und die Schreibzeile hat die Speicherung bewiesen. Denk an den Konstruktor als Einrichtung, die läuft, bevor Main nach new weitergeht. Pine bleibt die Tür, die du mit dotnet run öffnest. Die nächste Seite ist this, wo du eine andere Weise lernst, die eigenen Felder des Objekts in seinen Methoden und Konstruktoren zu benennen.
Behalte die Konstruktorkopfzeile ohne void. Behalte das Argument an new. Behalte die Schreibzeile auf b.size. Diese drei Gewohnheiten sind der Checkpoint dieser Seite, bevor du weitergehst.

🧠 Testen Sie Ihr Wissen

Bereit zum Start

Testen Sie Ihr Wissen

Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen

❓
5
Fragen
🎯
70%
Zum Bestehen
♾️
∞
Zeit
🔄
∞
Versuche

📝 Anweisungen

  • Lesen Sie jede Frage sorgfältig
  • Wählen Sie die beste Antwort für jede Frage
  • Sie können das Quiz so oft wiederholen, wie Sie möchten
  • Ihr Fortschritt wird oben angezeigt