2009-06-09 17 views

Respuesta

7

Bueno, hay una interfaz en particular que es probablemente una de las interfaces más importantes en .NET y expone un evento ... INotifyPropertyChanged. :)

Nunca he visto ninguna recomendación en contra de FxCop o las Directrices del Marco y no puedo ver por qué habría. Lo único es que si implementa la interfaz de forma explícita, se convierte en un problema para implementar el evento, ya que debe usar los accesadores de agregar/eliminar explícitos.

0

creo que esto se debe principalmente a los eventos pueden sustituir la necesidad de interfaces.

Normalmente, una interfaz se usaría para un sistema de eventos en idiomas como Java, por ejemplo. En .NET, si tienes un evento al que puedes suscribirte con un único método, rara vez se necesita una clase completa y ese método.

Estoy seguro de que podría haber situaciones legítimas donde existen interfaces que implementan eventos, pero veo los eventos como una forma de reducir la necesidad de interfaces, algo que no necesariamente se usa para componer interfaces.

Definitivamente no lo consideraría una mala práctica.

2

No veo ningún problema con eso. Es solo especificar un contrato y, en particular, especificar que se desencadene ese tipo de evento.

Personalmente lo uso en algunas de nuestras interfaces internas, y realmente me ayudó a limpiar el código. Si no lo especifica en la interfaz, tendrá que estar en la clase concreta, y estará vinculado a una implementación particular.

3

Por lo que vale, no creo que sea una mala práctica.

Ciertamente no es tan común, pero (sospecho) eso es más porque hay una falta de necesidad o el uso de otras técnicas.

He usado eventos en las interfaces con muy buen efecto.

Nota: Si desea exponer la interfaz a través de COM o WCF, entonces los eventos son probablemente una mala elección, pero esa es una minoría de casos.

+1

Voy a secundar ese punto sobre COM y eventos. No creerías lo derrochador que son las envolturas de interoperabilidad COM con los eventos. – Josh

2

Los eventos en las interfaces tienen algunos usos apropiados. Proporcionan una forma de especificar una interfaz "saliente" de un objeto. Por ejemplo, IBindingList contiene un evento ListChanged.

Una decisión de diseño importante es si incluir el evento en una interfaz entrante junto con otros métodos o ponerlo en una interfaz separada. El factor clave es cuán fuertemente acoplados están los métodos a ese evento en particular.

0

¡Es perfectamente lógico que una interfaz requiera un evento, cuando la interfaz realmente requiere un evento!

0

¡No creo que sea malo en absoluto!Definí una interfaz para poder desacoplar mi aplicación principal de un componente que necesito actualizar con frecuencia y, así, instanciar e invocar dinámicamente en tiempo de ejecución. Para comunicar el estado de lo que hace el componente, definí varios eventos en el contrato de interfaz para que la aplicación principal sepa a qué suscribirse y el componente publica exactamente lo que necesita la aplicación principal.

Cuestiones relacionadas