Bellow ist Version des Codes vereinfacht die ich habe:Allgemeine Klasse Fabrik Problem
public interface IControl<T>
{
T Value { get; }
}
public class BoolControl : IControl<bool>
{
public bool Value
{
get { return true; }
}
}
public class StringControl : IControl<string>
{
public string Value
{
get { return ""; }
}
}
public class ControlFactory
{
public IControl GetControl(string controlType)
{
switch (controlType)
{
case "Bool":
return new BoolControl();
case "String":
return new StringControl();
}
return null;
}
}
Das Problem ist in GetControl Methode der ControlFactory Klasse. Weil es IControl zurückgibt und ich nur IControl < T> habe, ist das eine generische Schnittstelle. Ich kann T nicht liefern, weil es in Bool Fall bool und in String Fall wird es String sein.
Jede Idee, was ich tun muss, damit es funktioniert?
@Vadim - Ich würde Ihnen dringend empfehlen, Daniels Lösung zu verwenden, bei der er Typen vergleicht und keine Zeichenfolgen verwendet. Die Verwendung des Namens des Typs ist fehleranfälliger. –
@ Jon B: Sie haben Recht; Durch den Vergleich der Typen wird robusterer Code bereitgestellt. Ich habe Vadims ursprünglichen Code einfach aktualisiert, um zu funktionieren. Daniels Ansatz ist der bessere Weg. –