Laden...

Objektorientierung - Was bedeutet "null"

Erstellt von nytrec vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.913 Views
N
nytrec Themenstarter:in
37 Beiträge seit 2017
vor 5 Jahren
Objektorientierung - Was bedeutet "null"

Hallo ihr Lieben.

Ich habe folgenden Code:

class Listenelement //5.2
    {
        string daten;
        Listenelement naechster;

        public void SetDaten(string datenNeu)
        {
            daten = datenNeu;
            naechster = null;
        }

        public void Anhaengen(string datenNeu)
        {
            if (naechster == null)
            {
                naechster = new Listenelement();
                naechster.SetDaten(datenNeu);
            }
            else
                naechster.Anhaengen(datenNeu);
            Console.WriteLine("Daten {0} wurden eingefügt.", datenNeu);
        }

        public void Ausgeben()
        {
            Console.WriteLine(daten);
            if (naechster != null)
                naechster.Ausgeben();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine();

            Listenelement listenAnfang = new Listenelement();

            listenAnfang.SetDaten("Element 1");

            for (int element = 2; element < 4; element++)
                listenAnfang.Anhaengen("Element " + element);

            listenAnfang.Ausgeben();
        }
    }
}

Frage 1) Was bedeutet genau "null" in diesem Code?

Ich lese folgendes:
"Denn null wird auch als Standardwert für eine Variable für Objekte benutzt, wenn Sie selbst kein Objekt über new erzeugen und zuweisen".

Bedeutet das, dass "null" einfach 1 erzeugtes Objekt ist?

Frage 2) Im Code wird bei:

 public void Anhaengen(string datenNeu)
        {
            if (naechster == null)
            {
                naechster = new Listenelement();
                naechster.SetDaten(datenNeu);
            }
            else
                naechster.Anhaengen(datenNeu);
            Console.WriteLine("Daten {0} wurden eingefügt.", datenNeu);
        }

Zuerst 3 mal der else Zweig ausgeführt und dann 3 mal ein neues Element erzeugt.
Und hier zerbreche ich mir den Kopf. Weil ich einfach das "null" Im Code nicht verstehe. Ich weiß gerade nichts. Bin vllt einfach zu blöd dafür. 🙁

16.807 Beiträge seit 2008
vor 5 Jahren

null heisst, dass eben kein Objekt referenziert ist - also für ein Objekt eben kein Wert gesetzt ist.
Eine Referenz zeigt demnach auf "nichts".

null (C#-Referenz)

Siehe dazu auch Wert- und Verweistypen (gilt für C# identisch).

N
nytrec Themenstarter:in
37 Beiträge seit 2017
vor 5 Jahren

Ich danke dir für deine Antwort!

Das ist schon mal geklärt. 👍

Aber kannst du noch auf meine zweite Frage antworten? =)

16.807 Beiträge seit 2008
vor 5 Jahren

Das Problem ist halt auch, dass der Code ziemlicher unübersichtliche(r Käse) ist. 😃

Wen Du Dir unklar bist, was Dein Code macht, dann debugge ihn Step für Step.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
Damit kannst Du Frage 2 selbst beantworten. Probiers aus.. wenn Du es dann immer noch nicht kapierst, dann komm wieder.
Aber lernst quasi nix wenn wir Dir hier alles präsentieren und Dir der Aha-Effekt vergönnt bleibt 😉

PS: für mich ist das auch nicht wirklich eine Liste, sondern eine Verkettung von Objekten (mir fällt gerade der Name des Patterns nicht ein).

N
nytrec Themenstarter:in
37 Beiträge seit 2017
vor 5 Jahren

Warum ist der Code schlecht? Der Code ist aus meinem Studienheft, und du meinst, dass der schlecht ist? 😁

Ich habe das Step für Step Debugging ausprobiert. Habe da ehrlich gesagt nichts verstanden. Muss aber an dieser Stelle noch sagen, dass das Debuggen im späteren Verlauf meines Studiums vorkommt. ^^

Hinweis von Abt vor 5 Jahren

Keine Full Quotes
[Hinweis] Wie poste ich richtig?

16.807 Beiträge seit 2008
vor 5 Jahren

Ich sage nicht, dass er schlecht ist. Ich sage, dass er unübersichtlich ist.
Liegt aber einfach auch an den schrecklichen Bezeichnern.

Deine Frage zwei macht nichts anderes als:

  • Wenn das Objekt Listenelement nicht existiert, dann wird eines erstellt und das Feld daten gesetzt.
  • Wenn das Objekt Listenelement existiert, dann wird rekursiv ein verkettetes Objekt erstellt

Mach einfach das Tutorial zum Debuggen zu. Dass das im Studium erst später dran kommt ist ja kein Hindernis.
Aber das ist ein typischer Fall, dass man sowas bei einem Verständnisproblem einfach mal im Debugger durch geht, um zu sehen, was passiert.

Ansonsten mach einfach ne Zeichnung auf einem Blatt Papier, wenn Dir das einfacher fällt.

N
nytrec Themenstarter:in
37 Beiträge seit 2017
vor 5 Jahren

Deine Frage zwei macht nichts anderes als:

  • Wenn das Objekt Listenelement nicht existiert, dann wird eines erstellt und das Feld daten gesetzt.
  • Wenn das Objekt Listenelement existiert, dann wird rekursiv ein verkettetes Objekt erstellt

Verstehe ich das richtig? Zuerst wird überprüft, ob ein Listenelement existiert. Dann wird der "if" Zweig aufgerufen und ein Listenelement erstellt. Danach wird hinterher der "else" Zweig aufgerufen, da wir ja ein Listenlement haben und dieser dann verkettet wird? Ich verstehe das ganze jetzt etwas. Aber mir ist im Code nicht klar, wann genau die Zweige "if" und "else" aufgerufen werden. (also das hintereinander)

C
1.214 Beiträge seit 2006
vor 5 Jahren

Muss aber an dieser Stelle noch sagen, dass das Debuggen im späteren Verlauf meines Studiums vorkommt. ^^

Mich würde es ehrlich gesagt überraschen, wenn im Studium Debuggen drankommen würde. Würde wahrscheinlich auch nicht viel davon halten. Das ist viel eher etwas, was du dir im Studium eben selber beibringen musst, weil du eben merkst, dass/wozu du das brauchst und entsprechend motiviert bist. Da wird dich aber ziemlich sicher niemand an die Hand nehmen.