Bellow jest uproszczona wersja kodu mam:Generic problemem fabryka klasa
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;
}
}
Problem polega na sposobie GetControl z ControlFactory klasie. Ponieważ zwraca IControl i mam tylko IControl < T> to ogólny interfejs. Nie mogę podać T, ponieważ w przypadku Boola będzie to bool, aw przypadku String będzie to ciąg.
Każdy pomysł, co muszę zrobić, aby działało?
@Vadim - Zdecydowanie radzę skorzystać z rozwiązania Daniela, w którym porównuje typy, zamiast używać ciągów. Używanie nazwy typu jest bardziej podatne na błędy. –
@Jon B: masz rację; porównanie typów zapewni bardziej odporny kod. Po prostu zaktualizowałem oryginalny kod Vadima do pracy. Podejście Daniela jest lepszą drogą. –