Hallo liebe Community,
ich bin eine Neuling im Bereich C#. Ich erarbeite mir gerade einige Grundlagen um ein bisschen mehr Verständnis in C# zu bekommen.
Ich habe vollgendes Problem. Es gibt in meine Projekt zwei abstrakte Klassen, Ticket und Ticketautomat. Der Ticketautomat kennt immer die Sorte Tickets, die er verkauft, deshalb ist das erste öffentliche Attribut/Eigenschaft von Ticketautomat -->
public Ticket Ticketart{get;protected set;}.
Nun habe ich mir eine Klasse Bahnticket geschrieben, welche von Ticket erbt. Außerdem habe ich noch einen Bahnticketautomat der von Ticketautomat erbt.
Jetzt will ich im Konstruktor von Bahnticketautomat sagen:
Ticketart = new Bahnticket();
Wenn ich nun auf Ticketart zugreifen will sehe ich nicht die extra Eigenschaften von Bahnticket, wie Startbahnhof oder Endbahnhof, Leider siehe ich nur alle Attribute von Ticket.
Wie kann ich das Lösen, damit ich einem Automaten belibige Tickets zuweisen kann?
Hier nochmal der Code:
Ticket:
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:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace VielseitigerTicketautomat { public abstract class Ticket { public abstract void drucken();
public double Preis { get; protected set; }
public string getFormatiertenPreis() { return String.Format( "{0:0.00}", Preis )+ " €"; }
} } |
Ticketautomat:
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: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace VielseitigerTicketautomat { public abstract class Ticketautomat { public double EingeworfenesGeld{get;protected set;} public Ticket Ticketart{get;protected set;}
public void geldEinwerfen(double wert) { if(wert > 0) { EingeworfenesGeld += wert; Console.WriteLine("Wollen Sie den Vorgang abbrechen? (ja/nein)"); string antwort = Console.ReadLine(); if(antwort == "ja") { Console.WriteLine("Geldausgabe: Sie bekommen zurück: " + EingeworfenesGeld + " €"); return; } else { if (genugGeldEingeworfen()) { if (EingeworfenesGeld - Ticketart.Preis != 0.0) { gibWechselGeld(); } } else { geldEinwerfen( Convert.ToDouble( Console.ReadLine() ) ); } }
} }
public void Ticketdrucken() { if (EingeworfenesGeld == Ticketart.Preis) { Ticketart.drucken(); } else { Console.WriteLine( "Der Preis stimmt noch nicht! Ticket wird nicht gedruckt!" ); }
}
public bool genugGeldEingeworfen() { if (EingeworfenesGeld == Ticketart.Preis) { return true; } else if (EingeworfenesGeld < Ticketart.Preis) { return false; } else if (EingeworfenesGeld > Ticketart.Preis) { return true; } else { return false; } }
public double gibWechselGeld() { return EingeworfenesGeld - Ticketart.Preis; } } } |
Bahnticket:
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:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace VielseitigerTicketautomat { public class Bahnticket: Ticket { public string Startbahnhof{get;set;} public string Endbahnhof{get;set;}
public override void drucken() { Console.WriteLine("***Bahnticket***"); Console.WriteLine( "Startbahnhof: " + Startbahnhof); Console.WriteLine( "Zielbahnhof: " + Endbahnhof ); Console.WriteLine("Preis: " + Preis); Console.WriteLine( "****************" ); }
} } |
Bahnticketautomat:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace VielseitigerTicketautomat { public class Bahnticketautomat : Ticketautomat { public Bahnticketautomat() { Ticketart = new Bahnticket(); }
public void waehleStartBahnhof(string startbahnhof) { Ticketart.??? }
} } |
Mit freundlichen Grüßen
Karsten