Un buen consejo que yo he oído tantas veces citado es la siguiente:
ser liberal en lo que acepta, preciso en lo que usted proporciona.
En cuanto al diseño de su API, le sugiero que devuelva una interfaz, no un tipo concreto.
Llevar a su método de ejemplo, me gustaría volver a escribir de la siguiente manera:
public IList<object> Foo()
{
List<object> retList = new List<object>();
// Blah, blah, [snip]
return retList;
}
La clave es que su elección implementación interna - Para utilizar una lista - no se revela a la persona que llama, pero eres devolviendo una interfaz apropiada.
Las propias directrices de Microsoft sobre el desarrollo del framework recomiendan no devolver tipos específicos, lo que favorece las interfaces. (Lo siento, no he podido encontrar un enlace para esto)
Del mismo modo, sus parámetros deben ser lo más generales posible: en lugar de aceptar una matriz, acepte un IEnumerable del tipo apropiado. Esto es compatible con matrices, listas y otros tipos útiles.
Llevar a su método de ejemplo de nuevo:
public IList<object> Foo(IEnumerable<object> bar)
{
List<object> retList = new List<object>();
// Blah, blah, [snip]
return retList;
}
(respuestas combinadas de reciente duplicado) –