2009-10-18 11 views
13

¿Por qué estamos implementando, por ejemplo ICloneable o IDisposable. No estoy preguntando qué hacen ICloneable o IDisposable, pero quiero aprender cuál es una buena razón para implementar estas interfaces en lugar de solo escribir un método que elimine o clone nuestros objetos.¿Por qué estamos implementando interfaces?

Respuesta

20

El uso de interfaces mantiene constante el uso de esas piezas de funcionalidad. De esta forma, cuando otra clase desee/necesite usar su clase, puede actuar sobre ella como un objeto desechable y clonable, sin preocuparse por los detalles de su implementación en particular.

+2

Estaba pensando lo mismo a veces pero no estaba muy seguro porque habría algo más, pero tenía razón en lo que pensaba :) Muchas gracias. – Tarik

2

Entre otras razones, lea sobre el bloque using.

+0

Creo que se utiliza para deshacerse de los objetos no referenciados. Pero no estaba preguntando :) gracias por tu tiempo :) – Tarik

5

Porque es posible que desee que el mismo código funcione en instancias de clases diferentes. Por ejemplo, una rutina de limpieza de formularios desea iterar sobre todos los componentes y eliminarlos. Para que pueda hacer esto, necesita referirse a los componentes a través de un tipo: una clase base común o una interfaz. La herencia única significa que una clase base común no siempre es factible (supongamos que mi formulario tiene un FileStream y un botón, ¿qué clase base común podrían tener para que la rutina de limpieza los accediera?); de ahí las interfaces.

10

Al implementar una interfaz bien conocida, puede tener un polimorfismo, que le permite escribir código genérico que puede actuar en cualquier instancia de una clase que implemente una interfaz determinada.

Puede consultar el Wikipedia article on polymorphism para más.

2

Phoebus dio una gran respuesta, pero para agregar un poco más.

Te obliga a escribir los métodos que se esperan para clonar o hacer algo que pueda eliminarse. Si tuviera que escribir solo el método, ¿siempre incluiría todos los métodos necesarios o la firma sería siempre la misma?

Si hay un nuevo marco, y agregan algo, para ayudar a garantizar que las operaciones se realizan correctamente, al tener interfaces, entonces te obliga a implementar cualquier cambio nuevo, ya que tu aplicación ya no se compilará.

2

En resumen, la interfaz separa la implementación y define la estructura, y este concepto es muy útil en los casos en que necesita que la implementación sea intercambiable. Aparte de eso, una interfaz es muy útil cuando la implementación cambia con frecuencia.

La interfaz se puede utilizar para definir una plantilla genérica y luego una o más clases abstractas para definir implementaciones parciales de la interfaz.

Las interfaces solo especifican la declaración de método (implícitamente pública y abstracta) y pueden contener propiedades (que también son implícitamente públicas y abstractas). La definición de interfaz comienza con la interfaz de palabra clave. Una interfaz como la de una clase abstracta no puede ser instanciada.

3

Agregando a más sabiduría de la interfaz, las interfaces se pueden usar como contratos entre el código del consumidor y el código del servicio. En lugar de decir que este es el objeto con el que trataremos, con las interfaces es el acuerdo, así es como se ve el objeto que devuelvo.En el código, podría ser algo como:

código de servicio

public IEnumerable<int> GetNumbers(){ return new []{1,2,3,4,5}; } 

código de cliente:

var result = serviceProxy.GetNumbers(); 

Aquí el código de servicio puede cambiar la aplicación de devolver cualquier clase que satisface IEnumerable sin romper el código de cliente .

Además de todo esto, tiene otras aplicaciones como IoC DI, Prueba de unidades, Mocking de objetos. Todo esto cosecha beneficios de bondad polimórfica.

2

Una interfaz separa lo que se hace de cómo se hace. Los clientes manejan el tipo de interfaz, sin tener que saber cuál es la clase de implementación, porque pueden confiar en el contrato que aplica.

Esto es importante para situaciones que generan proxies dinámicos. Los clientes no necesitan saber que están tratando con un proxy, lo que le da la libertad de inyectar cualquier comportamiento que necesite. Es una técnica común para la programación orientada a aspectos.

Cuestiones relacionadas