Ponieważ pozostawienie parametru typu takim, jaki jest, nie jest naprawdę SUCHĄ. Rozważmy taką klasę:
class Muffin {
List<string> _peopleWhoLikeMuffins = new List<string>();
public Muffin(List<string> peopleWhoLikeMuffins) {
_peopleWhoLikeMuffins = peopleWhoLikeMuffins);
}
public void AddMuffinLiker(string p) {
_peopleWhoLikeMuffins.Add(p);
}
}
To bardzo krótki i zawiera tylko podstawowe funkcje, ale musiałem użyć string
- genertic parametru Typ - cztery razy. I zawsze będzie tak samo. A jeśli zdecyduję się później zmienić typ, będę musiał wymienić wszystkie cztery wystąpienia.
W rzeczywistych scenariuszach mówimy o setkach, a nie 4. Więc nie jest to bezkompromisowe, aby zawsze je podsumować, ale zdecydowanie warto to rozważyć.
Mój przykład nie jest zbyt dobry (i to nie tylko z powodu głupich nazw), ale wpadł na pomysł - będziesz miał wiele deklaracji pól i zmiennych oraz tworzenie instancji i za każdym razem będziesz musiał przekazać parametr typu, który zawsze będzie taki sam w całej bazie kodu, chyba że inne klasy są również ogólne.
Kolejną zaletą jest to, że będziesz miał znacznie mniej pracy, jeśli będziesz potrzebować dodać do swojego zbioru dodatkowy stan/zachowanie.
To wszystko, co mówię, ja sam nie używam tego rodzaju abstrakcji bardzo często.
W podanym przykładzie, bardziej sensownym byłoby uogólnienie Muffin na rodzajowy (i użycie go z ciągiem) niż zakodowanie na sztywno Listy, więc nie uważam tego za punkt na korzyść tworzenie określonych typów. –
sinelaw
@sinelaw: tak, wskazałem w mojej edycji, że przykład nie jest tak dobry i prawdopodobnie powinien też być generyczny – Dyppl