C# - Kann eine Klasse sich selbst an eine andere übergeben?

Aero13

Grünschnabel
Hallo allerseits,

für einen schulischen Test habe ich 4 Klasse erstellt von dennen jedoch nur 2 hier relevant sind.

Code:
class Person
    {
        private string name = null;
        private Datenbasis _daten = new Datenbasis();

        public Person()
        {

        }

        public Person(String name)
        {
            this.name = name;
            _daten.addPerson(this);
        }

        public string getName()
        {
            return name;
        }
    }
und
Code:
class Datenbasis
    {
        private List<Person> personenListe;

        public Datenbasis()
        {

        }

        public void addPerson(Person Person)
        {
            personenListe.Add(Person);
        }

        public List<Person> getPersonenListe()
        {
            return personenListe;
        }
    }

Mit Form1 wollte ich die Klassen testen:
1 Textfeld: txtPerson
1 Button: butPersonErstellen
1 ListView: lvPerson
Code:
private void butPersonErstellen_Click(object sender, EventArgs e)
        {
            Person p = new Person(txtPerson.Text);
            lvPerson.Items.Add(p.getName());
        }

Nun zu meiner eigentlichen Frage.

Ich möchte im Konstruktor von Person die damit erstellte Instanz übergeben. In meinem Fall habe ich jedoch keine Insatz und dachte mach könnte es vlt. auch so übergeben, was leider nicht geht.

public void addPerson(Person Person)
{
personenListe.Add(Person); <-- Fehler
}

Hier wird eine NullReferenceException geworfen.

Wie könnte ich das Problem elegant lösen?

Grüße,
Aero13
 

RudolfG

Erfahrenes Mitglied
Hi,

du solltest die Liste aber schon vorher erstellen:

C#:
class Datenbasis
    {
        // Die Liste muss mit new erstellt werden, bevor du da Objekte hinzufügen kannst.
        private List<Person> personenListe = new List<Person>();
 
        public Datenbasis()
        {
 
        }
 
        public void addPerson(Person Person)
        {
            personenListe.Add(Person);
        }
 
        public List<Person> getPersonenListe()
        {
            return personenListe;
        }
    }

Das sollte den Fehler mit der Exception beheben, was du allerdings noch machen möchtest verstehe ich nicht ganz.

Gruß
RudolfG
 
Zuletzt bearbeitet:

Aero13

Grünschnabel
Okay, das wars vielen Dank.

Mussten nun nur noch aus
Code:
private Datenbasis _daten = new Datenbasis();
ein
Code:
private static Datenbasis _daten = new Datenbasis();
machen und nun funtkioniert es so, wie es soll.

Die Form soll nur die Klasse testen, weshalb da lediglich das Textfeld für die Namenseingabe, samt Knopf zum Erstellen sind.
Außerdem noch die ListView die aufzeigt wer alles angelegt wurde.
 
Zuletzt bearbeitet: