W jaki sposób można wprowadzić wzór enum bezpieczny dla klasy ogólnej? Załóżmy, że jest to realizowane wzdłuż tych liniiWpisz bezpieczną implementację wzorca enum z rodzajami głównymi
public class KnownSetting<T>
{
public readonly static KnownSetting<String> Name = new KnownSetting<String>("name", "Default Name", t => t);
public readonly static KnownSetting<int> Size = new KnownSetting<String>("size", "25", t => Converter.ToInt32);
public String Key { get; set; }
public T DefaultValue { get; set; }
public Func<String, T> Converter { get; set; }
private KnownSetting(String key, T defaultValue, Func<String, T> converter)
{
Key = key;
DefaultValue = defaultValue;
Converter = converter;
}
}
Realizacja wzór jest poprawny w ten sposób, ponieważ konstruktor pozostaje prywatny, ale podczas korzystania z tego konstruktu, wygląda źle:
public static class Program
{
public static void main()
{
var x = KnownSetting<?>.Name;
}
}
Wtedy rozwiązaniem byłoby należy podzielić go na dwie klasy: KnownSetting i Setting, ale wtedy zakres konstruktora nie może być prywatny, aby można go było utworzyć z poziomu kontenera.
W jaki sposób można zaimplementować ten wzorzec, aby jego ogólny aspekt pozostawał ukryty przed użytkownikiem końcowym, ale nadal jest silnie typowany? Czy istnieje bardziej odpowiedni wzór, czy jest lepszy sposób na jego wdrożenie?
Aktualizacja Dodałem drugą próbkę, aby zilustrować, że chcę, aby typ ustawienia był ogólny.
swoje pole statyczne posiada osobne wartości dla każdego 'T'. Nie chcesz tego. – SLaks
Najlepsze, co mogę zrobić, to zbudować wewnętrzny konstruktor i pójść z ideą "klasy kontenerowej", wtedy musisz polegać tylko na dyscyplinie programistów w ramach tego samego zespołu. –
@SLaks Dlaczego nie chciałbym tego? – Spooles