Hallo zusammen,
ich versuche gerade für ein Minispiel eine generische "Factory" zu schreiben.
Bisher bin ich auch schon ziemlich weit gekommen.
Hier der Code:
Die der Rückgabewert ist Screen da alle zu erstellenden objekte von dieser klasse ableiten.
Bisher hat alles super funktioniert.
Nun kam jedoch eine Klasse wie "Multiplayer" hinzu die mehrere Parameter benötigt.
Dafür habe ich die "CreateScreen Methode 2 weitere male überladen damit ich die parameter als objectarray übergeben kann.
Jetzt meine frage:
Wie kann ich das "object array" wieder der klasse als Parameter übergeben?
Gibt es eine bessere möglichkeit als für die klasse einen neuen Konstruktor zu schreiben die ein object array erwartet und dann die einzelnen werte stupide der reihenfolge nach zum richtigen typ castet?
Danke schonmal für die Antworten!
Lg,
Rooky420
Ich hab mir jetzt schon mal Reflection eine umgefähre lösung zusammengebastelt. (noch nicht getestet)
Hat jemand bessere Ideen da das ja nicht wirklich schön ist?
ich versuche gerade für ein Minispiel eine generische "Factory" zu schreiben.
Bisher bin ich auch schon ziemlich weit gekommen.
Hier der Code:
Code:
class Factory
{
MainWindow window;
public Factory(MainWindow window)
{
this.window = window;
}
public Interfaces.Screen CreateScreen<T>() where T : Interfaces.Screen
{
return CreateScreen(typeof (T), null);
}
public Interfaces.Screen CreateScreen(Type type)
{
return CreateScreen(type, null);
}
public Interfaces.Screen CreateScreen<T>(params object[] list) where T : Interfaces.Screen
{
return CreateScreen(typeof(T), list);
}
public Interfaces.Screen CreateScreen(Type type, params object[] list)
{
var methods = this.GetType().GetMethods();
MethodInfo method = null;
for (int i = 0; i < methods.Length; i++)
{
if (methods[i].ReturnType == type)
{
method = methods[i];
break;
}
}
if (method == null)
throw new Exception("Declare Method for " + type);
return (Screen)method.Invoke(this, list);
}
public Menu CreateMenu()
{
return new Menu(window);
}
public Singleplayer CreateSingleplayer()
{
return new Singleplayer(window);
}
public Multiplayer CreateMultiplayer(object[] parameter)
{
return new Multiplayer(window, /* parameter irgendwie einsetzen??? */);
}
Die der Rückgabewert ist Screen da alle zu erstellenden objekte von dieser klasse ableiten.
Bisher hat alles super funktioniert.
Nun kam jedoch eine Klasse wie "Multiplayer" hinzu die mehrere Parameter benötigt.
Dafür habe ich die "CreateScreen Methode 2 weitere male überladen damit ich die parameter als objectarray übergeben kann.
Jetzt meine frage:
Wie kann ich das "object array" wieder der klasse als Parameter übergeben?
Gibt es eine bessere möglichkeit als für die klasse einen neuen Konstruktor zu schreiben die ein object array erwartet und dann die einzelnen werte stupide der reihenfolge nach zum richtigen typ castet?
Danke schonmal für die Antworten!
Lg,
Rooky420
Ergänzung ()
Ich hab mir jetzt schon mal Reflection eine umgefähre lösung zusammengebastelt. (noch nicht getestet)
Code:
public Interfaces.Screen CreateScreen(Type type, params object[] parameter)
{
var ctors = type.GetConstructors();
foreach (var ctor in ctors)
{
if (ctor.GetParameters().Length == parameter.Length)
{
return (Screen)ctor.Invoke(parameter);
}
}
throw new Exception("Constructor with "+parameter.Length+" Parameters is missing in type "+type);
}
Hat jemand bessere Ideen da das ja nicht wirklich schön ist?
Zuletzt bearbeitet: