myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Objektorientierung - Was bedeutet "null"
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Objektorientierung - Was bedeutet "null"

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
nytrec nytrec ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.03.2017
Beiträge: 37


nytrec ist offline

Objektorientierung - Was bedeutet "null"

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo ihr Lieben.

Ich habe folgenden Code:

C#-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:

C#-Code:
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. unglücklich
16.01.2019 16:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.191
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).
16.01.2019 16:33 Beiträge des Benutzers | zu Buddylist hinzufügen
nytrec nytrec ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.03.2017
Beiträge: 37

Themenstarter Thema begonnen von nytrec

nytrec ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich danke dir für deine Antwort!

Das ist schon mal geklärt. Daumen hoch

Aber kannst du noch auf meine zweite Frage antworten? fröhlich
16.01.2019 16:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.191
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).
16.01.2019 17:40 Beiträge des Benutzers | zu Buddylist hinzufügen
nytrec nytrec ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.03.2017
Beiträge: 37

Themenstarter Thema begonnen von nytrec

nytrec ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Warum ist der Code schlecht? Der Code ist aus meinem Studienheft, und du meinst, dass der schlecht ist? großes Grinsen

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. ^^


mycsharp.de  Moderationshinweis von Abt (16.01.2019 18:11):

Keine Full Quotes
 [Hinweis] Wie poste ich richtig?

 
16.01.2019 18:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.191
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
16.01.2019 18:15 Beiträge des Benutzers | zu Buddylist hinzufügen
nytrec nytrec ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.03.2017
Beiträge: 37

Themenstarter Thema begonnen von nytrec

nytrec ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
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)
16.01.2019 19:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coder007
myCSharp.de-Mitglied

Dabei seit: 05.08.2006
Beiträge: 1.205


Coder007 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von nytrec:
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.
16.01.2019 21:07 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 10 Monate.
Der letzte Beitrag ist älter als 10 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 22.11.2019 18:17