Verschachtelte Klassen

yan1

Erfahrenes Mitglied
Hallo erstmal,

Hab ein Problem:

Ich schreibe gerade in c# ein Programm wo ich unter anderem die Daten einer Person einlese:

public class Person
{
public name Name;
public Geburtsdatum GebDat;
}

public class name
{
public string Vorname;
public string Nachname;
}

public class Geburtsdatum
{
public int Tag;
public int Monat;
public int Jahr;
}

public class MainProgramm
{
public void Einlesen()
{
...
//Neu Person
Person Person1 = new Person();

//Vorname einlesen
Person1.Name.Vorname = Console.ReadLine();
}
}


tja, der Compiler sagt 0 Fehler, doch wenn ich zum Punkt Person1.Name.Vorname = Console.ReadLine(); komme, kommt ein Fehler im Programm, und es stürzt ab!

ich weiss, es würde gehen, wenn ich das so mache:
name Person1 = new name();
name.Vorname = Console.ReadLine();
aber ich habe eigentlich wesentlich mehr Sachen wie nur Name und Geburtsdatum,
und es interessiert mich nicht alle so zu Beschreiben, geht es nicht irgendwie, so wie im Programm?

Danke, Yanick
 
Hallo yan1!

Ich denke um das Instanzieren kommst du nicht herum. Aber das ist doch kein Problem...

Code:
...
public class Person
{
	public name Name = new name();
	public Geburtsdatum GebDat = new Geburtsdatum();
}
...
Und schon läufts...
 
Danke, jetzt gehts!
Aber noch was: ich will auch eine Eigenschaft in der Klasse Person festlegen, die ich nur in dieser Klasse verändern kann, in anderen nur lesen kann, geht das?

danke, yanick
 
du musst dazu erstmal eine private Variable in der Klasse erzeugen und
dann eine Nur-Lese Eigenschaft dafür implementieren. Die Variable muss
natürlich vor dem Lesezugriff initialisiert werden, z.B. über den Konstruktor (siehe Beispiel).

Code:
public class Person
{
 private String m_Name;

 public String Name
 {
  get { return m_Name; }
 }

 public Person(String Name)
 {
  m_Name = Name;
 }
}
 
Beschäftige dich mal bitte mit den Grundlagen der Programmiersprache. Wenn man programmiert sollte es wohl das erste sein, dass man sich über die Sprachfeatures informiert.

C# hat ein Feature namens Properties (zu Detusch: Eigenschaften). Diese erlauben den Zugriff auf Felder, Methoden, berechnen etwas etc. Der Zugriff kann nur lesend sein, nur schreibend, oder lesend und schreibend. Das wird mit den Keywords 'get' und 'set' geregelt.

Im 'get' Block, muss man mittels return einen Wert zurückliefern.
 
Zurück