Hallöchen,
ich bin schon etwas länger in der Entwicklerecke, war aber noch nie im C#-Bereich unterwegs, denn bisher hatte ich mit C# noch nie viel am Hut. Ich arbeite aktuell an einer Aufgabe für die Schule, habe mich an einem Punkt aber etwas verbissen. Es geht darum eine simple Bücherverwaltung zu entwickeln. Die Klassen mit denen wir arbeiten müssen, sind vorgegeben.
Hier mal die drei Klassen (Kommentare und Konstruktoren entfernt, da die Klassen wirklich extrem simpel sind):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| class Buecher { public string Autor { get; set; } public string Titel { get; set; } public float Preis { get; set; } }
class Buch : Buecher { public int Seiten { get; set; } }
class Ebook : Buecher { public string Format { get; set; } public int Speicherbedarf { get; set; } } |
Wie man sieht existiert eine Basisklasse "Buecher" mit grundlegenden Informationen, und die zwei Klassen "Buch" (für physische Bücher) und "Ebook" (für elektronische Bücher). Die Bücher zeige ich in einer ListBox an. Meine Methode zum Hinzufügen/Bearbeiten sieht so aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| private void btnSave_Click(object sender, EventArgs e) { Buecher buch = null; float price;
if (lbBooks.SelectedItem is Buecher) buch = (Buecher)lbBooks.SelectedItem;
float.TryParse(tbPrice.Text, out price);
if (buch != null) { buch.Autor = tbAuthor.Text; buch.Titel = tbTitle.Text; buch.Preis = price;
lbBooks.Items[lbBooks.SelectedIndex] = lbBooks.SelectedItem; } else { buch = new Buecher(tbAuthor.Text, tbTitle.Text, price);
lbBooks.Items.Add(buch); } } |
So weit so gut, das ist bis jetzt ja alles relativ simpel. Nun habe ich aber ein Problem: Ich möchte natürlich auch noch festhalten, ob es sich um ein physisches oder um ein elektronisches Buch handelt. Hier kommen die beiden Klassen "Buch" und "Ebook" ins Spiel. Es gibt auch noch Eingabefelder für Seitenzahl, Speicherformat und Speicherbedarf. Je nachdem welche von denen mit Text gefüllt sind, lassen mich ermittel ob der Benutzer ein normales Buch oder ein E-Book anlegen will. In beiden Fällen muss ich dann anstelle von "Buecher" eine Instanz vom Typ "Buch" oder eben "Ebook" erstellen, da ich ja nicht über die Basisklasse auf die Eigenschaften der beiden erbenden Klassen zugreifen kann. Was sich in der Theorie so simpel anhört, hat bei meinen praktischen Versuchen nicht so recht hingehauen. Ich hatte ein eher undurchschaubares Konstrukt aus if-else-Statements um z.B. herauszufinden von welchem Typ das gerade in der ListBox selektierte Element ist und noch einige andere Problemchen. Was ich da fabriziert habe hat sich irgendwie "nicht richtig" angefühlt.
Mein konkretes Anliegen ist also: Könnte mir jemand einen Anreize geben, wie ich die oben zu sehende Speichern-Methode so erweitern kann, dass ich eine Buch/E-Book Instanz erzeugen und in die Liste aufnehmen kann?
Gruß,
LuMa