2010-07-25 70 views
6

在閱讀Observer設計模式時,我注意到它是用接口實現的。在Java中,java.util.observable實現也是一個類。 C#和Java版本不應該使用接口嗎?爲什麼.NET ObservableCollection <T>實現爲類而不是接口?

Scott

+1

你如何「作爲接口實現」?如果已經實施了,這是一個班級,不是嗎?一個接口不是自己實現的。 – Kobi 2010-07-25 06:58:09

+0

然而,這個問題的意義。 .net集合對象圖與ObservableCollection 有巨大的差距。它的功能應該被分離到不同的接口中,以便以更靈活的方式實現可擴展性。例如,如果我實現ObservableDictionary :INotifyCollectionChanged,則不能將其用作ReadOnlyObservableCollection的源代碼。目前的實現不是基於模式的,並且根本不支持基於模式的開發。 – 2015-10-28 16:50:41

回答

8

那麼,它實現INotifyCollectionChangedINotifyPropertyChanged。然而,有趣的是,它不會實現您可能預期的.NET 4.0的新IObservable<T>接口。

對於那裏有一個通用形式的INotifyCollectionChanged ......可以證明是有用的,但我不知道其中之一。

+0

所以,我實際上已經嘗試過了,如果你直接做,它會變得非常醜陋,因爲任何實現IObservable 和IEnumerable 的類都會得到* Rx和Linq擴展名 - 大量的鑄造和咬牙切齒。但是,您可以很容易地將AsObservable()作爲擴展方法實現 – 2010-07-27 23:50:37

2

但他們使用接口。 .NET中的ObservableCollection是接口的一個實現 - 您可以自由地忽略它並適用於您自己的實現。

相關問題