Lädt...

this

Schreibe eine Klasse Tin mit einem int-Feld size und einem Konstruktor Tin(int size), der this.size = size; setzt. In Pine behalte Main und baue ein tin mit Tin t = new Tin(7);, dann schreibe t.size. Halte beide Typen in derselben Lehrdatei, damit dotnet run einfach bleibt. Starte mit dotnet run. Der Bildschirm sollte eine Zeile zeigen: 7. Parameter und Feld teilen den Namen size. Das Wort this benennt das Feld auf dem Objekt, damit die Speicherung am richtigen Ort ankommt. this zu nutzen, wenn Namen kollidieren, ist das Lehrziel dieser Seite. Behalte den öffentlichen Startklassennamen Pine.

Warum derselbe Name this braucht

Auf der Konstruktoren-Seite war der Parameter n und das Feld size, also war size = n; klar. Hier heißen beide size. Innerhalb des Konstruktors meint ein bloßes size den Parameter. size = size; kopiert den Parameter auf sich selbst und lässt das Feld beim Standardwert. Das Feld auf dem Objekt braucht noch eine Schreibzeile. Diese Schreibzeile setzt this.size auf der linken Seite.
Öffne die Pine-Datei. Der Startklassenname bleibt Pine. Diese Seite benennt den Starter nicht um. Lösche jeden übrig gebliebenen Box b = new Box(4);, falls dieser Konstruktoren-Aufruf noch alles ist, was in Main steht. Lösche jede übrig gebliebene Box-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 Tin. Innerhalb der Klammern deklariere int size;. Dann schreibe den Konstruktor: Tin(int size) { this.size = size; }. In Tin gibt es auf dieser Seite kein Main. Speichere die Datei vor dem Lauf.
Lies die Zuweisung noch einmal. Die rechte Seite size ist der Wert, der im Parameter ankam — hier 7. Die linke Seite this.size ist das Feld auf dem Objekt, das gebaut wird. Nach der Zeile hält size dieses Objekts 7. Lässt du this. weg und behältst size = size;, zeigt der Bildschirm später 0, weil das Feld nie geändert wurde.

Tin with this in constructor

csharp
using System;

public class Tin
{
    int size;

    Tin(int size)
    {
        this.size = size;
    }
}

Pine baut ein tin

Pine behält public static void Main(). Innerhalb von Main schreibe Tin t = new Tin(7); dann Console.WriteLine(t.size);. Das Argument 7 wird der Konstruktorparameter size. Der Konstruktor speichert ihn mit this.size = size;. Auf dieser Seite brauchst du keine eigene Zeile t.size = 7;. Auf dieser Seite schreibst du nicht Box b = new Box(4);. Das war die Konstruktoren-Lektion.

Pine builds one tin

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Tin t = new Tin(7);
        Console.WriteLine(t.size);
    }
}

public class Tin
{
    int size;

    Tin(int size)
    {
        this.size = size;
    }
}

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 Tin(7) baut eine Tin und ruft Tin(int size) mit dem Parameter gleich 7 auf. Der Körper schreibt this.size = size, also wird das Objektfeld 7. Dann schreibt Main t.size und der Bildschirm zeigt 7.
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 Tin(7) plus die Schreibzeile, mit this.size = size; in Tin. Der Bildschirm zeigt 7. Zeigt der Bildschirm 4, läuft noch ein übrig gebliebener new Box(4)-Pfad. Zeigt der Bildschirm 0, ist der Konstruktorkörper vermutlich size = size; ohne this. — setze this. wieder auf die linke Seite.
Setzt du void vor den Konstruktornamen, wird daraus eine gewöhnliche Methode, kein Konstruktor, und new Tin(7) führt diesen Körper nicht so aus, wie diese Seite es erwartet. Die Kopfzeile muss wie Tin(int size) aussehen, nicht void Tin(int size).

this.size und size nebeneinander

Eine kurze Tabelle hält die beiden Namen klar, während du im Konstruktor bist.

📊 this.size vs size

Name What it means in Tin(int size)
size alone the parameter that entered the constructor
this.size the field on the object being built
this.size = size; store the parameter into the field
size = size; does not update the field
Die Tabelle ist nur eine Erinnerung. Die getippte Zeile, die du behältst, ist this.size = size; im Konstruktor, dann in Pine Tin t = new Tin(7); und Console.WriteLine(t.size);.

Vergleich mit der Konstruktoren-Seite

Auf der Konstruktoren-Seite funktionierte Box(int n) { size = n; }, weil n und size unterschiedliche Wörter waren. Diese Form funktioniert weiterhin. Diese Seite verwendet absichtlich dasselbe Wort zweimal, damit du this brauchst. Ein übrig gebliebenes Box-Demo mit size = n; ist eine andere Lektion. Für diese Seite behalte Tin und Pine und this.size = size;.
Allein Console.WriteLine(t); zeigt kein sauberes 7. Schreibe Console.WriteLine(t.size);, um die gespeicherte Zahl zu sehen. Die Objektreferenz allein ist nicht der Feldwert.
Du kannst an anderen Tagen weiterhin einen anderen Parameternamen wählen. Diese Lektion wählt absichtlich übereinstimmende Namen. Mische n und this nicht im selben Tin-Demo auf dieser Seite. Ein klarer Weg reicht: übereinstimmende Namen, this auf dem Feld, das Feld schreiben.

Zwei tins bleiben getrennt

Jedes new Tin(...) führt den Konstruktor erneut für ein eigenes Objekt aus. Du kannst Tin a = new Tin(2); und Tin b = new Tin(9); schreiben und dann beide size-Felder ausgeben. Jeder Aufruf nutzt this.size = size; auf seinem eigenen Objekt. Die beiden Objekte teilen keinen gemeinsamen size-Platz. Du brauchst dafür keine zweite Codebox — ändere die Zahlen in Pine, sobald du 7 gesehen hast, oder behalte das Ein-tin-Demo als gespeicherte Datei.
Zeigen beide Zeilen 0, fehlt dem Konstruktor noch this auf der linken Seite. Findet der Build Tin beim Kompilieren von Pine nicht, prüfe, dass public class Tin in derselben Datei steht.

Was diese Seite für Instanzmethoden lässt

Diese Seite nutzt this nur im Konstruktor, um ein Feld zu speichern. Eine spätere Seite — Instanzmethoden — zeigt Methoden, die auf einem Objekt laufen und Felder lesen oder ändern können. Bleib hier beim Speichern im Konstruktor. Erfinde für diese Lektion keine Extra-Methoden auf Tin, außer du kennst sie schon; das Lehrziel ist this.size = size, wenn Namen übereinstimmen.
Verschachtle Tin nicht in den Klammern von Pine. Auf dieser Seite sitzen die beiden Klassen als Geschwister in der Datei. Hat Pine noch Box b = new Box(4); aus dem Konstruktoren-Demo und diese Datei keine passende Box-Klasse, die du behalten willst, entferne diese Zeile. Behalte Tin t = new Tin(7); und Console.WriteLine(t.size);. Der Build erfindet kein Box für dich, während du Tin lehrst.

Du kannst int size; deklarieren, Tin(int size) { this.size = size; } schreiben und von Pine.Main mit Tin t = new Tin(7); bauen. Starte mit dotnet run. Der Bildschirm zeigt 7. Das Wort this benennt das Objektfeld, wenn der Parameter denselben Namen nutzt. Du hast die Zahl beim Bau übergeben, der Konstruktor hat sie mit this gespeichert, und die Schreibzeile hat die Speicherung bewiesen. Denke an this als Zeiger auf das Objekt, das gebaut wird, wenn ein bloßer Name den Parameter meinen würde. Pine bleibt die Tür, die du mit dotnet run öffnest. Die nächste Seite sind Instanzmethoden, wo Methoden auf dem Objekt Felder nutzen, nachdem das Objekt schon existiert.
Behalte die Konstruktorkopfzeile ohne void. Behalte this. auf dem Feld. Behalte die Schreibzeile auf t.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

❓
6
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