Per la prima domanda: se si restituisce un'interfaccia, si mantiene più flessibilità. È possibile modificare l'implementazione in un secondo momento per restituire un tipo concreto diverso. D'altra parte, ovviamente, il chiamante riceve meno informazioni, quindi potrebbe non essere in grado di eseguire determinate operazioni. Ad esempio, se si restituisce List<T>
, il chiamante può utilizzare ConvertAll ecc. che non è possibile se si dichiara solo di restituire IList<T>
. In alcune situazioni è opportuno specificare il tipo concreto; I generalmente preferisco iniziare almeno con le interfacce, e solo spostare il tipo concreto come tipo di ritorno se trovo che frequentemente voglio usare i metodi extra disponibili.
In secondo luogo, nessuna interfaccia di raccolta standard ha un metodo Sort
. D'altra parte, è possibile scrivere un metodo di estensione per ordinare qualsiasi IList<T>
. Personalmente di solito preferisco i metodi LINQ OrderBy
, OrderByDescending
, ThenBy
e ThenByDescending
... anche se restituiscono una nuova sequenza, piuttosto che l'ordinamento in atto.
fonte
2010-08-25 09:04:21
Grazie per questo - molto utile. E questa è la cosa - non sto scrivendo una libreria per uso esterno. Sto scrivendo una intranet per un'azienda in cui sono l'unico sviluppatore. Può rendere più difficile per me vedere lo scopo in alcune di queste cose. – David
Sì, se è puramente interno e sicuramente sicuro che non sarà esposto al pubblico o a più parti del software, quindi restituire un oggetto List dovrebbe andare bene. Ma se ad esempio si tratta di una libreria di classi, e sebbene sia utilizzata solo per ora, potresti voler estendere la tua applicazione e usare di nuovo quella libreria, quindi sarai vincolato alla lista piuttosto che alla tua stessa implementazione. –