Class-Vererbung!?

billyblue

Grünschnabel
Hallo, ich habe folgende Class erzeugt:
---
public class SchoolData
{
public StudentData [] Student;
}

public class StudentData
{
string id;
public string ID
{
get {return id;}
set {id=value;}
}
}
---
nun möchte ich davon eine Instanz erzeugen mit

SchoolData School = new SchoolData();

soweit so gut, doch sobald ich nun Folgendes versuche:

School.Student.ID[0]="123";

hält das Programm an und meldet:
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Kann mir jemand verraten, was hier schief gelaufen ist? Vielen Dank!
- bb
 
selbst wenn ich es wie folgt ändere (also array-frei mache), klappt es nicht - kommt die selbe Meldung:
--
public class SchoolData
{
public StudentData Student;
}

public class StudentData
{
string id;
public string ID
{
get {return id;}
set {id=value;}
}
}
---
Zugriff:
School.Student.ID="123";

-bb
 
Ist ganz klar.

Es gibt zwar eine Instanz von SchoolData.
jedoch in dieser Klasse keine von StudentData. Ich würde einen Konstruktor erstellen:
Code:
public SchoolData(string id)
{
     Student = new StudentData[1];
     Student[0].ID = "123";
}

hier wird eine Instanz von Student in der SchoolData Instanz angelegt.
Ebenso würde ich eine MEthode "AddStudent" o.ä. schreiben, mit der "ID" als übergabeparameter. Darin wird eine StudentData Array angelegt, mit einem Element als vorher. danach müssen sämtliche Einträge kopiert werden, und schlussendlich das neue Angefügt werden.
Mfg
 
hm, danke!

zu vererbung:
durch

public StudentData [] Student;

in Students wird die Class StudentData vererbt, daher auch die Zugriffsmöglichkeit über den . im Sourcecode - der Fehler muss woanders liegen.


zu den arrays:
- geht das nicht auch dynamisch - also mit dynamischen arrays (nicht arraylist!)
 
Zuletzt bearbeitet:
Hab das Problem jetzt weitesgehend gelöst, mein Ziel ist es Daten für XML zu serialisieren, ich möchte zu einzelnen Schüler die Adressdaten in ein XML-File schreiben lassen.

Jetzt muss ich nur noch einen Weg finden, in SchoolData die Vererbung von StudentData dynamisch als Array abzulegen, denn die Übergabe zur Serialisierung geht schließlich nur mit:

XmlSerializer myXML= new XmlSerializer(typeof(SchoolData));

von daher muss die dynamik schon in der Class erzeugt werden und nicht erst bei der Ableitung.

Irgendwo im Netz hab ich mal gesehen (und auch getestet), dass es in c# möglich ist ohne Arraylist dynamische Arrays zu erzeugen, nur leider find ich das jetzt nicht mehr - hat jemand eine Idee?
- bb
 
Ich kenne dynamische Arrays nur von VB.NET mit "ReDim Preserve Array(14) as String".

Wieso denn keine ArrayLists? Wegen dem Type Casting? Funktioniert das mit dem XML-Serialisieren nicht?
Die Klasse ArrayList besitzt das Serializable-Attribut, kann also binär serialisiert werden.

XML-Serializer lassen private und geschützte Felder bei der Serialisierung aus.
Du könntest deine Daten intern als ArrayList speichern (als geschütztes Feld) und gegen aussen von einer Eigenschaft als "dynamisches" Array vertreten lassen. Da auch der Wert von EIgenschaften serialisiert wird, werden deine Daten bei der Deserialisierung wieder in die interne ArrayList geschrieben.
 
So, hab jetzt endlich soweit alles in den Kopf bekommen, was XML und Co angeht - jetzt wo ich mehr oder weniger durchblicke stellt sich mir die Frage, ob XML Sinn macht für die Schülerdatenbank!? Gibt es denn Nachteile (oder sogar Vorteile) gegenüber eine SQL-Datenbank?


BTW: Noch mal Danke für die ganze, vorallem schnelle(!), Hilfe
 

Neue Beiträge

Zurück