2010-07-25 9 views
6

Al leer sobre el patrón de diseño Observer, noté que se implementa mediante interfaces. En Java, la implementación de java.util.observable es también una clase. ¿No deberían las versiones C# y Java usar interfaces?¿Por qué .NET ObservableCollection <T> se implementó como una clase y no como una interfaz?

Scott

+1

¿Cómo se puede "implementar como interfaz"? Si algo ya está implementado, es una clase, ¿no es así? Una interfaz no se implementa por sí misma. – Kobi

+0

Sin embargo, el significado de la pregunta es válido. Hay un gran hueco en el gráfico de objetos de la colección .net con ObservableCollection . Su funcionalidad debería haberse separado en diferentes interfaces para permitir la extensibilidad de una manera más flexible. Por ejemplo, si implemento un ObservableDictionary : INotifyCollectionChanged, no puedo usarlo como fuente para ReadOnlyObservableCollection . La implementación actual no se basa en patrones y no admite el desarrollo basado en patrones en absoluto. –

Respuesta

8

Bueno, implementa INotifyCollectionChanged y INotifyPropertyChanged. Sin embargo, curiosamente, no implementa la nueva interfaz IObservable<T> de .NET 4.0, que podría haber esperado.

Podría ser útil que exista una forma genérica de INotifyCollectionChanged ... pero no conozco ninguna.

+0

Así que, en realidad probé esto, y termina siendo realmente feo si lo haces directamente, ya que cualquier clase que implemente IObservable e IEnumerable obtengas * ambas extensiones * Rx y Linq: montones de fundición y crujir de dientes. Sin embargo, podría implementar AsObservable() como un método de extensión con bastante facilidad –

2

Pero HACEN uso de interfaces. El ObservableCollection en .NET es una implementación de las interfaces; usted puede ignorarlo y su propia implementación.

Cuestiones relacionadas