Idealmente si utilizzano, o si creano secondo necessità, classi che riflettono il modo in cui le cose funzionano nel mondo reale, le cose che si stanno modellando nel codice. Tali classi ci danno un livello di astrazione in modo che possiamo codificare in termini di ciò che stiamo modellando/simulando. Inoltre, quando si codifica una cosa complessa, l'utilizzo di un paradigma familiare aiuta. Per arguire: Oh, questa classe Fuzzinator usa uno Stack. So cosa è una pila e come funziona.
In secondo luogo, questa classe di livello superiore di astrazione ci fornisce il codice che funziona (presupponiamo che il framework .NET sia stato testato) e ci risparmia il tempo e il dolore di reinventare la ruota.
In terzo luogo, il codice è più facile da leggere, più facile da capire, più facile da modificare e così via. È più manutenibile.
L'utilizzo di classi con funzionalità più raffinate consente di limitare il modo in cui si potrebbe rovinare l'utilizzo.
Nel complesso l'applicazione è semplicemente meglio quando è codificata a livelli appropriati di astrazione.
Lo stack è una di queste classi.
La calcolatrice HP-41X esegue la sua aritmetica utilizzando una pila. Questo metodo di calcolo è chiamato RPN - Notazione polacca inversa.
Se stavo simulando una caffetteria, lo Stack sarebbe perfetto per quella pila di piatti. I piatti si accendono e si staccano dall'alto. Non al centro, non alla fine; solo il top. Una pila. Posso solo le lastre Push() e Pop() che rendono il codice più semplice e chiaro.
In alternativa, immaginare la codifica con l'equivalente C# di particelle subatomiche - raccolta generica o IEnumerable generico, ecc. Finisco per usare metodi e proprietà di utilità generale con nomi generali con numeri a variabili multiple di parametri che nell'aggregato il fatto che sto impilando piatti.
Precisamente quando si vuole far rispettare il fatto che la vostra collezione viene manipolata come una pila, che Lista non può garantire. IEnumerable è una cosa completamente diversa. –
OK. Potete fornirmi un esempio di uno scenario in cui desidero il comportamento dello stack? – jhovgaard
hmm 'Stack La funzionalità di' 'sembra davvero un sottoinsieme di' Lista ', quindi sono d'accordo che non sembra la raccolta più utile. L'applicazione del comportamento dello stack è necessaria solo se esposta pubblicamente. Ma in quel caso di solito è una buona idea esporre una specie di wrapper sulla collezione interna, quindi non sembra davvero molto utile neanche per quello. Quindi vedrei sicuramente l'uso per un'interfaccia '' IStack ', ma non tanto per una semplice classe di raccolta' Stack '. –
CodesInChaos