Para la primera pregunta: si devuelve una interfaz, conserva más flexibilidad. Puede cambiar la implementación más tarde para devolver un tipo concreto diferente. Por otro lado, obviamente le da a la persona que llama menos información, por lo que es posible que no pueda realizar ciertas operaciones. (Por ejemplo, si devuelve List<T>
, la persona que llama puede usar ConvertAll, etc., que no pueden si solo declara que devuelve IList<T>
). En algunas situaciones, vale la pena especificar el tipo concreto; I generalmente prefiero al menos comenzar con interfaces, y solo mover para poner el tipo concreto como el tipo de retorno si encuentro que con frecuencia quiero usar los métodos adicionales disponibles.
En segundo lugar, ninguna interfaz de colección estándar tiene un método Sort
. Por otro lado, puede escribir un método de extensión para ordenar cualquier IList<T>
. Personalmente, generalmente prefiero los métodos LINQ OrderBy
, OrderByDescending
, ThenBy
y ThenByDescending
... aunque devuelven una secuencia nueva, en lugar de ordenarla en su lugar.
Gracias por esto, muy útil. Y esta es la cuestión: no estoy escribiendo una biblioteca para uso externo. Estoy escribiendo una intranet para una empresa en la que soy el único desarrollador. Puede hacer que sea más difícil para mí ver el propósito en algunas de estas cosas. – David
Sí, si es puramente interno y está seguro de que no estará expuesto al público o a varias partes de su software, devolver un objeto List debería estar bien. Pero si, por ejemplo, es una biblioteca de clases, y aunque solo se usa en su aplicación por ahora, es posible que desee extender su aplicación y usar esa biblioteca nuevamente, por lo tanto, se verá obligado a List en lugar de su propia implementación. –