Un buon consiglio che ho spesso sentito citato è questo:
essere liberale in ciò che accetti, precisa in che cosa fornite.
In termini di progettazione dell'API, suggerirei di restituire un'interfaccia, non un tipo concreto.
Prendendo il metodo di esempio, mi piacerebbe riscrivere come segue:
public IList<object> Foo()
{
List<object> retList = new List<object>();
// Blah, blah, [snip]
return retList;
}
La chiave è che la vostra scelta implementazione interna - di utilizzare un elenco - non è rivelato al chiamante, ma sei restituire un'interfaccia appropriata.
Le linee guida di Microsoft sullo sviluppo del framework raccomandano di non restituire tipi specifici, favorendo le interfacce. (Spiacente, non sono riuscito a trovare un collegamento per questo)
Analogamente, i parametri dovrebbero essere il più generici possibile: anziché accettare un array, accettare un oggetto IEnumerable del tipo appropriato. Questo è compatibile con gli array e con liste e altri tipi utili.
Riprendendo il metodo di esempio:
public IList<object> Foo(IEnumerable<object> bar)
{
List<object> retList = new List<object>();
// Blah, blah, [snip]
return retList;
}
(risposte uniti dalla recente duplicato) –