Objekte unterschiedlicher Klassen Returnen
-
Irgendwie fällt mir kein passender Titel ein.
Ich habe eine Klasse welche eine bestimmte Funktion enthalten soll, die je nach Typ entweder ein Objekt von Klasse1 oder Klasse2 zurückgibt.public enum Type { Class1, Class2 } public class Base { private Type m_Type; . . . public Class1OrClass2 GetData() { //return entweder ein Objekt von Class1 oder Class2 } }
Welcher Weg ist für sowas günstig? Ich arbeite mit C# obwohl die Problemstellung auch C++ oder Java bekannt sein könnte. Ich könnte ein object returnen über das Enum prüffen was denn nun zurückkommt und casten. Aber die dauernden Casts finde ich auch nicht schick. Ich könnte Template Argumente anwenden. Dann entfällt das Casten und ich kann sogar mit where auf die beiden Klassen beschränken. Das Problem hier ist das ich, um einen Referenz auf Base zu bekommen schon wissen muss von welchen Typ das ist. Ich glaube sowas:
public class Base<T> { public Base(T param) { } public T GetData() { } } public void foo() { Base myBase = irgendWas.GetBase(); }
Geht nicht so einfach.
Die dritte Alternative wäre eine Vererbungshirarchie. Base enthält nur das Enum und Abgeleitete klassen enthalten GetData. Aber dann muss ich ja auch auf die einzelnen Klassen Casten.
-
ja mei mach doch ne klasse0 also:
.klasse0 '-klasse1 '-klasse2
casten mußt dann natürlich schon... aber muß man das nicht immer?
-
Ja dummerweise muss man das, ich meine aber irgendwo gelesen zu haben das zu viel Casts böse sind, und dann was mit den Objektmodell nicht stimmt. Irgendwie fällt mir hier aber keine Castfreie Lösung ein
-
Fedaykin schrieb:
Ja dummerweise muss man das, ich meine aber irgendwo gelesen zu haben das zu viel Casts böse sind, und dann was mit den Objektmodell nicht stimmt.
wenn die methoden/variablen aus dem zurückgegebenen object teil von klasse0 sind brauchst nichts casten. erst wenn du was von klasse1 oder klasse2 brauchst. daher stimmt das schon.
-
was hast du eigentlich vor?