jpr1965
unread,Feb 16, 2012, 12:34:38 PM2/16/12You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Hallo,
dies ist mal ein sehr spezielles Problem, aber ich kann das leider
nicht anders umsetzen (denke ich).
Ich habe mehrere Hierarchie-Bäume von Klassen, von denen sich einige
entsprechen. Und aus jeder Hiearchie darf ich nur die zusammenstecken,
die auch zusammenpassen.
Daher möchte ich erzwingen, dass die Klasse selbst die Schnittstelle
"IFahrzeugtyp" und damit eine virtuelle Methode "Fahrzeugtyp GetFahrzeugtyp()"
implementiert.
Beispiel:
1. Auto, Lkw, Pkw, Motorrad.
2. Autoreifen, Pkwreifen, Lkwreifen, Motorradreifen.
Ich muss jetzt verhindern, dass ein Lkwreifen an einen Pkw montiert wird:
In der Klasse Auto gibt es die Methode
MontiereReifen(Ort wo, Autoreifen autoreifen);
Da kann ich jetzt jeden Reifen reinstecken, und dann
fährt das Auto später eventuell nicht.
Und das merkt man erst zur Laufzeit.
Die Prüfung stelle ich mir so vor:
Jede Klasse weiß, zu welchem Fahrzeugtyp sie gehört:
enum Fahrzeugtyp { Auto, Lkw, Pkw, Motorrad };
IFahrzeugtyp { Fahrzeugtyp GetFahrzeugtyp() };
class Auto: IFahrzeugtyp { ... }
class Lkw : Auto, IFahrzeugtyp { ... }
class Pkw : Auto, IFahrzeugtyp { ... }
class Motorrad : Auto, IFahrzeugtyp { ... }
...
class Autoreifen : IFahrzeugtyp { ... }
class Pkwreifen : Autoreifen, IFahrzeugtyp { ... }
class Lkwreifen : Autoreifen, IFahrzeugtyp { ... }
class Motorradreifen : Autoreifen, IFahrzeugtyp { ... }
Das Problem ist nun,
wenn ich in Auto und Autoreifen die Methode
public virtual Fahrzeugtyp GetFahrzeugtyp() { return Fahrzeugtyp.Auto }
bereits implementiert habe, erhalte ich keine Fehlermeldung des Compilers,
falls z.B. Lkw diese Methode nicht implementiert.
Implementiere ich die Methode in keiner der Klassen
Lkw, Pkw, Motorrad, Pkwreifen, Lkwreifen, Motorradreifen
Liefert der Aufruf von GetFahrzeugtyp() immer "Fahrzeugtyp.Auto" zurück.
Damit schlägt die Prüfung nicht an, wenn ich im Pkw sicherstellen will,
dass nur Pkwreifen angebaut werden.
Sind die Methoden implementiert, erhalte ich im Pkw "Fahrzeugtyp.Pkw" und
für den Lkwreifen "Fahrzeugtyp.Lkw", und dann kann der Pkw erkennen,
dass der Reifentyp nicht passt.
Hoffentlich versteht das jemand...
VG
Ralf Peine