Deweloper przy pracy zaczął ostatnio używać wzorca klasy zamiast wyliczania w miejscach, w których zwykle mieściły się wyliczanki. Zamiast tego używa czegoś podobnego do tego poniżej:Kiedy i jak należy używać klas wyliczeniowych zamiast wyliczania?
internal class Suit
{
public static readonly Suit Hearts = new Suit();
public static readonly Suit Diamonds = new Suit();
public static readonly Suit Spades = new Suit();
public static readonly Suit Clubs = new Suit();
public static readonly Suit Joker = new Suit();
private static Suit()
{
}
public static bool IsMatch(Suit lhs, Suit rhs)
{
return lhs.Equals(rhs) || (lhs.Equals(Joker) || rhs.Equals(Joker));
}
}
Jego rozumowanie jest to, że niewidoczny wygląda wyliczenie, ale pozwala mu zawierać metod związanych z numeracją (jak IsMatch powyżej), aby być zawarty w sama wyliczenie.
Nazwał to klasą wyliczeń, ale nie jest to coś, co kiedykolwiek widziałem. Zastanawiałem się, jakie są zalety i wady i gdzie mogę znaleźć więcej informacji?
Dzięki
Edit: Inną zaletą opisał była możliwość dodania specyficznych toString() wdrażanie do policzenia.
Cóż, nie można tego zrobić za pomocą 'enum' ponieważ nie można wpisać enum do typu złożonego. Domyślam się, że to jest główny powód używania czegoś takiego? –
Jedynym prawdziwym minusem (poza tym, że niektóre biblioteki stron trzecich nie są zbytnio z tego powodu zadowolone), z jakim się zetknąłem, jest to, że nie można (trywialnie) zrobić przełącznika/obudowy na typie. Ale potem nie używałem tej techniki szeroko w języku C#. –
Unikanie instrukcji zmiany było właściwie jego głównym punktem sprzedaży. Użył go, aby uniknąć tego, co opisał jako monolityczne instrukcje przełączające. Chodzi o to, że powstrzymuje cię to przed użyciem, nawet jeśli chcesz. –