Hallo zusammen,
Das Problem hatte ich jetzt schon ein paar mal und irgendwie ist mir noch immer keine vernünftige Lösung dafür eingefallen. Evtl. wisst ihr ja wie man so etwas sauber löst.
Folgende Struktur sei gegeben:
[highlight=c#]
public abstract class Parent
{
public abstract String String1 { get; set; }
public abstract String String2 { get; set; }
}
public class Child1:Parent
{
public String String1 { get; set; }
public String String2 { get; set; }
public String String4 { get; set; }
}
//Natürlich machen die Properties in der Applikation etwas anderes
public class Child2:Parent
{
public String String1 { get; set; }
public String String2 { get; set; }
public String String5 { get; set; }
}
[/highlight]
Das wäre mal die Basis. An einer anderen Stelle im Programm würde ich nun gerne etwas mit den Childklassen machen und anhand der Childklasse entscheiden was passieren soll.
1. Versuch:
[highlight=c#]
public static class Converter
{
public static String Convert(Child1 child)
{
//mach was mit child
}
public static String Convert(Child2 child)
{
//mach was mit child
}
public static String Convert(Parent parent)
{
//mach was mit parent
}
}
[/highlight]
Das Problem hier ist allerdings, dass immer nur die letzte Funktion verwendet wird.
Dann hab ich noch folgende Variante, funktioniert zwar aber irgendwie find ichs nicht so toll:
[highlight=c#]
public static class Converter
{
public static String Convert(Parent parent)
{
if(parent.GetType() == typeof(Child1))
//mach was
;
if(parent.GetType() == typeof(Child2))
//mach was
;
//mach was mit parent
}
}
[/highlight]
aber irgendwie kann das ja auch nicht das gelbe vom Ei sein. Gefühlt ist das irgendwie schlecht und da muss es eine schickere Lösung geben. Hat jemand vielleicht eine Idee?
Mir wäre noch eine Lösung mit einem Dictionary<Type,IConverter> eingefallen. Dort kann man für jeden Typ einen IConverter hinterlegen, ansonsten wird der Standardkonverter verwendet. Aber irgendwie find ich das auch nicht richtig. Ich komm aber irgendwie auch nicht auf die "richtige" Lösung insofern es die gibt.
Würde mich freuen wenn hier jemand eine Idee hat
Danke schon mal an alle
Grüße
FanderlF
Das Problem hatte ich jetzt schon ein paar mal und irgendwie ist mir noch immer keine vernünftige Lösung dafür eingefallen. Evtl. wisst ihr ja wie man so etwas sauber löst.
Folgende Struktur sei gegeben:
[highlight=c#]
public abstract class Parent
{
public abstract String String1 { get; set; }
public abstract String String2 { get; set; }
}
public class Child1:Parent
{
public String String1 { get; set; }
public String String2 { get; set; }
public String String4 { get; set; }
}
//Natürlich machen die Properties in der Applikation etwas anderes
public class Child2:Parent
{
public String String1 { get; set; }
public String String2 { get; set; }
public String String5 { get; set; }
}
[/highlight]
Das wäre mal die Basis. An einer anderen Stelle im Programm würde ich nun gerne etwas mit den Childklassen machen und anhand der Childklasse entscheiden was passieren soll.
1. Versuch:
[highlight=c#]
public static class Converter
{
public static String Convert(Child1 child)
{
//mach was mit child
}
public static String Convert(Child2 child)
{
//mach was mit child
}
public static String Convert(Parent parent)
{
//mach was mit parent
}
}
[/highlight]
Das Problem hier ist allerdings, dass immer nur die letzte Funktion verwendet wird.
Dann hab ich noch folgende Variante, funktioniert zwar aber irgendwie find ichs nicht so toll:
[highlight=c#]
public static class Converter
{
public static String Convert(Parent parent)
{
if(parent.GetType() == typeof(Child1))
//mach was
;
if(parent.GetType() == typeof(Child2))
//mach was
;
//mach was mit parent
}
}
[/highlight]
aber irgendwie kann das ja auch nicht das gelbe vom Ei sein. Gefühlt ist das irgendwie schlecht und da muss es eine schickere Lösung geben. Hat jemand vielleicht eine Idee?
Mir wäre noch eine Lösung mit einem Dictionary<Type,IConverter> eingefallen. Dort kann man für jeden Typ einen IConverter hinterlegen, ansonsten wird der Standardkonverter verwendet. Aber irgendwie find ich das auch nicht richtig. Ich komm aber irgendwie auch nicht auf die "richtige" Lösung insofern es die gibt.
Würde mich freuen wenn hier jemand eine Idee hat
Danke schon mal an alle
Grüße
FanderlF
Comment