Hoi zusammen,
Ich gebs zu, der Titel ist etwas unpräzise, nur leider fällt mir zu meinem Problem kein besserer ein.
Ich bin mir ziemlich sicher, dass ich zZt ein Brett vor dem Kopf bezgl. meines Problems habe.
Folgendes Szenario.
Ich habe 3 Klassen:
*Fahrzeug
*Auto
*Schiff
Auto & Schiff erben jeweils von der Klasse 'Fahrzeug'
(Ob ein Schiff nun auch ein Fahrzeug ist, lassen wir mal vorneweg 😃)
class Fahrzeug
{
public string Farbe;
}
class Auto : Fahrzeug
{
public int Raeder;
}
class Schiff : Fahrzeug
{
public int Segel;
}
Ich will nun Daten aus einer Datenbank auslesen.
Tabelle 'Fahrzeug'
- ID, PK
- Farbe, nvarchar
- Raeder, INT
- Segel, INT
Diese werden dann als FahrzeugListe global abgespeichert.
Je nach ID ist es ein anderes Objekt (0 - 'nur' Fahrzeug, 1 - Auto, 2 - Schiff).
Ist es ein Schiff, möchte ich dem Schiffobjekt das Segel aus der DB zuweisen(+Farbe).
Ein Auto, so bekommt es die Anzahl Räder (+Farbe).
Bei Fahrzeug wird nur die Farbe vergeben.
Das Problem liegt jetzt dabei.
Deklariere ich am Anfang der DataReader schleife ein Fahrzeug Objekt, und weise ihm je nach ID ein anderes Objekt zu (bspw. Fahrzeug mFZ = new Schiff()), so habe ich ja logischerweise nur Zugriff auf das Element 'Farbe'.
Was geht ist:
while (reading()) // ..
{
switch (Convert.ToInt32(reader["ID"])
{
case 0:
Fahrzeug mFZ = new Fahrzeug();
mFZ.Farbe = reader["Farbe"].ToString();
myFZList.Add(mFZ);
break;
case 1:
Schiff mFZ2 = new Schiff();
mFZ2.Segel = 3;
mFZ2.Farbe = reader["Farbe"].ToString();
myFZList.Add(mFZ2);
break;
case 2:
Auto mFZ3 = new Auto();
mFZ3.Raeder = Convert.ToInt32(reader["Anzahl"]);
mFZ3.Farbe = reader["Farbe"].ToString();
myFZList.Add(mFZ3);
break;
}
}
Dies ist aber sehr unschön.
Wünschenswert wäre so etwas:
switch (Convert.ToInt32(reader["ID"]))
{
case 1:
recreateObj(Schiff, baseobj);
baseobj.Segel = 3;
break;
case 2:
recreateObj(Auto, baseobj);
baseobj.Anzahl = 3;
break;
}
Kann man so etwas überhaupt realisieren?
Ich hoffe ihr versteht was ich meine ;D
Gruss,
Regenwurm