2011-02-07 8 views

Respuesta

2

Separa la interfaz de la implementación. No es importante para quien llama cómo se implementa el objeto resultante, por lo que el uso de interfaces reduce el acoplamiento. Si devuelve IList, puede cambiar a una implementación diferente en cualquier momento sin romper el código de la persona que llama.

4

Si usted está exponiendo su clase a través de una biblioteca que los demás pueden utilizar, por lo general, desea exponerla a través de interfaces en lugar de hormigón implementaciones. Esto ayudará si decides cambiar la implementación de tu clase más tarde para usar una clase concreta diferente. En ese caso, los usuarios de su biblioteca no necesitarán actualizar su código ya que la interfaz no cambia.

Si solo lo está utilizando internamente, es posible que no le interese demasiado, y usando List puede estar bien.

Leer la solución de esta cuestión: Why is it considered bad to expose List<T>?

+0

A veces vas muy lejos en la administración de respuestas antiguas ... – Scoregraphic

-2

Si devuelve como se acaba de lista. entonces la persona que llama de su función tiene que poner el retorno en una instancia de la lista de la clase.

Cuando devuelve un IList, la persona que llama puede ponerlo en una instancia de cualquier elemento que implemente esa interfaz. Supongamos que la persona que llama ha realizado una implementación que admite algún tipo de clasificación funky, o tal vez han realizado una implementación que mapea directamente la lista en una tabla de base de datos.

Se trata de libertad para el receptor para implementar listas.

+1

Eso está mal. Si devuelve List, el receptor tiene la libertad de aceptarlo como List o IList. Si devuelves IList, la libertad se ha ido. – Foxfire

1

No puede devolver un IList - debe devolver una implementación de esa interfaz (es decir, List). Por supuesto, devolver una 'Lista' satisfará su declaración de método de devolver un IList porque List implementa IList.

Generalmente la mejor práctica es aceptar parámetros de la más genérica tipo y para devolver el más específica. Sin embargo, los programadores convencionales tienden a no querer vincularse a la implementación List y normalmente devuelven la interfaz IList. Podría devolver un IEnumerable si no desea que las personas que llaman modifiquen la matriz (llame al método de extensión .AsReadOnly() en su IList).

0

La devolución de la interfaz le permite cambiar su implementación más tarde y, por lo tanto, reduce el acoplamiento.

Sin embargo, cuando se devuelve un objeto, esto suele ser poco preocupante. Esto es mucho más relevante cuando se aceptan objetos (por ejemplo, como parámetro de función).

Cuestiones relacionadas